Sql server 如何将过程从SQL Server转换为Oracle?
我是甲骨文的新手。我想从SQL Server转换一个过程 这是我的程序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;
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中,anEND 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;