Showing posts with label Dynamic SQL. Show all posts
Showing posts with label Dynamic SQL. Show all posts

Oracle Dynamic SQL 70 Examples

Simple Dynamic SQL Examples

1. Dynamic SQL with EXECUTE IMMEDIATE

Description: This example shows how to run dynamic SQL with EXECUTE IMMEDIATE.

    DECLARE
      v_sql VARCHAR2(100);
    BEGIN
      v_sql := 'CREATE TABLE test_table (id NUMBER)';
      EXECUTE IMMEDIATE v_sql;
    END;

2. Dynamic SQL to Insert Data

Description: This example inserts a row using dynamic SQL.

    DECLARE
      v_sql VARCHAR2(100);
    BEGIN
      v_sql := 'INSERT INTO test_table (id) VALUES (1)';
      EXECUTE IMMEDIATE v_sql;
    END;

3. Dynamic SQL to Update Data

Description: This example updates a row using dynamic SQL.

    DECLARE
      v_sql VARCHAR2(100);
    BEGIN
      v_sql := 'UPDATE test_table SET id = 2 WHERE id = 1';
      EXECUTE IMMEDIATE v_sql;
    END;

4. Dynamic SQL to Delete Data

Description: This example deletes a row using dynamic SQL.

    DECLARE
      v_sql VARCHAR2(100);
    BEGIN
      v_sql := 'DELETE FROM test_table WHERE id = 2';
      EXECUTE IMMEDIATE v_sql;
    END;

5. Dynamic SQL with Bind Variables

Description: This example uses bind variables to pass values safely.

    DECLARE
      v_sql VARCHAR2(100);
      v_id NUMBER := 3;
    BEGIN
      v_sql := 'INSERT INTO test_table (id) VALUES (:1)';
      EXECUTE IMMEDIATE v_sql USING v_id;
    END;

Dynamic SQL with SELECT Statements

6. Dynamic SQL to Select Data

Description: This example demonstrates dynamic sql to select data.

    DECLARE
      v_sql VARCHAR2(100);
      v_id NUMBER;
    BEGIN
      v_sql := 'SELECT id FROM test_table WHERE id = 3';
      EXECUTE IMMEDIATE v_sql INTO v_id;
      DBMS_OUTPUT.PUT_LINE('ID: ' || v_id);
    END;

7. Dynamic SQL to Select Data into Multiple Variables

Description: This example demonstrates dynamic sql to select data into multiple variables.

    DECLARE
      v_sql VARCHAR2(200);
      v_id NUMBER;
      v_name VARCHAR2(50);
    BEGIN
      v_sql := 'SELECT id, name FROM test_table WHERE id = 3';
      EXECUTE IMMEDIATE v_sql INTO v_id, v_name;
      DBMS_OUTPUT.PUT_LINE('ID: ' || v_id || ', Name: ' || v_name);
    END;

Dynamic SQL with DML Statements

8. Dynamic SQL for Multiple Inserts

Description: This example demonstrates dynamic sql for multiple inserts.

    DECLARE
      v_sql VARCHAR2(100);
      v_ids DBMS_SQL.NUMBER_TABLE := DBMS_SQL.NUMBER_TABLE(4, 5, 6);
    BEGIN
      FOR i IN 1..v_ids.COUNT LOOP
        v_sql := 'INSERT INTO test_table (id) VALUES (:1)';
        EXECUTE IMMEDIATE v_sql USING v_ids(i);
      END LOOP;
    END;

9. Dynamic SQL for Multiple Updates

Description: This example demonstrates dynamic sql for multiple updates.

    DECLARE
      v_sql VARCHAR2(100);
      v_ids DBMS_SQL.NUMBER_TABLE := DBMS_SQL.NUMBER_TABLE(4, 5, 6);
    BEGIN
      FOR i IN 1..v_ids.COUNT LOOP
        v_sql := 'UPDATE test_table SET id = id + 1 WHERE id = :1';
        EXECUTE IMMEDIATE v_sql USING v_ids(i);
      END LOOP;
    END;

10. Dynamic SQL for Multiple Deletes

Description: This example demonstrates dynamic sql for multiple deletes.

    DECLARE
      v_sql VARCHAR2(100);
      v_ids DBMS_SQL.NUMBER_TABLE := DBMS_SQL.NUMBER_TABLE(4,5,6);
    BEGIN
      FOR i IN 1..v_ids.COUNT LOOP
        v_sql := 'DELETE FROM test_table WHERE id = :1';
        EXECUTE IMMEDIATE v_sql USING v_ids(i);
      END LOOP;
    END;

Dynamic SQL with Conditional Logic

11. Conditional Dynamic SQL Execution

Description: This example demonstrates conditional dynamic sql execution.

    DECLARE
      v_sql VARCHAR2(100);
      v_action VARCHAR2(10) := 'INSERT';
    BEGIN
      IF v_action = 'INSERT' THEN
        v_sql := 'INSERT INTO test_table (id) VALUES (7)';
      ELSIF v_action = 'UPDATE' THEN
        v_sql := 'UPDATE test_table SET id = 8 WHERE id = 7';
      ELSE
        v_sql := 'DELETE FROM test_table WHERE id = 8';
      END IF;
      EXECUTE IMMEDIATE v_sql;
    END;

12. Dynamic SQL Based on User Input

Description: This example demonstrates dynamic sql based on user input.

    DECLARE
      v_sql VARCHAR2(100);
      v_table_name VARCHAR2(30) := 'test_table';
      v_column_name VARCHAR2(30) := 'id';
    BEGIN
      v_sql := 'SELECT ' || v_column_name || ' FROM ' || v_table_name || ' WHERE ' || v_column_name || ' = 7';
      EXECUTE IMMEDIATE v_sql INTO v_column_name;
      DBMS_OUTPUT.PUT_LINE('Value: ' || v_column_name);
    END;

Dynamic SQL with Error Handling

13. Dynamic SQL with Exception Handling

Description: This example demonstrates dynamic sql with exception handling.

    DECLARE
      v_sql VARCHAR2(100);
    BEGIN
      v_sql := 'INSERT INTO test_table (id) VALUES (9)';
      BEGIN
        EXECUTE IMMEDIATE v_sql;
      EXCEPTION
        WHEN OTHERS THEN
          DBMS_OUTPUT.PUT_LINE('Error occurred: ' || SQLERRM);
      END;
    END;

14. Dynamic SQL with Commit and Rollback

Description: This example demonstrates dynamic sql with commit and rollback.

    DECLARE
      v_sql VARCHAR2(100);
    BEGIN
      v_sql := 'INSERT INTO test_table (id) VALUES (10)';
      EXECUTE IMMEDIATE v_sql;
      COMMIT;
    EXCEPTION
      WHEN OTHERS THEN
        ROLLBACK;
        DBMS_OUTPUT.PUT_LINE('Error occurred: ' || SQLERRM);
    END;

Dynamic SQL with Cursors

15. Dynamic SQL with Explicit Cursor

Description: This example demonstrates dynamic sql with explicit cursor.

    DECLARE
      CURSOR c IS
        SELECT table_name FROM user_tables WHERE table_name LIKE 'TEST_%';
      v_sql VARCHAR2(200);
      v_count NUMBER;
    BEGIN
      FOR r IN c LOOP
        v_sql := 'SELECT COUNT(*) FROM ' || r.table_name;
        EXECUTE IMMEDIATE v_sql INTO v_count;
        DBMS_OUTPUT.PUT_LINE('Table: ' || r.table_name || ', Count: ' || v_count);
      END LOOP;
    END;

16. Dynamic SQL with Cursor FOR Loop

Description: This example demonstrates dynamic sql with cursor for loop.

    DECLARE
      CURSOR c IS
        SELECT table_name FROM user_tables WHERE table_name LIKE 'TEST_%';
      v_sql VARCHAR2(200);
      v_count NUMBER;
    BEGIN
      OPEN c;
      LOOP
        FETCH c INTO v_sql;
        EXIT WHEN c%NOTFOUND;
        EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || v_sql INTO v_count;
        DBMS_OUTPUT.PUT_LINE('Table: ' || v_sql || ', Count: ' || v_count);
      END LOOP;
      CLOSE c;
    END;

Dynamic SQL with DBMS_SQL Package

17. Dynamic SQL Using DBMS_SQL to Create Table

Description: This example demonstrates dynamic sql using dbms_sql to create table.

    DECLARE
      v_cursor INTEGER;
      v_dummy NUMBER;
    BEGIN
      v_cursor := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(v_cursor, 'CREATE TABLE test_table2 (id NUMBER)', DBMS_SQL.NATIVE);
      DBMS_SQL.EXECUTE(v_cursor);
      DBMS_SQL.CLOSE_CURSOR(v_cursor);
    EXCEPTION
      WHEN OTHERS THEN
        IF DBMS_SQL.IS_OPEN(v_cursor) THEN
          DBMS_SQL.CLOSE_CURSOR(v_cursor);
        END IF;
        RAISE;
    END;

18. Dynamic SQL Using DBMS_SQL to Select Data

Description: This example demonstrates dynamic sql using dbms_sql to select data.

    DECLARE
      v_cursor INTEGER;
      v_dummy NUMBER;
    BEGIN
      v_cursor := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(v_cursor, 'SELECT id FROM test_table2', DBMS_SQL.NATIVE);
      DBMS_SQL.DEFINE_COLUMN(v_cursor, 1, v_dummy);
      DBMS_SQL.EXECUTE(v_cursor);
      LOOP
        IF DBMS_SQL.FETCH_ROWS(v_cursor) = 0 THEN
          EXIT;
        END IF;
        DBMS_SQL.COLUMN_VALUE(v_cursor, 1, v_dummy);
        DBMS_OUTPUT.PUT_LINE('ID: ' || v_dummy);
      END LOOP;
      DBMS_SQL.CLOSE_CURSOR(v_cursor);
    EXCEPTION
      WHEN OTHERS THEN
        IF DBMS_SQL.IS_OPEN(v_cursor) THEN
          DBMS_SQL.CLOSE_CURSOR(v_cursor);
        END IF;
        RAISE;
    END;

Dynamic SQL with Bind Variables and Multiple Tables

19. Dynamic SQL with Bind Variables for Multiple Tables

Description: This example demonstrates dynamic sql with bind variables for multiple tables.

    DECLARE
      v_sql VARCHAR2(200);
      v_table_name VARCHAR2(30) := 'test_table2';
      v_column_name VARCHAR2(30) := 'id';
      v_value NUMBER := 11;
    BEGIN
      v_sql := 'INSERT INTO ' || v_table_name || ' (' || v_column_name || ') VALUES (:1)';
      EXECUTE IMMEDIATE v_sql USING v_value;
    END;

20. Dynamic SQL to Create Multiple Tables

Description: This example demonstrates dynamic sql to create multiple tables.

    DECLARE
      v_sql VARCHAR2(200);
      v_table_name VARCHAR2(30);
      v_column_name VARCHAR2(30) := 'id';
    BEGIN
      FOR i IN 1..3 LOOP
        v_table_name := 'dynamic_table_' || i;
        v_sql := 'CREATE TABLE ' || v_table_name || ' (' || v_column_name || ' NUMBER)';
        EXECUTE IMMEDIATE v_sql;
      END LOOP;
    END;

Advanced Dynamic SQL Examples

21. Dynamic SQL with Procedures

Description: This example demonstrates dynamic sql with procedures.

    CREATE OR REPLACE PROCEDURE dynamic_insert (p_table_name VARCHAR2, p_column_name VARCHAR2, p_value NUMBER) IS
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'INSERT INTO ' || p_table_name || ' (' || p_column_name || ') VALUES (:1)';
      EXECUTE IMMEDIATE v_sql USING p_value;
    END;

22. Dynamic SQL with Functions

Description: This example demonstrates dynamic sql with functions.

    CREATE OR REPLACE FUNCTION dynamic_select (p_table_name VARCHAR2, p_column_name VARCHAR2) RETURN NUMBER IS
      v_sql VARCHAR2(200);
      v_value NUMBER;
    BEGIN
      v_sql := 'SELECT ' || p_column_name || ' FROM ' || p_table_name || ' WHERE ROWNUM = 1';
      EXECUTE IMMEDIATE v_sql INTO v_value;
      RETURN v_value;
    END;

23. Dynamic SQL with Autonomous Transaction for Logging

Description: This example demonstrates dynamic sql with autonomous transaction for logging.

    CREATE OR REPLACE PROCEDURE log_error (p_error_message VARCHAR2) IS
      PRAGMA AUTONOMOUS_TRANSACTION;
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'INSERT INTO error_log (message, log_date) VALUES (:1, SYSDATE)';
      EXECUTE IMMEDIATE v_sql USING p_error_message;
      COMMIT;
    END;

24. Dynamic SQL with Multiple Bind Variables

Description: This example demonstrates dynamic sql with multiple bind variables.

    DECLARE
      v_sql VARCHAR2(200);
      v_value1 NUMBER := 12;
      v_value2 NUMBER := 13;
    BEGIN
      v_sql := 'INSERT INTO test_table (id, another_column) VALUES (:1, :2)';
      EXECUTE IMMEDIATE v_sql USING v_value1, v_value2;
    END;

25. Dynamic SQL with Dynamic Column Names

Description: This example demonstrates dynamic sql with dynamic column names.

    DECLARE
      v_sql VARCHAR2(200);
      v_column_name VARCHAR2(30) := 'id';
      v_value NUMBER := 14;
    BEGIN
      v_sql := 'INSERT INTO test_table (' || v_column_name || ') VALUES (:1)';
      EXECUTE IMMEDIATE v_sql USING v_value;
    END;

Dynamic SQL with Bulk Operations

26. Dynamic SQL for Bulk Inserts

Description: This example demonstrates dynamic sql for bulk inserts.

    DECLARE
      TYPE t_numbers IS TABLE OF NUMBER;
      v_numbers t_numbers := t_numbers(15, 16, 17);
      v_sql VARCHAR2(200);
    BEGIN
      FORALL i IN v_numbers.FIRST..v_numbers.LAST
        v_sql := 'INSERT INTO test_table (id) VALUES (:1)';
        EXECUTE IMMEDIATE v_sql USING v_numbers(i);
    END;

27. Dynamic SQL for Bulk Updates

Description: This example demonstrates dynamic sql for bulk updates.

    DECLARE
      TYPE t_numbers IS TABLE OF NUMBER;
      v_numbers t_numbers := t_numbers(15, 16, 17);
      v_sql VARCHAR2(200);
    BEGIN
      FORALL i IN v_numbers.FIRST..v_numbers.LAST
        v_sql := 'UPDATE test_table SET id = id + 1 WHERE id = :1';
        EXECUTE IMMEDIATE v_sql USING v_numbers(i);
    END;

28. Dynamic SQL for Bulk Deletes

Description: This example demonstrates dynamic sql for bulk deletes.

    DECLARE
      TYPE t_numbers IS TABLE OF NUMBER;
      v_numbers t_numbers := t_numbers(15, 16, 17);
      v_sql VARCHAR2(200);
    BEGIN
      FORALL i IN v_numbers.FIRST..v_numbers.LAST
        v_sql := 'DELETE FROM test_table WHERE id = :1';
        EXECUTE IMMEDIATE v_sql USING v_numbers(i);
    END;

Dynamic SQL with Collections

29. Dynamic SQL with Nested Table Type

Description: This example demonstrates dynamic sql with nested table type.

    CREATE OR REPLACE TYPE t_numbers AS TABLE OF NUMBER;

    DECLARE
      v_numbers t_numbers := t_numbers(18, 19, 20);
      v_sql VARCHAR2(200);
    BEGIN
      FOR i IN 1..v_numbers.COUNT LOOP
        v_sql := 'INSERT INTO test_table (id) VALUES (:1)';
        EXECUTE IMMEDIATE v_sql USING v_numbers(i);
      END LOOP;
    END;

30. Dynamic SQL with VARRAY Type

Description: This example demonstrates dynamic sql with varray type.

    CREATE OR REPLACE TYPE t_varray AS VARRAY(10) OF NUMBER;

    DECLARE
      v_numbers t_varray := t_varray(21, 22, 23);
      v_sql VARCHAR2(200);
    BEGIN
      FOR i IN 1..v_numbers.COUNT LOOP
        v_sql := 'INSERT INTO test_table (id) VALUES (:1)';
        EXECUTE IMMEDIATE v_sql USING v_numbers(i);
      END LOOP;
    END;

Dynamic SQL with Ref Cursors

31. Dynamic SQL with Ref Cursor for Select

Description: This example demonstrates dynamic sql with ref cursor for select.

    DECLARE
      TYPE ref_cursor IS REF CURSOR;
      v_cursor ref_cursor;
      v_sql VARCHAR2(200);
      v_id NUMBER;
    BEGIN
      v_sql := 'SELECT id FROM test_table WHERE id = 24';
      OPEN v_cursor FOR v_sql;
      FETCH v_cursor INTO v_id;
      DBMS_OUTPUT.PUT_LINE('ID: ' || v_id);
      CLOSE v_cursor;
    END;

32. Dynamic SQL with Ref Cursor for Multiple Rows

Description: This example demonstrates dynamic sql with ref cursor for multiple rows.

    DECLARE
      TYPE ref_cursor IS REF CURSOR;
      v_cursor ref_cursor;
      v_sql VARCHAR2(200);
      v_id NUMBER;
    BEGIN
      v_sql := 'SELECT id FROM test_table WHERE id > 20';
      OPEN v_cursor FOR v_sql;
      LOOP
        FETCH v_cursor INTO v_id;
        EXIT WHEN v_cursor%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE('ID: ' || v_id);
      END LOOP;
      CLOSE v_cursor;
    END;

Dynamic SQL with Dynamic PL/SQL Blocks

33. Dynamic SQL for Executing PL/SQL Blocks

Description: This example demonstrates dynamic sql for executing pl/sql blocks.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'BEGIN INSERT INTO test_table (id) VALUES (25); END;';
      EXECUTE IMMEDIATE v_sql;
    END;

34. Dynamic SQL with Exception Handling in PL/SQL Block

Description: This example demonstrates dynamic sql with exception handling in pl/sql block.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'BEGIN INSERT INTO test_table (id) VALUES (26); EXCEPTION WHEN OTHERS THEN NULL; END;';
      EXECUTE IMMEDIATE v_sql;
    END;

Dynamic SQL for Data Definition Language (DDL)

35. Dynamic SQL for Creating Table

Description: This example demonstrates dynamic sql for creating table.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'CREATE TABLE dynamic_table (id NUMBER)';
      EXECUTE IMMEDIATE v_sql;
    END;

36. Dynamic SQL for Dropping Table

Description: This example demonstrates dynamic sql for dropping table.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'DROP TABLE dynamic_table';
      EXECUTE IMMEDIATE v_sql;
    END;

Dynamic SQL with User-Defined Types

37. Dynamic SQL with User-Defined Record Type

Description: This example demonstrates dynamic sql with user-defined record type.

    DECLARE
      TYPE t_record IS RECORD (id NUMBER);
      v_record t_record;
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'SELECT id FROM test_table WHERE id = 27';
      EXECUTE IMMEDIATE v_sql INTO v_record.id;
      DBMS_OUTPUT.PUT_LINE('ID: ' || v_record.id);
    END;

38. Dynamic SQL with User-Defined Table Type

Description: This example demonstrates dynamic sql with user-defined table type.

    CREATE OR REPLACE TYPE t_number_table AS TABLE OF NUMBER;

    DECLARE
      v_numbers t_number_table := t_number_table();
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'SELECT id BULK COLLECT INTO :1 FROM test_table WHERE id > 20';
      EXECUTE IMMEDIATE v_sql BULK COLLECT INTO v_numbers;
      FOR i IN 1..v_numbers.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE('ID: ' || v_numbers(i));
      END LOOP;
    END;

Dynamic SQL with Large Objects (LOBs)

39. Dynamic SQL for Inserting CLOB

Description: This example demonstrates dynamic sql for inserting clob.

    DECLARE
      v_sql VARCHAR2(200);
      v_clob CLOB := 'This is a CLOB';
    BEGIN
      v_sql := 'INSERT INTO test_table (clob_column) VALUES (:1)';
      EXECUTE IMMEDIATE v_sql USING v_clob;
    END;

40. Dynamic SQL for Selecting CLOB

Description: This example demonstrates dynamic sql for selecting clob.

    DECLARE
      v_sql VARCHAR2(200);
      v_clob CLOB;
    BEGIN
      v_sql := 'SELECT clob_column FROM test_table WHERE id = 28';
      EXECUTE IMMEDIATE v_sql INTO v_clob;
      DBMS_OUTPUT.PUT


_LINE('CLOB: ' || DBMS_LOB.SUBSTR(v_clob, 100));
    END;

Dynamic SQL for Partitioned Tables

41. Dynamic SQL for Creating Partitioned Table

Description: This example demonstrates dynamic sql for creating partitioned table.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'CREATE TABLE partitioned_table (id NUMBER, name VARCHAR2(50)) PARTITION BY RANGE (id) (PARTITION p1 VALUES LESS THAN (100), PARTITION p2 VALUES LESS THAN (200))';
      EXECUTE IMMEDIATE v_sql;
    END;

42. Dynamic SQL for Inserting into Partitioned Table

Description: This example demonstrates dynamic sql for inserting into partitioned table.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'INSERT INTO partitioned_table (id, name) VALUES (150, ''Test'')';
      EXECUTE IMMEDIATE v_sql;
    END;

Dynamic SQL with XML

43. Dynamic SQL for Inserting XML

Description: This example demonstrates dynamic sql for inserting xml.

    DECLARE
      v_sql VARCHAR2(200);
      v_xml XMLTYPE := XMLTYPE('<root><element>Value</element></root>');
    BEGIN
      v_sql := 'INSERT INTO test_table (xml_column) VALUES (:1)';
      EXECUTE IMMEDIATE v_sql USING v_xml;
    END;

44. Dynamic SQL for Selecting XML

Description: This example demonstrates dynamic sql for selecting xml.

    DECLARE
      v_sql VARCHAR2(200);
      v_xml XMLTYPE;
    BEGIN
      v_sql := 'SELECT xml_column FROM test_table WHERE id = 29';
      EXECUTE IMMEDIATE v_sql INTO v_xml;
      DBMS_OUTPUT.PUT_LINE('XML: ' || v_xml.getCLOBVal());
    END;

Dynamic SQL with PL/SQL Collections

45. Dynamic SQL with Nested Tables and Bulk Collect

Description: This example demonstrates dynamic sql with nested tables and bulk collect.

    DECLARE
      TYPE t_numbers IS TABLE OF NUMBER;
      v_numbers t_numbers;
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'SELECT id BULK COLLECT INTO :1 FROM test_table WHERE id > 20';
      EXECUTE IMMEDIATE v_sql BULK COLLECT INTO v_numbers;
      FOR i IN 1..v_numbers.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE('ID: ' || v_numbers(i));
      END LOOP;
    END;

46. Dynamic SQL with VARRAYs

Description: This example demonstrates dynamic sql with varrays.

    CREATE OR REPLACE TYPE t_varray IS VARRAY(10) OF NUMBER;

    DECLARE
      v_varray t_varray := t_varray(30, 31, 32);
      v_sql VARCHAR2(200);
    BEGIN
      FOR i IN 1..v_varray.COUNT LOOP
        v_sql := 'INSERT INTO test_table (id) VALUES (:1)';
        EXECUTE IMMEDIATE v_sql USING v_varray(i);
      END LOOP;
    END;

Dynamic SQL with Oracle Data Pump

47. Dynamic SQL to Export Data with Data Pump

Description: This example demonstrates dynamic sql to export data with data pump.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'BEGIN DBMS_DATAPUMP.OPEN(operation => ''EXPORT'', job_mode => ''SCHEMA'', job_name => ''export_job''); END;';
      EXECUTE IMMEDIATE v_sql;
    END;

48. Dynamic SQL to Import Data with Data Pump

Description: This example demonstrates dynamic sql to import data with data pump.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'BEGIN DBMS_DATAPUMP.OPEN(operation => ''IMPORT'', job_mode => ''SCHEMA'', job_name => ''import_job''); END;';
      EXECUTE IMMEDIATE v_sql;
    END;

Dynamic SQL with Data Guard

49. Dynamic SQL to Switch Data Guard Role

Description: This example demonstrates dynamic sql to switch data guard role.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL';
      EXECUTE IMMEDIATE v_sql;
    END;

50. Dynamic SQL to Start Data Guard Apply

Description: This example demonstrates dynamic sql to start data guard apply.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION';
      EXECUTE IMMEDIATE v_sql;
    END;

Dynamic SQL with DBMS_JOB

51. Dynamic SQL to Submit a Job

Description: This example demonstrates dynamic sql to submit a job.

    DECLARE
      v_sql VARCHAR2(200);
      v_job NUMBER;
    BEGIN
      v_sql := 'BEGIN DBMS_JOB.SUBMIT(:1, ''my_procedure;'', SYSDATE, ''SYSDATE + 1/1440''); END;';
      EXECUTE IMMEDIATE v_sql USING v_job;
    END;

52. Dynamic SQL to Remove a Job

Description: This example demonstrates dynamic sql to remove a job.

    DECLARE
      v_sql VARCHAR2(200);
      v_job NUMBER := 123; -- Example job number
    BEGIN
      v_sql := 'BEGIN DBMS_JOB.REMOVE(:1); END;';
      EXECUTE IMMEDIATE v_sql USING v_job;
    END;

Dynamic SQL with Parallel Execution

53. Dynamic SQL for Parallel Insert

Description: This example demonstrates dynamic sql for parallel insert.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'INSERT /*+ PARALLEL(test_table, 4) */ INTO test_table (id) SELECT id FROM another_table';
      EXECUTE IMMEDIATE v_sql;
    END;

54. Dynamic SQL for Parallel Update

Description: This example demonstrates dynamic sql for parallel update.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'UPDATE /*+ PARALLEL(test_table, 4) */ test_table SET id = id + 1';
      EXECUTE IMMEDIATE v_sql;
    END;

Dynamic SQL with Advanced Queueing (AQ)

55. Dynamic SQL to Enqueue Message

Description: This example demonstrates dynamic sql to enqueue message.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'BEGIN DBMS_AQ.ENQUEUE(queue_name => ''my_queue'', enqueue_options => DBMS_AQ.ENQUEUE_OPTIONS_T(), message_properties => DBMS_AQ.MESSAGE_PROPERTIES_T(), payload => ''Test message'', msgid => NULL); END;';
      EXECUTE IMMEDIATE v_sql;
    END;

56. Dynamic SQL to Dequeue Message

Description: This example demonstrates dynamic sql to dequeue message.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'BEGIN DBMS_AQ.DEQUEUE(queue_name => ''my_queue'', dequeue_options => DBMS_AQ.DEQUEUE_OPTIONS_T(), message_properties => DBMS_AQ.MESSAGE_PROPERTIES_T(), payload => ''Test message'', msgid => NULL); END;';
      EXECUTE IMMEDIATE v_sql;
    END;

Dynamic SQL with Oracle Text

57. Dynamic SQL to Create Text Index

Description: This example demonstrates dynamic sql to create text index.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'CREATE INDEX text_index ON test_table (clob_column) INDEXTYPE IS CTXSYS.CONTEXT';
      EXECUTE IMMEDIATE v_sql;
    END;

58. Dynamic SQL to Execute Text Query

Description: This example demonstrates dynamic sql to execute text query.

    DECLARE
      v_sql VARCHAR2(200);
      v_count NUMBER;
    BEGIN
      v_sql := 'SELECT COUNT(*) FROM test_table WHERE CONTAINS(clob_column, ''Oracle'') > 0';
      EXECUTE IMMEDIATE v_sql INTO v_count;
      DBMS_OUTPUT.PUT_LINE('Count: ' || v_count);
    END;

Dynamic SQL with Spatial Data

59. Dynamic SQL to Create Spatial Index

Description: This example demonstrates dynamic sql to create spatial index.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'CREATE INDEX spatial_index ON test_table (geometry) INDEXTYPE IS MDSYS.SPATIAL_INDEX';
      EXECUTE IMMEDIATE v_sql;
    END;

60. Dynamic SQL to Execute Spatial Query

Description: This example demonstrates dynamic sql to execute spatial query.

    DECLARE
      v_sql VARCHAR2(200);
      v_count NUMBER;
    BEGIN
      v_sql := 'SELECT COUNT(*) FROM test_table WHERE SDO_RELATE(geometry, SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(1, 1, NULL), NULL, NULL), ''mask=ANYINTERACT'') = ''TRUE''';
      EXECUTE IMMEDIATE v_sql INTO v_count;
      DBMS_OUTPUT.PUT_LINE('Count: ' || v_count);
    END;

Dynamic SQL with Flashback

61. Dynamic SQL to Enable Flashback

Description: This example demonstrates dynamic sql to enable flashback.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'ALTER DATABASE FLASHBACK ON';
      EXECUTE IMMEDIATE v_sql;
    END;

62. Dynamic SQL to Disable Flashback

Description: This example demonstrates dynamic sql to disable flashback.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'ALTER DATABASE FLASHBACK OFF';
      EXECUTE IMMEDIATE v_sql;
    END;

Dynamic SQL with Contexts

63. Dynamic SQL to Create Context

Description: This example demonstrates dynamic sql to create context.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'CREATE CONTEXT my_context USING my_package';
      EXECUTE IMMEDIATE v_sql;
    END;

64. Dynamic SQL to Set Context Value

Description: This example demonstrates dynamic sql to set context value.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'BEGIN DBMS_SESSION.SET_CONTEXT(''my_context'', ''attribute'', ''value''); END;';
      EXECUTE IMMEDIATE v_sql;
    END;

Dynamic SQL with Auditing

65. Dynamic SQL to Enable Auditing

Description: This example demonstrates dynamic sql to enable auditing.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'AUDIT INSERT ON test_table BY SESSION';
      EXECUTE IMMEDIATE v_sql;
    END;

66. Dynamic SQL to Disable Auditing

Description: This example demonstrates dynamic sql to disable auditing.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'NOAUDIT INSERT ON test_table';
      EXECUTE IMMEDIATE v_sql;
    END;

Dynamic SQL with Oracle Streams

67. Dynamic SQL to Create Streams Capture Process

Description: This example demonstrates dynamic sql to create streams capture process.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'BEGIN DBMS_STREAMS_ADM.ADD_TABLE_RULES(table_name => ''test_table'', streams_type => ''capture'', streams_name => ''my_capture'', include_dml => true, include_ddl => true); END;';
      EXECUTE IMMEDIATE v_sql;
    END;

68. Dynamic SQL to Drop Streams Capture Process

Description: This example demonstrates dynamic sql to drop streams capture process.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'BEGIN DBMS_STREAMS_ADM.REMOVE_TABLE_RULES(table_name => ''test_table'', streams_type => ''capture'', streams_name => ''my_capture''); END;';
      EXECUTE IMMEDIATE v_sql;
    END;

Dynamic SQL with Result Cache

69. Dynamic SQL to Enable Result Cache

Description: This example demonstrates dynamic sql to enable result cache.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'ALTER SYSTEM SET result_cache_max_size = 1048576';
      EXECUTE IMMEDIATE v_sql;
    END;

70. Dynamic SQL to Disable Result Cache

Description: This example demonstrates dynamic sql to disable result cache.

    DECLARE
      v_sql VARCHAR2(200);
    BEGIN
      v_sql := 'ALTER SYSTEM SET result_cache_max_size = 0';
      EXECUTE IMMEDIATE v_sql;
    END;