== Why is this an issue? ``++EXECUTE IMMEDIATE++`` is easier to use and understand than the DBMS_SQL package's procedures. It should therefore be preferred, when possible. === Noncompliant code example [source,sql] ---- SET SERVEROUTPUT ON CREATE TABLE myTable( foo VARCHAR2(42) ); CREATE PROCEDURE drop_table(tableName VARCHAR2) AS cursorIdentifier INTEGER; BEGIN cursorIdentifier := DBMS_SQL.OPEN_CURSOR; -- Compliant; this is not a procedure call DBMS_SQL.PARSE(cursorIdentifier, 'DROP TABLE ' || tableName, DBMS_SQL.NATIVE); -- Noncompliant DBMS_SQL.CLOSE_CURSOR(cursorIdentifier); -- Noncompliant DBMS_OUTPUT.PUT_LINE('Table ' || tableName || ' dropped.'); EXCEPTION WHEN OTHERS THEN DBMS_SQL.CLOSE_CURSOR(cursorIdentifier); -- Noncompliant END; / BEGIN drop_table('myTable'); END; / DROP PROCEDURE drop_table; ---- === Compliant solution [source,sql] ---- SET SERVEROUTPUT ON CREATE TABLE myTable( foo VARCHAR2(42) ); CREATE PROCEDURE drop_table(tableName VARCHAR2) AS cursorIdentifier INTEGER; BEGIN EXECUTE IMMEDIATE 'DROP TABLE ' || tableName; DBMS_OUTPUT.PUT_LINE('Table ' || tableName || ' dropped.'); END; / BEGIN drop_table('myTable'); END; / DROP PROCEDURE drop_table; ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Use "EXECUTE IMMEDIATELY" instead of calling "xxx". endif::env-github,rspecator-view[]