Note:
DBMS_SQL is the traditional form of dynamic SQL in Oracle.
For most purposes native dynamic sql (NDS) will suffice but there are some things the DBMS_SQL package does that
can not be done any other way. This page emphasizes those areas where there is no substitute.
TYPE desc_tab IS TABLE OF desc_rec
INDEX BY binary_integer;
TYPE desc_tab2 IS TABLE OF desc_rec2
INDEX BY binary_integer;
TYPE varchar2a IS TABLE OF VARCHAR2(32767)
INDEX BY binary_integer;
TYPE varchar2s IS TABLE OF VARCHAR2(256)
INDEX BY binary_integer;
Bulk SQL Types TYPE bfile_table IS TABLE OF bfile
INDEX BY binary_integer;
TYPE binary_double_table IS TABLE OF binary_double
INDEX BY binary_integer;
TYPE binary_float_table IS TABLE OF binary_float
INDEX BY binary_integer; TYPE blob_table IS TABLE OF blob
INDEX BY binary_integer;
TYPE clob_table IS TABLE OF clob
INDEX BY binary_integer;
TYPE date_table IS TABLE OF date
INDEX BY binary_integer;
TYPE interval_day_to_second_table IS TABLE OF
dsinterval_unconstrained INDEX BY binary_integer;
TYPE interval_year_to_MONTH_Table IS TABLE OF
yminterval_unconstrained
INDEX BY binary_integer;
TYPE number_table IS TABLE OF NUMBER
INDEX BY binary_integer;
TYPE time_table IS TABLE OF time_unconstrained
INDEX BY binary_integer;
TYPE time_with_time_zone_Table IS TABLE OF TIME_TZ_UNCONSTRAINED INDEX BY binary_integer;
TYPE timestamp_table IS TABLE OF timestamp_unconstrained
INDEX BY binary_integer;
TYPE timestamp_with_ltz_table IS TABLE OF
TIMESTAMP_LTZ_UNCONSTRAINED
INDEX BY binary_integer;
TYPE urowid_table IS TABLE OF urowid
INDEX BY binary_integer;
TYPE timestamp_with_time_zone_table IS TABLE OF
TIMESTAMP_TZ_UNCONSTRAINED
INDEX BY binary_integer;
TYPE varchar2_table IS TABLE OF VARCHAR2(2000)
INDEX BY binary_integer;
Dependencies
SELECT name
FROM dba_dependencies
WHERE referenced_name = 'DBMS_SQL'
UNION
SELECT referenced_name
FROM dba_dependencies
WHERE name = 'DBMS_SQL';
Exceptions
Error Code
Reason
ORA-06562
Inconsistent types: Raised by procedure "column_value" or "variable_value" if
the type of out argument where to put the requested value is different from the type of the value
EXCEPTION
WHEN OTHERS THEN
IF dbms_sql.is_open(c) THEN
dbms_sql.close_cursor(c);
END IF;
RAISE;
END;
/
Overload 2
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
c_tab IN VARCHAR2_TABLE);
TBD
Overload 3
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
d_tab IN DATE_TABLE);
TBD
Overload 4
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
bl_tab IN BLOB_TABLE);
TBD
Overload 5
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
cl_tab IN CLOB_TABLE);
TBD
Overload 6
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
bf_tab IN BFILE_TABLE);
TBD
Overload 7
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
n_tab IN NUMBER_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 8
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
c_tab IN VARCHAR2_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 9
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
d_tab IN DATE_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 10
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
bl_tab IN BLOB_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 11
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
cl_tab IN CLOB_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 12
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
bf_tab IN BFILE_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 13
dbms_sql.bind_array(
c IN INTEGER,
name IN VARCHAR2,
ur_tab IN UROWID_TABLE);
TBD
Overload 14
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
ur_tab IN UROWID_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 15
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
tm_tab IN TIME_TABLE);
TBD
Overload 16
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
tm_tab IN TIME_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 17
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
tms_tab IN TIMESTAMP_TABLE);
TBD
Overload 18
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
tms_tab IN TIMESTAMP_TABLE
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 19
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
ttz_tab IN TIME_WITH_TIME_ZONE_TABLE);
TBD
Overload 20
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
ttz_tab IN TIME_WITH_TIME_ZONE_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 21
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
tstz_tab IN TIMESTAMP_WITH_TIME_ZONE_TABLE);
TBD
Overload 22
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
tstz_tab IN TIMESTAMP_WITH_TIME_ZONE_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 23
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
tstz_tab IN TIMESTAMP_WITH_LTZ_TABLE);
TBD
Overload 24
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
tstz_tab IN TIMESTAMP_WITH_LTZ_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 25
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
iym_tab IN INTERVAL_YEAR_TO_MONTH_TABLE);
TBD
Overload 26
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
iym_tab IN INTERVAL_YEAR_TO_MONTH_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 27
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
ids_tab IN INTERVAL_DAY_TO_SECOND_TABLE);
TBD
Overload 28
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
ids_tab IN INTERVAL_DAY_TO_SECOND_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 29
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
bflt_tab IN BINARY_FLOAT_TABLE);
TBD
Overload 30
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
bflt_tab IN BINARY_FLOAT_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
Overload 31
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
bdbl_tab IN BINARY_DOUBLE_TABLE);
TBD
Overload 32
dbms_sql.bind_array (
c IN INTEGER,
name IN VARCHAR2,
bdbl_tab IN BINARY_DOUBLE_TABLE,
index1 IN INTEGER,
index2 IN INTEGER);
TBD
BIND_VARIABLE
Binds a given value to a given variable
Overload 1
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN NUMBER);
conn scott/tiger
SELECT COUNT(*) FROM emp;
CREATE OR REPLACE PROCEDURE demo(salary IN NUMBER) AS
cursor_name INTEGER;
rows_processed INTEGER;
BEGIN
cursor_name := dbms_sql.open_cursor;
dbms_sql.parse(cursor_name, 'DELETE FROM emp WHERE sal > :x',
dbms_sql.NATIVE);
dbms_sql.bind_variable(cursor_name, ':x', salary);
rows_processed := dbms_sql.execute(cursor_name);
dbms_sql.close_cursor(cursor_name);
EXCEPTION
WHEN OTHERS THEN
dbms_sql.close_cursor(cursor_name);
END demo;
/
exec demo(30001)
SELECT COUNT(*) FROM emp;
rollback;
Overload 2
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN VARCHAR2 CHARACTER SET ANY_CS);
TBD
Overload 3
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN VARCHAR2 CHARACTER SET ANY_CS,
out_value_size IN INTEGER);
TBD
Overload 4
dbms_sql.bind_variable (
c IN INTEGER,
name IN VARCHAR2,
value IN DATE);
TBD
Overload 5
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN BLOB);
TBD
Overload 6
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN CLOB CHARACTER SET ANY_CS);
TBD
Overload 7
dbms_sql.bind_variable (
c IN INTEGER,
name IN VARCHAR2,
value IN BFILE);
TBD
Overload 8
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN UROWID);
TBD
Overload 9
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN TIME_UNCONSTRAINED);
TBD
Overload 10
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN TIMESTAMP_UNCONSTRAINED);
TBD
Overload 11
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN TIME_TZ_UNCONSTRAINED);
TBD
Overload 12
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN TIMESTAMP_TZ_UNCONSTRAINED);
TBD
Overload 13
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN TIMESTAMP_LTZ_UNCONSTRAINED);
TBD
Overload 14
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN YMINTERVAL_UNCONSTRAINED);
TBD
Overload 15
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN DSINTERVAL_UNCONSTRAINED);
TBD
Overload 16
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN BINARY_FLOAT);
TBD
Overload 17
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN BINARY_DOUBLE);
TBD
Overload 18
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN <ADT_1>);
TBD
Overload 19
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN REF <ADT_1>);
TBD
Overload 20
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN <TABLE_1>);
TBD
Overload 21
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN <VARRAY_1>);
TBD
Overload 22
dbms_sql.bind_variable(
c IN INTEGER,
name IN VARCHAR2,
value IN <OPAQUE_1>);
TBD
BIND_VARIABLE_CHAR
Binds a given value to a given variable
Overload 1
dbms_sql.bind_variable_char(
c IN INTEGER,
name IN VARCHAR2,
value IN CHAR CHARACTER SET ANY_CS);
See bind_variable demo
Overload 2
dbms_sql.bind_variable_char(
c IN INTEGER,
name IN VARCHAR2,
value IN CHAR CHARACTER SET ANY_CS,
out_value_size IN INTEGER);
TBD
BIND_VARIABLE_RAW
Binds a given value to a given variable
Overload 1
dbms_sql.bind_variable_raw(
c IN INTEGER,
name IN VARCHAR2,
value IN RAW);
See bind_variable demo
Overload 2
dbms_sql.bind_variable_raw(
c IN INTEGER,
name IN VARCHAR2,
value IN RAW,
out_value_size IN INTEGER);
TBD
BIND_VARIABLE_ROWID
Binds a given value to a given variable
Overload 1
dbms_sql.bind_variable_rowid(
c IN INTEGER,
name IN VARCHAR2,
value IN ROWID);
See bind_variable demo
Overload 2
dbms_sql.bind_variable_rowid(
c IN INTEGER,
name IN VARCHAR2,
value IN ROWID,
out_value_size IN INTEGER);
TBD
CLOSE_CURSOR
Closes cursor and free memory
dbms_sql.close_cursor(c IN OUT INTEGER);
See is_open demo
COLUMN_VALUE
Returns value of the cursor element for a given position in a cursor
Overload 1
dbms_sql.column_value
c IN
INTEGER,
position IN INTEGER,
value OUT NUMBER);
See final demo
Overload 2
dbms_sql.column_value(
c IN
INTEGER,
position IN INTEGER,
value OUT VARCHAR2 CHARACTER SET ANY_CS);
TBD
Overload 3
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
value OUT DATE);
TBD
Overload 4
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
value OUT BLOB);
TBD
Overload 5
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
value OUT CLOB CHARACTER SET ANY_CS);
TBD
Overload 6
dbms_sql.column_value (
c IN INTEGER,
position IN INTEGER,
value OUT BFILE);
TBD
Overload
7
dbms_sql.column_value(
c IN
INTEGER,
position IN INTEGER,
value OUT NUMBER,
column_error OUT NUMBER,
actual_length OUT INTEGER);
TBD
Overload
8
dbms_sql.column_value(
c IN
INTEGER,
position IN INTEGER,
value OUT VARCHAR2 CHARACTER SET
ANY_CS,
column_error OUT NUMBER,
actual_length OUT INTEGER);
TBD
Overload
9
dbms_sql.column_value(
c IN
INTEGER,
position IN INTEGER,
value OUT DATE,
column_error OUT NUMBER,
actual_length OUT INTEGER);
TBD
Overload
10
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
n_tab IN OUT NOCOPY NUMBER_TABLE);
TBD
Overload 11
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
c_tab IN OUT NOCOPY VARCHAR2_TABLE);
TBD
Overload 12
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
d_tab IN OUT NOCOPY DATE_TABLE);
TBD
Overload 13
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
bl_tab IN OUT NOCOPY BLOB_TABLE);
TBD
Overload 14
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
cl_tab IN OUT NOCOPY CLOB_TABLE);
TBD
Overload 15
dbms_sql.column_value (
c IN INTEGER,
position IN INTEGER,
bf_tab IN OUT NOCOPY BFILE_TABLE);
TBD
Overload 16
dbms_sql.column_value (
c IN INTEGER,
position IN INTEGER,
value OUT UROWID);
TBD
Overload 17
dbms_sql.column_value (
c IN INTEGER,
position IN INTEGER,
ur_tab IN OUT NOCOPY UROWID_TABLE);
TBD
Overload 18
dbms_sql.column_value (
c IN INTEGER,
position IN INTEGER,
value OUT TIME_UNCONSTRAINED);
TBD
Overload 19
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
tm_tab IN OUT NOCOPY TIME_TABLE);
TBD
Overload
20
dbms_sql.column_value (
c IN INTEGER,
position IN INTEGER,
value OUT TIMESTAMP_UNCONSTRAINED);
TBD
Overload
21
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
tms_tab IN OUT NOCOPY TIMESTAMP_TABLE);
TBD
Overload
22
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
value OUT TIME_TZ_UNCONSTRAINED);
TBD
Overload
23
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
ttz_tab IN OUT NOCOPY TIME_WITH_TIME_ZONE_TABLE);
TBD
Overload
24
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
value OUT TIMESTAMP_TZ_UNCONSTRAINED);
TBD
Overload
25
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
tstz_tab IN OUT NOCOPY TIMESTAMP_WITH_TIME_ZONE_TABLE);
TBD
Overload
26
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
value OUT TIMESTAMP_LTZ_UNCONSTRAINED);
TBD
Overload
27
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
tstz_tab IN OUT NOCOPY TIMESTAMP_WITH_LTZ_TABLE);
TBD
Overload
28
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
value OUT YMINTERVAL_UNCONSTRAINED);
TBD
Overload
29
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
iym_tab IN OUT NOCOPY INTERVAL_YEAR_TO_MONTH_TABLE);
TBD
Overload
30
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
value OUT DSINTERVAL_UNCONSTRAINED);
TBD
Overload
31
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
ids_tab IN OUT NOCOPY INTERVAL_DAY_TO_SECOND_TABLE);
TBD
Overload
32
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
value OUT BINARY_FLOAT);
TBD
Overload
33
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
bflt_tab IN OUT NOCOPY BINARY_FLOAT_TABLE);
TBD
Overload
34
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
value OUT BINARY_DOUBLE);
TBD
Overload
35
dbms_sql.column_value(
c IN INTEGER,
position IN INTEGER,
bdbl_tab IN OUT NOCOPY BINARY_DOUBLE_TABLE);
TBD
Overload
36
dbms_sql.column_value(
c IN INTEGER,
position IN BINARY_INTEGER,
value OUT "<ADT_1>");
TBD
Overload
37
dbms_sql.column_value(
c IN INTEGER,
position IN BINARY_INTEGER,
value OUT REF "<ADT_1>");
TBD
Overload
38
dbms_sql.column_value(
c IN INTEGER,
position IN BINARY_INTEGER,
value OUT "<TABLE_1>");
TBD
Overload
39
dbms_sql.column_value(
c IN INTEGER,
position IN BINARY_INTEGER,
value OUT "<VARRAY_1>");
TBD
Overload
40
dbms_sql.column_value(
c IN INTEGER,
position IN BINARY_INTEGER,
value OUT "<OPAQUE_1>");
TBD
COLUMN_VALUE_CHAR
Returns value of the cursor element for a given position in a cursor
Overload 1
dbms_sql.column_value_char(
c IN
INTEGER,
position IN INTEGER,
value OUT CHAR CHARACTER SET ANY_CS);
See column_value in final demo
Overload 2
dbms_sql.column_value_char(
c IN INTEGER,
position IN INTEGER,
value OUT CHAR CHARACTER SET ANY_CS,
column_error OUT NUMBER,
actual_length OUT INTEGER);
TBD
COLUMN_VALUE_LONG
Returns a selected part of a LONG column, that has been defined using DEFINE_COLUMN_LONG
dbms_sql.column_value_long(
c IN INTEGER,
position IN INTEGER,
length IN INTEGER,
offset IN INTEGER,
value OUT VARCHAR2,
value_length OUT INTEGER);
See column_value in final demo
COLUMN_VALUE_RAW
Returns value of the cursor element for a given position in a cursor
Overload 1
dbms_sql.column_value_raw(
c IN INTEGER,
position IN INTEGER,
value OUT RAW);
See column_value in final demo
Overload 2
dbms_sql.column_value_raw(
c IN INTEGER,
position IN INTEGER,
value OUT RAW,
column_error OUT NUMBER,
actual_length OUT INTEGER);
TBD
COLUMN_VALUE_ROWID
Undocumented
Overload 1
dbms_sql.column_value_rowid(
c IN INTEGER,
position IN INTEGER,
value OUT ROWID);
See column_value in final demo
Overload 2
dbms_sql.column_value_rowid(
c IN INTEGER,
position IN INTEGER,
value OUT ROWID,
column_error OUT NUMBER,
actual_length OUT INTEGER);
TBD
DEFINE_ARRAY
Defines a collection to be selected from the given cursor, used only with SELECT statements
Overload 1
dbms_sql.define_array(
c IN INTEGER,
position IN INTEGER,
n_tab IN NUMBER_TABLE,
cnt IN INTEGER,
lower_bnd IN INTEGER);
DECLARE
c NUMBER;
d NUMBER;
n_tab dbms_sql.number_table;
indx NUMBER := -10;
BEGIN
c := dbms_sql.open_cursor;
dbms_sql.parse(c,'select n from t order by 1',dbms_sql.NATIVE);
dbms_sql.define_array(c, 1, n_tab, 10, indx);
d := dbms_sql.execute(c);
LOOP
d := dbms_sql.fetch_rows(c);
dbms_sql.column_value(c, 1, n_tab);
exit when d != 10;
END LOOP;
dbms_sql.close_cursor(c);
EXCEPTIONS
WHEN OTHERS THEN
IF dbms_sql.is_open(c) THEN
dbms_sql.close_cursor(c);
END IF;
RAISE;
END;
/
Overload 2
dbms_sql.define_array (
c IN INTEGER,
position IN INTEGER,
c_tab IN VARCHAR2_TABLE,
cnt IN INTEGER,
lower_bound IN INTEGER);
TBD
Overload 3
dbms_sql.define_array (
c IN INTEGER,
position IN INTEGER,
d_tab IN DATE_TABLE,
cnt IN INTEGER,
lower_bound IN INTEGER);
TBD
Overload 4
dbms_sql.define_array (
c IN INTEGER,
position IN INTEGER,
bl_tab IN BLOB_TABLE,
cnt IN INTEGER,
lower_bound IN INTEGER);
TBD
Overload 5
dbms_sql.define_array (
c IN INTEGER,
position IN INTEGER,
cl_tab IN CLOB_TABLE,
cnt IN INTEGER,
lower_bound IN INTEGER);
TBD
Overload 6
dbms_sql.define_array (
c IN INTEGER,
position IN INTEGER,
bf_tab IN BFILE_TABLE,
cnt IN INTEGER,
lower_bound IN INTEGER);
TBD
Overload 7
dbms_sql.define_array (
c IN INTEGER,
position IN INTEGER,
ur_tab IN UROWID_TABLE,
cnt IN INTEGER,
lower_bound IN INTEGER);
TBD
Overload 8
dbms_sql.define_array(
c IN INTEGER,
position IN INTEGER,
tm_tab IN TIME_TABLE,
cnt IN INTEGER,
lower_bound IN INTEGER);
TBD
Overload
9
dbms_sql.define_array(
c IN INTEGER,
position IN INTEGER,
tms_tab IN TIMESTAMP_TABLE,
cnt IN INTEGER,
lower_bound IN INTEGER);
TBD
Overload
10
dbms_sql.define_array(
c IN INTEGER,
position IN INTEGER,
ttz_tab IN TIME_WITH_TIME_ZONE_TABLE,
cnt IN INTEGER,
lower_bound IN INTEGER);
TBD
Overload
11
dbms_sql.define_array(
TBD
Overload
12
dbms_sql.define_array(
TBD
Overload
13
dbms_sql.define_array(
TBD
Overload
14
dbms_sql.define_array(
TBD
Overload
15
dbms_sql.define_array(
TBD
Overload
16
dbms_sql.define_array(
TBD
DEFINE_COLUMN
Defines a column to be selected from the given cursor, used only with SELECT statements
Overload 1
dbms_sql.define_column (
c IN INTEGER,
position IN INTEGER,
column IN NUMBER)
See final demo
Overload 2
dbms_sql.define_column (
c IN INTEGER,
position IN INTEGER,
column IN VARCHAR2 CHARACTER SET ANY_CS,
column_size IN INTEGER);
TBD
Overload 3
dbms_sql.define_column (
c IN INTEGER,
position IN INTEGER,
column IN DATE);
TBD
Overload 4
dbms_sql.define_column (
c IN INTEGER,
position IN INTEGER,
column IN BLOB);
TBD
Overload 5
dbms_sql.define_column (
c IN INTEGER,
position IN INTEGER,
column IN CLOB);
TBD
Overload 6
dbms_sql.define_column (
c IN INTEGER,
position IN INTEGER,
column IN BFILE);
TBD
Overload 7
dbms_sql.define_column (
c IN INTEGER,
position IN INTEGER,
column IN UROWID);
TBD
Overload 8
dbms_sql.define_column(
c IN INTEGER,
position IN INTEGER,
column IN TIME_UNCONSTRAINED);
TBD
Overload 9
dbms_sql.define_column(
c IN INTEGER,
position IN INTEGER,
column IN TIMESTAMP_UNCONSTRAINED);
TBD
Overload 10
dbms_sql.define_column(
c IN INTEGER,
position IN INTEGER,
column IN TIME_TZ_UNCONSTRAINED);
TBD
Overload
11
dbms_sql.define_column(
TBD
Overload
12
dbms_sql.define_column(
TBD
Overload
13
dbms_sql.define_column(
TBD
Overload
14
dbms_sql.define_column(
TBD
Overload
15
dbms_sql.define_column(
TBD
Overload
16
dbms_sql.define_column(
TBD
Overload
17
dbms_sql.define_column(
TBD
Overload
18
dbms_sql.define_column(
TBD
Overload
19
dbms_sql.define_column(
TBD
Overload
20
dbms_sql.define_column(
TBD
Overload
21
dbms_sql.define_column(
TBD
DEFINE_COLUMN_CHAR
Undocumented
dbms_sql.define_column_char(
c IN INTEGER,
position IN INTEGER,
column IN CHAR CHARACTER SET ANY_CS,
column_size IN INTEGER);
See define_column in final demo
DEFINE_COLUMN_LONG
Defines a LONG column to be selected from the given cursor, used only with SELECT statements
dbms_sql.define_column_long(c IN INTEGER,
position IN INTEGER);
See define_column in final demo
DEFINE_COLUMN_RAW
Undocumented
dbms_sql.define_column_raw(
c IN INTEGER,
position IN INTEGER,
column IN RAW,
column_size IN INTEGER);
See define_column in final demo
DEFINE_COLUMN_ROWID
Undocumented
dbms_sql.define_column_rowid(
c IN INTEGER,
position IN INTEGER,
column IN ROWID);
See define_column in final demo
DESCRIBE_COLUMNS
Describes the columns for a cursor opened and parsed through DBMS_SQL
dbms_sql.describe_columns(
c IN INTEGER,
col_cnt OUT INTEGER,
desc_t OUT DESC_TAB);
DECLARE
c NUMBER;
d NUMBER;
col_cnt PLS_INTEGER;
f BOOLEAN;
rec_tab dbms_sql.desc_tab;
col_num NUMBER;
IF (rec.col_null_ok) THEN
dbms_output.put_line('True');
ELSE
dbms_output.put_line('False');
END IF;
END;
BEGIN
c := dbms_sql.open_cursor;
dbms_sql.parse(c,'select * from scott.bonus',dbms_sql.NATIVE);
d := dbms_sql.execute(c);
dbms_sql.describe_columns(c, col_cnt, rec_tab);
/*
Following loop could simply be for j in 1..col_cnt loop.
Here we are simply illustrating some of the PL/SQL table features.
*/
col_num := rec_tab.first;
IF (col_num IS NOT NULL) THEN
LOOP
print_rec(rec_tab(col_num));
col_num := rec_tab.next(col_num);
EXIT WHEN (col_num is null);
END LOOP;
END IF;
dbms_sql.close_cursor(c);
END;
/
DESCRIBE_COLUMNS2
Describes the specified column, an alternative method
fixing a bug
dbms_sql.describe_columns2(
c IN INTEGER,
col_cnt OUT INTEGER,
desc_tab2 OUT DESC_TAB2);
TBD
DESCRIBE_COLUMNS3
(new 11g)
Describes the specified column, an alternative method
dbms_sql.describe_columns2(
c IN INTEGER,
col_cnt OUT INTEGER,
desc_t OUT DESC_TAB3);
---------------------------
-- local function to the execute_plsql_block procedure
FUNCTION next_row(
clob_in IN CLOB,
len_in IN INTEGER,
off_in IN INTEGER) RETURN VARCHAR2 IS
BEGIN
RETURN DBMS_LOB.SUBSTR(clob_in, len_in, off_in);
END next_row;
---------------------------
BEGIN
v_loblen := DBMS_LOB.GETLENGTH(plsql_code_block);
INSERT INTO test
(test)
VALUES
('Demo block is ' || TO_CHAR(v_loblen) || ' bytes in length');
COMMIT;
LOOP
-- Set the length to the remaining size
-- if there are < c_buf_len characters remaining.
IF v_accum + c_buf_len > v_loblen THEN
v_end := v_loblen - v_accum;
END IF;
BEGIN
-- open cursor on source table
src_cur := dbms_sql.open_cursor;
-- parse the SELECT statement
dbms_sql.parse(src_cur, 'SELECT id, name, dob FROM ' ||
src_tab,
dbms_sql.NATIVE);
-- define the column type
dbms_sql.define_column(src_cur, 1, col1);
dbms_sql.define_column(src_cur, 2, col2, 30);
dbms_sql.define_column(src_cur, 3, col3);
ignore := dbms_sql.execute(src_cur);
-- open cursor on destination table
dest_cur := dbms_sql.open_cursor;
-- parse the INSERT statement
dbms_sql.parse(dest_cur, 'INSERT INTO ' ||
dest_tab || ' VALUES
(:n_bind, :c_bind, :d_bind)', dbms_sql.NATIVE);
LOOP
-- Fetch a row from the source table
IF dbms_sql.fetch_rows(src_cur)
> 0 THEN
-- get column values of the row
dbms_sql.column_value(src_cur, 1,
col1);
dbms_sql.column_value(src_cur, 2,
col2);
dbms_sql.column_value(src_cur, 3,
col3);
-- bind in the values to be inserted
dbms_sql.bind_variable(dest_cur,
':n_bind', col1);
dbms_sql.bind_variable(dest_cur,
':c_bind', col2);
dbms_sql.bind_variable(dest_cur,
':d_bind', col3);
ignore := dbms_sql.execute(dest_cur);
ELSE
-- No more rows to
copy
EXIT;
END IF;
END LOOP;
-- Commit and close all cursors
COMMIT;
dbms_sql.close_cursor(src_cur);
dbms_sql.close_cursor(dest_cur);
EXCEPTION
WHEN OTHERS THEN
IF dbms_sql.is_open(src_cur) THEN
dbms_sql.close_cursor(src_cur);
END IF;
IF dbms_sql.is_open(dest_cur) THEN
dbms_sql.close_cursor(dest_cur);
END IF;
RAISE;
END copy_proc;
/
CREATE OR REPLACE FUNCTION objname(rnum INTEGER) RETURN VARCHAR2 IS
retval VARCHAR2(30);
BEGIN
SELECT object_name
INTO retval
FROM (
SELECT rownum X, object_name
FROM all_objects
WHERE rownum < 11)
WHERE x = rnum+1;
RETURN retval;
END objname;
/
DECLARE
sqlstr VARCHAR2(200);
objno_array dbms_sql.number_table;
objname_array dbms_sql.varchar2_table;
handle
NUMBER;
dummy NUMBER;
BEGIN
FOR i IN 0..9
LOOP
objno_array(i) := 1000 + i;
objname_array(i) := objname(i);
END LOOP;