Use DBMS_SQL with the RETURNING clause.
SQL>
SQL> CREATE TABLE MyTable (
2 num_col NUMBER,
3 char_col VARCHAR2(60)
4 );
Table created.
SQL>
SQL> set serveroutput on
SQL> DECLARE
2 v_RowidString VARCHAR2(100);
3 v_NumVal NUMBER := 1;
4 v_StringVal VARCHAR2(20) := 'rowid';
5 BEGIN
6 INSERT INTO MyTable VALUES (v_NumVal, v_StringVal)
7 RETURNING ROWID INTO v_RowidString;
8 DBMS_OUTPUT.PUT_LINE('ROWID of new row is: ' || v_RowidString);
9 END;
10 /
ROWID of new row is: AAADlMAABAAAKV6AAA
PL/SQL procedure successfully completed.
SQL>
SQL> DECLARE
2 v_RowidString VARCHAR2(100);
3 v_CursorID INTEGER;
4 v_NumVal NUMBER := 1;
5 v_StringVal VARCHAR2(20) := 'rowid';
6 sqlString VARCHAR2(100);
7 v_ReturnCode NUMBER;
8 BEGIN
9 sqlString :=
10 'INSERT INTO MyTable VALUES (:n, :c) ' ||
11 'RETURNING ROWID INTO :r';
12 v_CursorID := DBMS_SQL.OPEN_CURSOR;
13 DBMS_SQL.PARSE(v_CursorID, sqlString, DBMS_SQL.NATIVE);
14 DBMS_SQL.BIND_VARIABLE(v_CursorID, ':n', v_NumVal);
15 DBMS_SQL.BIND_VARIABLE(v_CursorID, ':c', v_StringVal);
16 DBMS_SQL.BIND_VARIABLE(v_CursorID, ':r', v_RowidString, 100);
17 v_ReturnCode := DBMS_SQL.EXECUTE(v_CursorID);
18 DBMS_SQL.VARIABLE_VALUE(v_CursorID, ':r', v_RowidString);
19 DBMS_OUTPUT.PUT_LINE('ROWID of new row is: '|| v_RowidString);
20 END;
21 /
ROWID of new row is: AAADlMAABAAAKV6AAB
PL/SQL procedure successfully completed.
SQL>
SQL>
SQL> drop table MyTable;
Table dropped.
SQL>
SQL>
Related examples in the same category