PL/SQLまたはSQLの動的SQL文でエラーの位置を確認するにはどうすればよいですか? SQLからOracle:SQLまたはPL/SQLを使用して動的SQLでエラーの位置を見つける
* Plusの私には、例えば、無効なSQL DML文でのエラーの位置を参照してください。
[email protected]> SELECT
2 X
3 FROM
4 TABLEX
5/
TABLEX
*
ERROR at line 4:
ORA-00942: table or view does not exist
SQL * Plusは、行番号とエラーが表示され、プリントやラインマークエラーが見つかったアスタリスクを付けてください。動的SQLへの変換
、私はエラーコード(SQLCODE)とエラーメッセージ(SQLERRM)を取得することができます
[email protected]> SET SERVEROUTPUT ON
[email protected]> BEGIN
2 EXECUTE IMMEDIATE 'SELECT X FROM TABLEX';
3 EXCEPTION
4 WHEN OTHERS THEN
5 DBMS_OUTPUT.PUT_LINE('SQLCODE:' || SQLCODE);
6 DBMS_OUTPUT.PUT_LINE('SQLERRM:' || SQLERRM);
7 END;
8/
SQLCODE:-942
SQLERRM:ORA-00942: table or view does not exist
をしかし、どのように、私は、動的SQL文字列に誤りの位置を得るのですか?
Oracleは、エラーに関する興味深い情報を含むSQLコミュニケーション領域(SQLCA)を提供しています。
- SQLCODEとSQLERRMフィールド(すなわち、それぞれのPL/SQL関数で取得したデータのソースであるかもしれない)、
- 'を与えるSQLERRD(5)要素SQLERRDフィールド:特に解析エラーオフセット '。
PL/SQLまたはSQLからSQLERRDにアクセスできますか?もしそうなら、どうですか?そうでない場合は、PL/SQLまたはSQLからエラーの場所を特定できる他の方法はありますか?
(ここでhttp://docs.oracle.com/cd/B28359_01/appdev.111/b31231/chapter8.htm#BABIGBFF SQLCAがのPro * Cで文書化され、アクセスされます。)
(答えはここhow to declare SQLCA.SQLERRD? SQLERRDは、PL/SQL、したがって、アクセスできないで定義されていないことを示していると思われる。)
(Why doesn't Oracle tell you WHICH table or view does not exist?は、トレースファイルを使用して不正なSQLを表示し、一部の開発ツールでエラーの場所を表示するための提案を表示します)。
にエラーメッセージを抽出するためのパッケージを得ましたアスタリスク私は行と列の数を得るためにエラースタックを解析することによって必要なものを得ることができますが、より簡単な方法がありますか? –
私が知る限り、より簡単な方法はありません。 –