私はあなたに素晴らしい解決策を持っていますが、あなたがしなければならないことが2つあります:
-
SQLをPL/SQLプログラム・ユニット内に配置します。そうです、あなたが言及したストアドプロシージャに対してです。
-
そのプログラムユニットとすべての依存テーブルを12.2インスタンスにコンパイルします(つまり、アプリケーションコードをインストールします)( http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html または、cloud.oracle.comでExadata Express CLoud Serviceを購入するか、cloud.oracle.com /tryitで1か月間無料で使用するために300ドルのクレジットを取得できます。
12.2は、本当に使用したい機能がPL / Scopeと呼ばれ、PL / SQL識別子(11.1以降)およびPL /'SQL内のSQL使用状況(12.2以降)に関する情報を収集するコンパイラツールであるため、重要です。
CREATE TABLE my_data (n NUMBER)
/
ALTER SESSION SET plscope_settings='identifiers:all, statements:all'
/
CREATE OR REPLACE PROCEDURE my_procedure (n_in IN NUMBER)
AUTHID DEFINER
IS
l_n my_data.n%TYPE;
CURSOR all_data_cur
IS
SELECT *
FROM my_data
FOR UPDATE OF n;
BEGIN
INSERT INTO my_data (n)
VALUES (n_in);
END;
/
SELECT idt.line,
idt.owner || '.' || idt.object_name code_unit,
idt.name column_name,
RTRIM (src.text, CHR (10)) text
FROM all_identifiers idt, all_source src
WHERE idt.usage = 'REFERENCE'
AND idt.TYPE = 'COLUMN'
AND idt.line = src.line
AND idt.object_name = src.name
AND idt.owner = src.owner
AND idt.object_name = 'MY_PROCEDURE'
ORDER BY code_unit, line
/
LINE CODE_UNIT COLUMN_NAME TEXT
4 STEVEN.MY_PROCEDURE N l_n my_data.n%TYPE;
10 STEVEN.MY_PROCEDURE N FOR UPDATE OF n;
12 STEVEN.MY_PROCEDURE N INSERT INTO my_data (n)
お役に立てば幸いです。
livesql.oracle.comにPL/Scopeの例がたくさんあります。 「pl/scope」を検索するだけです(duh)。