2017-12-14 22 views
1

以下の手順を考慮してください。処理のためには、とにかくすべての処理段階を経なければなりません。だから私の質問は次のとおりです。これは解析段階で'Select job_id from asfd'はまだ文字列として扱われていますが、EXECUTE IMMEDIATEの実行段階である'Select job_id from asfd'がSQL文として再び解析されていますか?私はhereで見つかったEXECUTE IMMEDIATEのSQL文は実行時に解析されますか?

CREATE OR REPLACE PROCEDURE test_ei 
IS 
BEGIN 
EXECUTE IMMEDIATE ‘select job_id from asfd’; //line 3 
END; 

1つの説明はasdf表が存在しませんが、腸が正常にそう'Select job_id from asfd'はまだこの段階では、文字列として扱われ、コンパイルされています。いかなる訂正もお願いします。

実際には、EXECUTE IMMEDIATE 'select * asfd';が3行目に置き換えられても、それでも正常に適合します。だから私は上記の説明が正しいと思います。

+0

異なるフェーズについてのいくつかの有用な情報:[リンク] https://docs.oracle.com/cd/A57673_01/DOC/server/doc/A48506/sqlconce.htm – Anand

+1

はい、手続きのための解析時に、 'select job_id from asfd'は**解析されていません**、実行時にのみ解析されます。 –

答えて

0

はい。 EXECUTE IMMEDIATEでは、ランタイムエンジンは最初に文を解析する必要があります。つまり、スキーマ要素(表、列など)の名前をバインドできない理由は、

詳細: 構文解析段階では、 SQL文が適切に定義されています。 PL/SQLは、:xyzの値を知らなくても、次の文が有効であることを確認できます。

'UPDATE emp SET sal = :xyz' 

しかし、次の文が正しく構成されているかどうかをPL/SQLはどのように知ることができますか?私たちはできないので、制限があります。

'UPDATE emp SET :col_name = :xyz' 
関連する問題