DBMS_SQL : DYNAMIC SQL (II)
============================
EXPLANATION
-------------
Function last_error_position
: error가 발생된 sql 문장 텍스트에서 바이트 변위값을 돌려줍니다
(첫번째 문자는 0입니다.)
Function last_row_count
:fetch된 행들의 누적 count를 돌려줍니다
Function last_row_id
:fetch된 마지막 행의 rowid를 돌려줍니다
Function last_sql_function_code
: 문장에 대한 sql 함수 코드를 돌려줍니다
sql 문장 실행후에 즉각 이 함수를 사용하여야 하며 그렇지 않으면 반환 값이
적절치 못합니다.
sql function code는 programmer's guide to the ORACLE call interfaces
을 참조하세요.
EXAMPLE
--------
CREATE or REPLACE PROCEDURE get_rows (where_clause varchar2) AS
cursor1 integer;
rows_processed integer;
myempno number;
myename varchar2(20);
v_count number;
err_off integer;
my_sqlcode number;
code integer;
BEGIN
cursor1 := dbms_sql.open_cursor;
dbms_sql.parse (cursor1, 'select empno, ename from emp where '
|| where_clause, dbms_sql.v7);
dbms_sql.define_column (cursor1, 1, myempno);
dbms_sql.define_column (cursor1, 2, myename, 20);
rows_processed := dbms_sql.execute (cursor1);
code := dbms_sql.last_sql_function_code;
DBMS_OUTPUT.PUT_LINE(code);
loop
v_count := dbms_sql.fetch_rows(cursor1);
if v_count > 0 then
dbms_sql.column_value (cursor1, 1, myempno);
dbms_sql.column_value (cursor1, 2, myename);
dbms_output.put_line(to_char(myempno) || ' ' || myename);
else
exit;
end if;
end loop;
dbms_output.put_line(dbms_sql.last_row_count);
dbms_output.put_line(dbms_sql.last_row_id);
dbms_sql.close_cursor (cursor1);
EXCEPTION
WHEN OTHERS THEN
err_off := dbms_sql.last_error_position;
DBMS_OUTPUT.PUT_LINE('Error Offset=' || err_off);
my_sqlcode := SQLCODE;
DBMS_OUTPUT.PUT_LINE('SQL return code=' || my_sqlcode);
END;
/
REFERENCES
----------
Note:1008453.6