dbms_sql.execute を使用して実行されたコードを追跡する方法はありますか?
たとえば、次のクエリを実行すると:
DECLARE
cursor_name INTEGER;
rows_processed INTEGER;
BEGIN
cursor_name := dbms_sql.open_cursor;
DBMS_SQL.PARSE(cursor_name, 'SELECT * FROM dual WHERE 2 = :x' ,DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(cursor_name, ':x', 2);
rows_processed := DBMS_SQL.EXECUTE(cursor_name);
DBMS_SQL.CLOSE_CURSOR(cursor_name);
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(cursor_name);
END;
結果を見つけることができるはずです:
SELECT * FROM dual WHERE 2 = 2
v$sql/v$sql_bind_capture と dba_hist_sqltext/dba_hist_sqlbind を調べてみましたが、異なるバインド変数で同じ sql を実行すると、同じ sql_id を持つ sql が上書きされるため、信頼性がないようです。