ошибка PLS-00103 при выполнении процедуры - PullRequest
0 голосов
/ 21 января 2020

Я использовал этот сайт http://sqlines.com/online (поскольку я никогда раньше не использовал oracle ...) для преобразования procudere из sqlServer в oracle procudere Я выполняю procudere в 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 error
, если это поможет, это прокурер, написанный в sqlserver до преобразования ...

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)

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Вам не нужно передавать размер параметров в 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;
0 голосов
/ 21 января 2020

Входные параметры procedure не могут иметь длину данных в oracle.

Поэтому удалите часть длины данных из всех параметров procedure.

Измените 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;

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...