У меня есть процедура, которая вставляет строку в одну из моих таблиц.Вызвать хранимую процедуру в другую хранимую процедуру
После процедуры INSERT в этой процедуре я хочу найти все строки в другой таблице, а затем вызвать процедуру вставки второй таблицы.
Так что у меня все первую процедуру, которая работает отлично
P_INSERT_TABLE1
INSERT INTO TABLE1
...
COMMIT;
FOR record_po IN (SELECT C3, ...
FROM T_TABLE2
WHERE id = v_id)
LOOP
P_INSERT_TABLE2(record_po.C3, ...);
END LOOP;
все «в параметрах» для P_INSERT_TABLE2 являются VARCHAR2, поэтому я сделать «to_char» для каждого столбца не varchar2:
P_INSERT_TABLE2(pi_id,
record_po.C3,
record_po.C4,
record_po.C5,
record_po.C6,
record_po.C7,
to_char(record_po.C8, 'DD/MM/YYYY');
Здесь pi_id является одним из параметров P_INSERT_TABLE1 в VARCHAR2.
Так что теперь у меня есть сообщение об ошибке:
Erreur(357,1): PLS-00306: number or args types wrong in the call of P_INSERT_TABLE2
Я не понимаю, почему P_INSERT_TABLE2 не принимают параметры, в то время как есть все хорошие типы в порядке?
Если я вызываю процедуру, как «call P_INSERT_TABLE2(...)
» У меня есть ошибка, как:
Erreur(357,9): PLS-00103: Symbol "P_INSERT_TABLE2" instead one of this symbols : := . (@ % ; immediate Symbole ":="
create or replace
PROCEDURE P_INSERT_TABLE2 (
pi_id IN VARCHAR2
,pi_C3 IN VARCHAR2
,pi_C4 IN VARCHAR2
,pi_C5 IN VARCHAR2
,pi_C6 IN VARCHAR2
,pi_C7 IN VARCHAR2
,pi_C8 IN VARCHAR2
,pmessage OUT NOCOPY VARCHAR2
)
Спасибо за помощь.
Не могли бы вы добавить декларацию для P-INSERT-TABLE2, пожалуйста? BTW: Пожалуйста, не используйте «-» в именах процедур - это ужасно запутанно; Я не считаю, что это ваш настоящий код, поскольку имена таблиц и имена процедур, содержащие «-», не будут приняты Oracle, если они не будут правильно указаны. –
Да, код слишком длинный, поэтому я заменяю имя colum на C1 и т. Д. ... И имя таблицы и процедуру с родовыми именами. –
Как насчет вашего параметра OUT? Вы отправляете это, когда звоните из P_INSERT_TABLE1? –