Oracle 执行程序时出现错误PLS-00103

Oracle 执行程序时出现错误PLS-00103,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我使用了这个网站(因为我以前从未使用过oracle…) 将sqlServer中的进程转换为oracle进程 我正在OracleSqlDevelopers中执行进程 create or replace procedure GET_ITEMS_PROC(p_CODE varchar2(14), p_CODE_SUPPLIER varchar2(20),p_SELECT1 varchar2(4),p_SELECT2 varchar2(4) ,p_SELECT3 varchar2(4),p_SE

我使用了这个网站(因为我以前从未使用过oracle…) 将sqlServer中的进程转换为oracle进程 我正在OracleSqlDevelopers中执行进程

create or replace procedure GET_ITEMS_PROC(p_CODE varchar2(14), p_CODE_SUPPLIER varchar2(20),p_SELECT1 varchar2(4),p_SELECT2 varchar2(4)
    ,p_SELECT3 varchar2(4),p_SELECT4 varchar2(4),
    p_SELECT5 varchar2(4),p_SELECT6 varchar2(4),p_SELECT7 varchar2(4)
    ,p_SELECT8 varchar2(4),p_SELECT9 varchar2(4),p_SELECT10 varchar2(4), cur out sys_refcursor)
    as
    begin
    open cur for select * from ITEMS where ( p_CODE IS NULL OR CODE=p_CODE )and (p_CODE_SUPPLIER IS NULL OR SUP_CODE= p_CODE_SUPPLIER) and
    (p_SELECT1 IS NULL OR  SELECT1= p_SELECT1)
    and ( p_SELECT2 IS NULL OR SELECT2= p_SELECT2 )and(p_SELECT3 IS NULL OR  SELECT3= p_SELECT3 )and ( p_SELECT4 IS NULL OR SELECT4= p_SELECT4) and 
    ( p_SELECT5 IS NULL OR SELECT5= p_SELECT5) and ( p_SELECT6 IS NULL OR SELECT6= p_SELECT6) and ( p_SELECT7 IS NULL OR SELECT7= p_SELECT7)
    and ( p_SELECT8 IS NULL OR SELECT8= p_SELECT8) and ( p_SELECT9 IS NULL OR SELECT9= p_SELECT9) and ( p_SELECT10 IS NULL OR SELECT10= p_SELECT10);
    end;
它给出了
PLS-00103错误

如果有帮助的话,这是在转换之前用sqlserver编写的procuder

create procedure GET_ITEMS_PROC(@CODE nvarchar(14), @CODE_SUPPLIER nvarchar(20),@SELECT1 nvarchar(4),@SELECT2 nvarchar(4)
,@SELECT3 nvarchar(4),@SELECT4 nvarchar(4),
@SELECT5 nvarchar(4),@SELECT6 nvarchar(4),@SELECT7 nvarchar(4)
,@SELECT8 nvarchar(4),@SELECT9 nvarchar(4),@SELECT10 nvarchar(4))
as
select * from dbo.ITEMS where ( @CODE IS NULL OR CODE=@CODE )and (@CODE_SUPPLIER IS NULL OR SUP_CODE= @CODE_SUPPLIER) and
(@SELECT1 IS NULL OR  SELECT1= @SELECT1)
and ( @SELECT2 IS NULL OR SELECT2= @SELECT2 )and(@SELECT3 IS NULL OR  SELECT3= @SELECT3 )and ( @SELECT4 IS NULL OR SELECT4= @SELECT4) and 
( @SELECT5 IS NULL OR SELECT5= @SELECT5) and ( @SELECT6 IS NULL OR SELECT6= @SELECT6) and ( @SELECT7 IS NULL OR SELECT7= @SELECT7)
and ( @SELECT8 IS NULL OR SELECT8= @SELECT8) and ( @SELECT9 IS NULL OR SELECT9= @SELECT9) and ( @SELECT10 IS NULL OR SELECT10= @SELECT10)

非常感谢在oracle中,
过程的输入参数不能具有数据长度

因此,从
过程的所有参数中删除数据长度部分

p_code varchar2(14)
更改为
p_code varchar2
,所有参数都相同

代码的最终版本为:

create or replace procedure GET_ITEMS_PROC(p_CODE varchar2, 
p_CODE_SUPPLIER varchar2,
p_SELECT1 varchar2,
p_SELECT2 varchar2,
p_SELECT3 varchar2,
p_SELECT4 varchar2,
p_SELECT5 varchar2,
p_SELECT6 varchar2,
p_SELECT7 varchar2,
p_SELECT8 varchar2,
p_SELECT9 varchar2,
p_SELECT10 varchar2, 
cur out sys_refcursor)
    as
    begin
    open cur for select * from ITEMS where ( p_CODE IS NULL OR CODE=p_CODE )and (p_CODE_SUPPLIER IS NULL OR SUP_CODE= p_CODE_SUPPLIER) and
    (p_SELECT1 IS NULL OR  SELECT1= p_SELECT1)
    and ( p_SELECT2 IS NULL OR SELECT2= p_SELECT2 )and(p_SELECT3 IS NULL OR  SELECT3= p_SELECT3 )and ( p_SELECT4 IS NULL OR SELECT4= p_SELECT4) and 
    ( p_SELECT5 IS NULL OR SELECT5= p_SELECT5) and ( p_SELECT6 IS NULL OR SELECT6= p_SELECT6) and ( p_SELECT7 IS NULL OR SELECT7= p_SELECT7)
    and ( p_SELECT8 IS NULL OR SELECT8= p_SELECT8) and ( p_SELECT9 IS NULL OR SELECT9= p_SELECT9) and ( p_SELECT10 IS NULL OR SELECT10= p_SELECT10);
    end;

干杯

您不需要在Oracle中传递参数的大小。所以试试这个-

CREATE OR REPLACE PROCEDURE GET_ITEMS_PROC(
    p_CODE VARCHAR2,
    p_CODE_SUPPLIER VARCHAR2,
    p_SELECT1 VARCHAR2,
    p_SELECT2 VARCHAR2,
    p_SELECT3 VARCHAR2,
    p_SELECT4 VARCHAR2,
    p_SELECT5 VARCHAR2,
    p_SELECT6 VARCHAR2,
    p_SELECT7 VARCHAR2,
    p_SELECT8 VARCHAR2,
    p_SELECT9 VARCHAR2,
    p_SELECT10 VARCHAR2,
    cur OUT sys_refcursor)
AS
BEGIN
  OPEN cur FOR
       SELECT *
       FROM ITEMS
       WHERE (p_CODE         IS NULL OR CODE               = p_CODE)
       AND ( p_CODE_SUPPLIER IS NULL OR SUP_CODE           = p_CODE_SUPPLIER)
       AND ( p_SELECT1       IS NULL OR SELECT1            = p_SELECT1)
       AND ( p_SELECT2       IS NULL OR SELECT2            = p_SELECT2)
       AND ( p_SELECT3       IS NULL OR SELECT3            = p_SELECT3)
       AND ( p_SELECT4       IS NULL OR SELECT4            = p_SELECT4)
       AND ( p_SELECT5       IS NULL OR SELECT5            = p_SELECT5)
       AND ( p_SELECT6       IS NULL OR SELECT6            = p_SELECT6)
       AND ( p_SELECT7       IS NULL OR SELECT7            = p_SELECT7)
       AND ( p_SELECT8       IS NULL OR SELECT8            = p_SELECT8)
       AND ( p_SELECT9       IS NULL OR SELECT9            = p_SELECT9)
       AND ( p_SELECT10      IS NULL OR SELECT10           = p_SELECT10);
END;