【发布时间】:2015-11-12 13:46:25
【问题描述】:
我是甲骨文的新手。我想从 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
我已尝试转换为 Oracle。这是我在 Oracle 中的存储过程
create or replace PROCEDURE GETMONITORING
(
v_namabarang in varchar2 default null,
v_JenisLayanan in varchar2 default null
)
AS
v_where VARCHAR2(200);
v_Select VARCHAR2(200);
v_from VARCHAR2(200);
v_final VARCHAR2(200);
v_result VARCHAR2(200);
BEGIN
v_Select := 'select * ';
v_from := 'from permohonan ';
v_where := 'where sysdate=sysdate ';
if namabarang is not null
then v_where := v_where || ' and namabarang like '%' || v_namabarang || '%'';
if jenislayanan is not null
then v_where := v_where || 'and jenislayanan='||v_jenislayanan ;
v_final := v_select || v_from || v_where;
EXECUTE immediate v_final INTO v_result;
dbms_output.put_line(v_result);
END;
当我编译那个存储过程时,我得到一个错误:
错误(37,50):PLS-00103:在预期以下之一时遇到符号“%”:* & = - + ; > at in is mod 余数 not rem or != or ~= >= and or like2 like4 likec ||成员子集
你能帮我解决这个问题吗?
我在 Oracle 中的存储过程在逻辑上是否正确?
如何在 sqlplus 中调用该存储过程?
谢谢
【问题讨论】:
-
我认为您需要转义 '%' 中的单引号,即改用 ''%''。
-
IF块必须用end if“关闭”
标签: sql-server oracle stored-procedures