You can do (a), (c), (d), and (f) with DBMS_SQL. You can’t do any of the following:
This functionality is similar to “indirect referencing” in Oracle Forms, where you use COPY and NAME_IN to write and read, respectively, the value of a GLOBAL variable or block’s item by referencing its name. One possible solution follows: it constructs, in a straightforward manner and completely with concatenation, the assignment statement. It then executes the statement:
/* Filename on web page: assign.sp */ CREATE OR REPLACE PROCEDURE assign ( val_in IN VARCHAR2, varname_in IN VARCHAR2) IS cur PLS_INTEGER := DBMS_SQL.OPEN_CURSOR; fdbk PLS_INTEGER; assign_string VARCHAR2(2000) := 'BEGIN ' || varname_in || ' := ''' || val_in || '''; END;'; BEGIN DBMS_OUTPUT.PUT_LINE (assign_string); DBMS_SQL.PARSE ...