Dynamic SQL

“Dynamic SQL is the SQL statement that is constructed and executed at runtime based on input parameters passed”

https://www.sqlshack.com/dynamic-sql-in-sql-server/

Example: ChatGPT

DECLARE @sql AS NVARCHAR(MAX)

SET @sql = ‘SELECT * FROM Employees WHERE Department = ”’ + @department + ””

EXEC sp_executesql @sql

Another Example: Oracle

table_name := ‘HR.Employees’;

dyn_sql := ‘Select * from ‘ || table_name || ‘ FETCH FIRST 10 ROWS ONLY ‘;

EXECUTE IMMEDIATE dyn_sql;

DECLARE
    table_name VARCHAR2(100):= '';
    dyn_sql VARCHAR2(100):= '';
BEGIN     
    table_name := 'HR.Employees';
    dyn_sql := 'Select * from ' || table_name || ' FETCH FIRST 10 ROWS ONLY ';
    EXECUTE IMMEDIATE dyn_sql;
END;

A simple dynamic SQL in a stored Procedure (Oracle)

CREATE OR REPLACE PROCEDURE Retrieve_10_ROWS
IS
    dyn_sql VARCHAR2(200);
    table_name VARCHAR2(50);
BEGIN 
 table_name := 'HR.Employees';
 dyn_sql := 'Select * from ' || table_name || ' FETCH FIRST 10 ROWS ONLY ';
 
 EXECUTE IMMEDIATE dyn_sql;
END;

EXEC Retrieve_10_ROWS;

Dynamic/Reference Cursor and Dynamic SQL

CREATE OR REPLACE PROCEDURE Retrieve_10_ROWS_dyn_cur(p_table_to_query VARCHAR2) IS
    dyn_sql VARCHAR2(200);
    JOB_ID VARCHAR2(50);
    JOB_TITLE VARCHAR2(100);    
    TYPE cur_typ IS REF CURSOR;
    c cur_typ;
BEGIN
dyn_sql := 'Select JOB_ID, JOB_TITLE from ' || p_table_to_query || ' FETCH FIRST 10 ROWS ONLY ';
 OPEN c FOR dyn_sql; 
 --USING table_name;
    LOOP
        FETCH c INTO JOB_ID, JOB_TITLE;        
        EXIT WHEN c%NOTFOUND;
        -- process row here
        DBMS_OUTPUT.PUT_LINE(JOB_ID || ' ' || JOB_TITLE);
    END LOOP;
    CLOSE c;
 EXECUTE IMMEDIATE dyn_sql;
END;