• ベストアンサー

PLSQLのバインド変数の件です。

こんにちわ。 いま,VBからテーブル名と列名をバインド変数としてPLSQLに渡しました。 そこで,PLSQLのなかで, v_Sql := 'UPDATE :Table_Name SET :Column_Name = :After_Change_Value WHERE :Column_Name = :Before_Change_Value ' ; のようにSQLを組み立て, DBMS_SQL.PARSE(v_Cursor, v_Sql, DBMS_SQL.NATIVE); でSQLを解析したところ,ERR-903となってしまいます。 ちなみに,:Table_Nameと:Column_Nameにテーブル名と列名をそのまま記述したところ,上記のエラーはパスできます。 VBからPLSQLにテーブル名と列名を変数として渡して,PLSQLのなかでSQLを解釈するにはどうすれば良いでしょうか? 教えてください。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは。 No.1さんのおっしゃるとおりです・・・。 v_Sqlが文字列なので、「:Table_Name」というテーブル名はおかしいですよね? カラム名も同様です・・・。 v_Sql := 'UPDATE' || Table_Name || 'SET' || Column_Name || '=' || After_Change_Value 単純に変数を展開して、文字列のSQLを作ってください・・・。 (^^ゞ

tatsurou
質問者

お礼

taka451213さん こんにちわ。 教えてもらった方法でできました。 ありがとうございました。

その他の回答 (1)

回答No.1

ホスト変数を使って、テーブル名や項目を可変要素にすることは出来ません。 ホスト変数を使わずに、直にSQL文にテーブル名や項目名を展開した上で DBMS_SQL.PARSEしてください。

tatsurou
質問者

お礼

k_o_r_o_c_h_a_n さん こんにちわ。 ありがとうございます。 教えてもらった方法でできました。

関連するQ&A