我是pl sql
的新手,我嘗試編寫一個函數,該函數應該從db讀取數據來控制它們並返回一個數字,但它會生成一個錯誤ORA-00900: invalid SQL statement
。我嘗試在pl sql中編寫函數,但它生成一個錯誤ORA-00900:無效的SQL語句,究竟是什麼原因?
FUNCTION get_cbk_values ( TC_CODE IN NUMBER,
MERCHANT_DOM IN VARCHAR2,
MERCHANT_GROUP IN VARCHAR2,
MCC IN VARCHAR2,
COUNTRY IN VARCHAR2,
RATE OUT NUMBER,
FIX OUT NUMBER)
RETURN NUMBER IS
Response NUMBER:=1;
CURSOR cur_cbk_param IS SELECT CBA_RATE, CBA_FIX
FROM cbk_prog_assign_rule WHERE
CBA_TCO = TC_CODE
AND CBA_DOM_CODE = MERCHANT_DOM
AND CBA_BMG_CODE = MERCHANT_GROUP
AND CBA_MCC_CODE = MCC
AND CBA_MER_COUN_CODE = COUNTRY;
BEGIN
LOOP
FETCH cur_cbk_param into RATE, FIX;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
Response := 0;
Return(Response);
END;
首先,您需要從「CREATE OR REPLACE FUNCTION」開始,而不僅僅是「FUNCTION」。其次,在循環訪問並獲取結果之前,您需要「打開」您的光標。第三,你需要'退出'循環'WHEN cur_cbk_param%NOTFOUND'。第四,像這樣的遊標循環不會拋出「NO_DATA_FOUND」異常。第五,除非出現異常,否則你的函數不會「返回」一個值。您必須在所有情況下返回一個值。 –
要有效診斷出發生的情況,您必須提供說明以創建表cbk_pro_assing_rule。一些示例數據將會有所幫助。 –
[Oracle錯誤:ORA-00900:無效SQL語句]的可能重複(https://stackoverflow.com/questions/35946606/oracle-error-ora-00900-invalid-sql-statement) –