最近SP寫到一個情境,是客戶把要執行的SQL寫在某個table的某個欄位裡
而我將要執行的SQL撈出來後,用迴圈去執行SQL
語法基本上為:
CREATE ......
EXEC_SQL VARCHAR(500);
CURSOR CUR IS
SELECT ......;
BEGIN
......
FOR CUR_ITEM IN CUR
LOOP
......
EXEC_SQL := CUR_ITEM.SQL_PARA;
EXECUTE IMMEDIATE EXEC_SQL ;
......
END LOOP;
END;
一個很簡單的SP,但卻Debug了很久
原因在於table裡面的SQL語法的寫法
經過測試後,有以下兩點要注意:
1.SQL語法最後面不用再加;
因為EXECUTE IMMEDIATE EXEC_SQL ;這一段最後面已經有;了
所以再加會變成兩個
2.若是執行類的SQL語法,不需要加EXEC
因為前面已經有EXECUTE IMMEDIATE了,再加會變成EXECUTE IMMEDIATE EXEC ......
EXEC出現兩次,所以報錯
基於這兩點去對SQL作調整後,SP就能順利執行了
若有人踩到一樣的雷,希望這篇文章能幫到忙