WAARSCHUWING :Dynamische SQL zoals deze is gevoelig voor SQL Injection-aanvallen. Herschrijf waar mogelijk uw dynamische SQL om in plaats daarvan bindvariabelen te gebruiken.
In plaats van uw dynamische SQL als volgt te construeren:
L_SQL := 'UPDATE '||l_prefix||'CRS_CUSTOMERS SET CUSTOMER_SOURCE_REF_ID = '||i.CUSTOMER_REF_ID||' WHERE CUSTOMER_ID = '||i.CUSTOMER_ID;
EXECUTE IMMEDIATE L_SQL;
Gebruik dit:
L_SQL := 'UPDATE '||l_prefix||'CRS_CUSTOMERS SET CUSTOMER_SOURCE_REF_ID = :REF_ID WHERE CUSTOMER_ID = :CUST_ID';
EXECUTE IMMEDIATE L_SQL USING i.CUSTOMER_REF_ID, i.CUSTOMER_ID;
Dit is nog steeds onderhevig aan SQL-injectie op de l_prefix , maar als u die waarde programmatisch beheert, kan het in orde zijn. Door de constructie van de SQL en de uitvoering van de SQL in twee stappen te splitsen, kunt u de EXECUTE IMMEDIATE gemakkelijker vervangen met DBMS_OUTPUT.PUT_LINE(SQL); om uw zoekopdracht op syntaxisfouten te controleren. U kunt ook DBMS_OUTPUT.PUT_LINE uw parameters i.CUSTOMER_REF_ID en i.CUSTOMER_ID om hun waarden te controleren.