PLS-00306 (Неверное количество или типы аргументов) Ошибка при вызове другой процедуры схемы с параметром TYPE - PullRequest
0 голосов
/ 05 августа 2020

Я получаю PLS-00306: ошибка неправильного числа или типов аргументов, когда я вызываю процедуру в другой схеме. Процедура включает TYPE в параметре out. Я создал объект того же типа, что и в другой схеме, при условии предоставления прав как типу, так и процедуре. но по-прежнему появляется ошибка.

PROCEDURE get_test_data(
                            in_param      IN VARCHAR2
                            out_param      OUT VARCHAR2)
  AS
  test_obj TEST_TYPE;
    
  BEGIN
     schema1.testpackage.getdata@db_link(
        in_param => in_param,
        test_obj => test_obj,
     );
    
    --logic & exceptions 
  
END get_test_data;

Я что-то пропустил?

1 Ответ

0 голосов
/ 05 августа 2020

Я создал объект того же типа, что и в другой схеме,

Нет абсолютно никакой необходимости создавать другой Type. Вы можете Grant выполнить для типа повторное использование того же типа в другой схеме. См. Демонстрацию

Schema_A:

Create or replace type test_Obj is OBJECT
(
   name               varchar2(500),
   currency           varchar2(500)
   id                 number
);
/
CREATE OR REPLACE  TYPE V_TST_OBJ IS TABLE OF test_Obj;
/
GRANT EXECUTE ON test_obj TO Schema_B;
GRANT EXECUTE ON v_tst_obj TO Schema_B;

Schema_B:

PROCEDURE get_test_data(
                            in_param      IN VARCHAR2
                            out_param      OUT VARCHAR2)
  AS
   v_tst_obj          Schema_A.v_tst_obj := schema_A.v_tst_obj() ;
    
  BEGIN
     schema1.testpackage.getdata@db_link(
        in_param => in_param,
        test_obj => v_tst_obj,
     );
    
    --logic & exceptions 
  
  END get_test_data;
...