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;

No comments:

Post a Comment