執行table裡的SQL語法

最近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就能順利執行了

若有人踩到一樣的雷,希望這篇文章能幫到忙