Как выполнить хранимую процедуру Oracle с 4 входными параметрами и более 60 выходными параметрами, используя SQL Worksheet в SQL Developer? - PullRequest
0 голосов
/ 07 января 2019

Я создал один SP Oracle 11g с 4 входными параметрами и приблизительно 64 выходными параметрами. Все типы данных входных и выходных параметров - VARCHAR2, у меня есть Oracle Sql Developer Tool. Когда я пытаюсь выполнить SP в рабочем листе, передавая 4 входных параметра, в которых 2 являются параметрами даты, он показывает ошибку:

Сообщение об ошибке - ORA-06550: строка 1, столбец 212: PLS-00306: неправильный номер или типы аргументов при вызове 'TEST_PROC_PROFIT_N_LOSS' ORA-06550: строка 1, столбец 212: PL / SQL: оператор игнорируется 06550. 00000 - «строка% s, столбец% s: \ n% s» * Причина: обычно ошибка компиляции PL / SQL.

Я пробую в листе

execute test_proc_profit_n_loss('01','01/04/2017','31/03/2018','01');

но я не упоминаю параметр OP из-за того, что он больше 60

Ответы [ 2 ]

0 голосов
/ 14 января 2019

у меня этот код работает

SET SERVEROUTPUT ON;
DECLARE
IP_USER_ID  VARCHAR2(200);
IP_FROM_DATE  VARCHAR2(200);
IP_TO_DATE  VARCHAR2(200);
IP_COMPANY_ID  VARCHAR2(200);

OP_COMPNAME VARCHAR2(200);
OP_COMPADD VARCHAR2(200);
OP_DE_GROUPNAME VARCHAR2(200);
OP_DE_FUNVAL VARCHAR2(200);
OP_DE_LEDGER_NAME VARCHAR2(200);
OP_DE_AMOUNT VARCHAR2(200);
OP_IMPCHRG_GROUP_NAME VARCHAR2(200);
OP_IMPCHRG_FUNVAL VARCHAR2(200);
OP_PURACC_NAME VARCHAR2(200);
OP_PURACC_AMOUNT VARCHAR2(200);
OP_SALES_GROUP_NAME VARCHAR2(200);
OP_SALES_AMOUNT VARCHAR2(200);
OP_INDIR_GROUPNAME VARCHAR2(200);
OP_INDIR_AMOUNT VARCHAR2(200);
OP_FINEXP_GROUPNAME VARCHAR2(200);
OP_FINEXP_AMOUNT VARCHAR2(200);
OP_INSUEXP_GROUPNAME VARCHAR2(200);
OP_INSUEXP_AMOUNT VARCHAR2(200);
OP_OFFEXP_GROUPNAME VARCHAR2(200);
OP_OFFEXP_AMOUNT VARCHAR2(200);
OP_SDE_GROUPNAME VARCHAR2(200);
OP_SDE_AMOUNT VARCHAR2(200);
OP_SATUEXP_GROUPNAME VARCHAR2(200);
OP_SATUEXP_AMOUNT VARCHAR2(200);
OP_ININCOM_GNAME VARCHAR2(200);
OP_ININCOM_AMT VARCHAR2(200);
OP_IC_LEDGNAME VARCHAR2(200);
OP_IC_LEDAMOUNT VARCHAR2(200);
OP_PA_LEDGNAME VARCHAR2(200);
OP_PA_LEDAMOUNT VARCHAR2(200);
OP_SA_LEDGNAME VARCHAR2(200);
OP_SA_LEDAMOUNT VARCHAR2(200);
OP_IE_LEDGNAME VARCHAR2(200);
OP_IE_LEDAMOUNT VARCHAR2(200);
OP_FE_LEDGNAME VARCHAR2(200);
OP_FE_LEDAMOUNT VARCHAR2(200);
OP_INS_LEDGNAME VARCHAR2(200);
OP_INS_LEDAMOUNT VARCHAR2(200);
OP_OE_LEDGNAME VARCHAR2(200);
OP_OE_LEDAMOUNT VARCHAR2(200);
OP_SDE_LEDGNAME VARCHAR2(200);
OP_SDE_LEDAMOUNT VARCHAR2(200);
OP_SE_LEDGNAME VARCHAR2(200);
OP_SE_LEDAMOUNT VARCHAR2(200);
OP_IND_LEDGNAME VARCHAR2(200);
OP_IND_LEDAMOUNT VARCHAR2(200);
OUT_OPENINGAMT VARCHAR2(200);
OUT_CLOSINGAMT VARCHAR2(200);
OP_GROSS_PRO_CO VARCHAR2(200);
OP_GROSS_PRO_BF VARCHAR2(200);
OP_GROSS_LOS_CO VARCHAR2(200);
OP_GROSS_LOS_BF VARCHAR2(200);
OP_GR_DIREXP_TOT VARCHAR2(200);
OP_GR_DIRINC_TOT VARCHAR2(200);
OP_GR_INDIREXP_TOT VARCHAR2(200);
OP_GR_INDIRINCOM_TOT VARCHAR2(200);
OP_NETPROFIT VARCHAR2(200);
OP_NETLOSS VARCHAR2(200);
OP_MSG VARCHAR2(200);
OP_RESULT VARCHAR2(200);
BEGIN
IP_USER_ID := '01';
IP_FROM_DATE := '01/04/2017';
IP_TO_DATE := '31/03/2018';
IP_COMPANY_ID := '01';

TEST_PROC_PROFIT_N_LOSS(

IP_USER_ID,
IP_FROM_DATE, 
IP_TO_DATE,
IP_COMPANY_ID,

OP_COMPNAME,
OP_COMPADD ,
OP_DE_GROUPNAME ,
OP_DE_FUNVAL ,
OP_DE_LEDGER_NAME ,
OP_DE_AMOUNT ,
OP_IMPCHRG_GROUP_NAME ,
OP_IMPCHRG_FUNVAL ,
OP_PURACC_NAME ,
OP_PURACC_AMOUNT ,
OP_SALES_GROUP_NAME ,
OP_SALES_AMOUNT ,
OP_INDIR_GROUPNAME ,
OP_INDIR_AMOUNT ,
OP_FINEXP_GROUPNAME ,
OP_FINEXP_AMOUNT ,
OP_INSUEXP_GROUPNAME ,
OP_INSUEXP_AMOUNT ,
OP_OFFEXP_GROUPNAME ,
OP_OFFEXP_AMOUNT ,
OP_SDE_GROUPNAME ,
OP_SDE_AMOUNT ,
OP_SATUEXP_GROUPNAME ,
OP_SATUEXP_AMOUNT ,
OP_ININCOM_GNAME ,
OP_ININCOM_AMT ,
OP_IC_LEDGNAME ,
OP_IC_LEDAMOUNT ,
OP_PA_LEDGNAME ,
OP_PA_LEDAMOUNT ,
OP_SA_LEDGNAME ,
OP_SA_LEDAMOUNT ,
OP_IE_LEDGNAME ,
OP_IE_LEDAMOUNT ,
OP_FE_LEDGNAME ,
OP_FE_LEDAMOUNT ,
OP_INS_LEDGNAME ,
OP_INS_LEDAMOUNT ,
OP_OE_LEDGNAME ,
OP_OE_LEDAMOUNT ,
OP_SDE_LEDGNAME ,
OP_SDE_LEDAMOUNT ,
OP_SE_LEDGNAME ,
OP_SE_LEDAMOUNT ,
OP_IND_LEDGNAME ,
OP_IND_LEDAMOUNT ,
OUT_OPENINGAMT ,
OUT_CLOSINGAMT ,
OP_GROSS_PRO_CO ,
OP_GROSS_PRO_BF ,
OP_GROSS_LOS_CO ,
OP_GROSS_LOS_BF ,
OP_GR_DIREXP_TOT ,
OP_GR_DIRINC_TOT ,
OP_GR_INDIREXP_TOT ,
OP_GR_INDIRINCOM_TOT ,
OP_NETPROFIT ,
OP_NETLOSS ,
OP_MSG ,
OP_RESULT 
);
DBMS_OUTPUT.PUT_LINE(OP_COMPNAME);
DBMS_OUTPUT.PUT_LINE(OP_COMPADD);
END;
0 голосов
/ 07 января 2019

Извините, вы сказали, что два из ваших входных параметров - DATE, поэтому попробуйте вызвать вашу функцию следующим образом:

execute test_proc_profit_n_loss('01',TO_DATE('01/04/2017','DD/MM/YYYY'),
TO_DATE('31/03/2018','DD/MM/YYYY'),'01');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...