1

名前に角かっこが付いたスキーマにテーブルがあります(これはレガシーであり、変更できません):

CREATE TABLE "Addresses"
    ("ID"                        NUMBER(*,0) ,
    "FullAddress"                  NVARCHAR2(100),
    "HomeNum"                      NVARCHAR2(25),
    "StreetName"                   NVARCHAR2(50)
)

だから私が欲しいのは、動的SQLを介してこのテーブルを更新できるようにすることです。それが私がそれをやろうとする方法です:

DECLARE 
  sql_upd_statement VARCHAR2(500) := '';
  table_name VARCHAR2(20) := '"Addresses"';
  column_name VARCHAR2(20) := '"FullAddress"';
BEGIN

   --no rows will be updated, just a sample 
   sql_upd_statement := 'UPDATE stm.:1 SET :2 = SUBSTR( :2, 2 ) WHERE :2 IS NOT NULL AND :2 IS NULL';

   dbms_output.put_line( sql_upd_statement );

  EXECUTE IMMEDIATE  sql_upd_statement USING IN table_name, column_name;

END;

教えてください、動的SQLを介して私が望むものに到達することは可能ですか? 「table_name」、「column_name」の値を括弧なしで設定しようとしましたが、まだうまくいきません。

4

1 に答える 1

2

バインド変数を使用してスキーマ オブジェクト名を渡すことはできません。リテラルである必要があります。

sql_upd_statement := 'UPDATE stm.'||table_name||' SET '||column_name||' = SUBSTR( '||column_name||', 2 ) WHERE '||column_name||' IS NOT NULL AND '||column_name||' IS NULL';
于 2013-05-14T17:31:45.393 に答える