Sql server 如何将过程从SQL Server转换为Oracle?

Sql server 如何将过程从SQL Server转换为Oracle?,sql-server,oracle,stored-procedures,Sql Server,Oracle,Stored Procedures,我是甲骨文的新手。我想从SQL Server转换一个过程 这是我的程序 ALTER PROCEDURE [dbo].[GETMONITORING] @namabarang varchar (max)=null, @PeriodeAwal varchar (max)=null, @PeriodeAkhir varchar (max)=null, @JenisLayanan varchar (max)=null AS BEGIN SET NOCOUNT ON;

我是甲骨文的新手。我想从SQL Server转换一个过程

这是我的程序

ALTER PROCEDURE [dbo].[GETMONITORING]
    @namabarang varchar (max)=null,
    @PeriodeAwal varchar (max)=null,
    @PeriodeAkhir varchar (max)=null,
    @JenisLayanan varchar (max)=null
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE 
        @nWhere varchar(4000),
        @Select varchar(4000),
        @from varchar(4000),
        @Where varchar(4000),
        @final varchar (4000)

    SET @Select = 'select * '
    SET @from = 'from table  '
    SET @where = 'where 1=1'

    IF isnull(len(@namabarang), 0) <> 0
       SET @where = ISNULL(@where, '') + ' and namabarang like ''' + ISNULL(@namabarang, '') + ''' '

    IF isnull(len(@JenisLayanan), 0) <> 0
       SET @where = ISNULL(@where, '') + 'and jenislayananid like ''' + ISNULL(@JenisLayanan, '') + ''' '

    IF isnull(len(@PeriodeAwal), 0) <> 0 and isnull(len(@PeriodeAkhir), 0) <> 0
       SET @where = ISNULL(@where, '') + ' and tanggalpermohonan between ' + @PeriodeAwal + ' and ' + @PeriodeAkhir

    SET @final = @Select + @from + @where

    execute (@final)
END
编译该存储过程时,会出现一个错误:


错误(37,50):PLS-00103:在预期以下情况时遇到符号“%”:&=-+;at in是mod余数而不是rem或!=或者~=>=您缺少常数周围的额外单引号:

if namabarang is not null then
    v_where :=v_where || ' and namabarang like ''%' || v_namabarang || '%';
end if;
if jenislayanan is not null then
    v_where :=v_where || ' and jenislayanan = '''|| v_jenislayanan || '''';
end if;

我认为您需要对“%”中的单引号进行转义,即改用“%”。一个
IF
块必须用
end IF
@AufalAhdy“关闭”-第二行末尾有一个额外的单引号,现在已更正。再试一次。@BobJarvis我再试了一次。复制粘贴。结果“错误(53,4):PLS-00103:遇到符号”;“当期望下列情况之一时:if”啊-看起来你需要两个
END if行,如果jenislayanan…
之前,另一行在上述片段的末尾。在PL/SQL中,an
END IF
,则每个
都需要code>,因为PL/SQL是基于Ada的,而不是基于C。祝你好运。
if namabarang is not null then
    v_where :=v_where || ' and namabarang like ''%' || v_namabarang || '%';
end if;
if jenislayanan is not null then
    v_where :=v_where || ' and jenislayanan = '''|| v_jenislayanan || '''';
end if;