2016-03-22 11 views
0

行方不明スロー:Oracleは即時実行をキーワードエラー私は次のクエリを使用して、私のストアドプロシージャで

SELECT COUNT(*) INTO COL_NO FROM user_tab_columns WHERE table_name='PAY_SLIP_FEB_16'; 

をこのクエリでは、(それがいけないので)エラーを与えません。しかし、ここのテーブル名は固定されているので、テーブル名を提供する変数を使用したいと思います。だから私はこのようなクエリを変更:

EXECUTE IMMEDIATE 'SELECT COUNT(*) INTO COL_NO FROM user_tab_columns WHERE table_name='''||TBL_NAME||''''; 

このクエリはエラーを与える:

ORA-00905: missing keyword 

は私が間違って何をしたのですか? TIA。

N.B. :TBL_NAMEはテーブル名を指定する入力パラメータで、COL_NAMEはNUMBER(5,0)型の変数です。

答えて

6

私はコードがEXECUTE IMMEDIATEの一部としてではなく、動的なクエリ文字列にINTOを持っていることを期待する:注意点としては

EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM user_tab_columns WHERE table_name='''||TBL_NAME||'''' 
     INTO COL_NO ; 

:私は別の変数を使用して、これを記述します。

v_sql := 'SELECT COUNT(*) FROM user_tab_columns WHERE table_name = ''@TBL_NAME'''; 
v_sql := REPLACE(v_sql, '@TBL_NAME', TBL_NAME) 

EXECUTE IMMEDIATE v_sql INTO v_COL_NO ; 
+2

'@ TBL_NAME'を使用して後に置き換えた場合の利点は何ですか? –

+0

@WahidMasud。 。 。クエリを理解して時間をかけて維持する方がはるかに簡単です。たくさんの文字列を連結すると、サブクエリのロジックに従うのが難しくなります。 –

関連する問題