[英]Call a stored procedure, into another stored procedure
我有一個過程,將一行插入到我的表之一。
在該過程中執行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的所有“ in參數”都是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的in參數之一。
所以現在,我收到此錯誤消息:
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
的聲明無效。 您不能擁有全部名為pi_C4
5個輸入參數。 由於您在創建該過程時沒有遇到編譯錯誤,因此我想這是一個引入的錯誤,而不是代碼中實際存在的錯誤。
根據P_INSERT_TABLE2
的聲明,該過程采用7個輸入參數和1個輸出參數。 在發布的代碼中,您似乎傳入了7個輸入參數,但沒有傳入輸出參數的變量。 看來您需要
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'),
<<some local variable for the output parameter>> );
除了語法錯誤,當我看到有人接受一個非常好的DATE
並將其轉換為字符串,然后將其傳遞給過程時,我非常懷疑。 這意味着P_INSERT_TABLE2
將轉過來並將字符串轉換回日期,這意味着您正在做額外的工作並引入了轉換可能失敗的其他點,或者您打算編寫字符串的表示形式。表上的日期。 這些暗示都不是好事。
對於具有名為pMessage
的OUT
參數的任何過程,我也非常懷疑。 這往往意味着您沒有正確使用異常,並且您正在傳回錯誤消息,而不是在代碼遇到錯誤時拋出異常。 實際上,這總是導致脆性更大的代碼,比使用適當的異常時,調試起來要困難得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.