我有一個過程,即將一行插入到我的表中。調用存儲過程到另一個存儲過程
在程序中插入後,我想找到所有的線到另一個表,然後,撥打第二個表的插入過程。
所以我都工作正常
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是VARCHAR2中P_INSERT_TABLE1的參數之一。
所以,現在,我有這樣的錯誤消息:
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的聲明嗎?順便說一句:請不要在程序名稱中使用「 - 」 - 這非常令人困惑;我不認爲這是你真正的代碼,因爲除非有適當的引用,否則表格名稱和包含「 - 」的過程名稱將不被Oracle接受。 – 2013-03-19 14:10:59
是的,代碼太長了,所以我用C1等替換了名稱colum ...和表名和過程與通用名稱。 – 2013-03-19 14:15:52
你的OUT參數如何?您是否在從P_INSERT_TABLE1打電話時發送該郵件? – 2013-03-19 14:16:56