5

行タイプのフィールドに値を割り当てたいのですが、その方法がわかりません。

データベース内にテーブルXがあるとします。

また、次の変数があるとします

  • a ( X%ROWTYPE)、テーブル X の行を表す
  • b ( VARCHAR2 )、テーブル X の列名を含む
  • c ( VARCHAR2 )、ab 内に保存したいものを含む

私がやりたいこと:のようなものa.b := c

私はこのようなものを思いついた:

EXECUTE IMMEDIATE 'SELECT '|| c || ' INTO a.' || b || ' FROM DUAL';

どうやら、これは正しい方法ではありません。ORA-0095: キーワードがありませんというエラーが表示されます。

誰でもこれで私を助けることができますか?

完全なコードは次のとおりです。

DECLARE
    tRow            MyTable%ROWTYPE;
    col_name        VARCHAR(10) := 'Length';
    nValue          NUMBER(12,4) := 0.001;
    dynamic_request VARCHAR(300);
BEGIN 
    dynamic_request := 'SELECT '|| nValue || ' INTO tRow.' || col_name || ' FROM DUAL';
    EXECUTE IMMEDIATE dynamic_request;
END;
4

2 に答える 2

1

これを試して:

CREATE OR REPLACE PROCEDURE ROW_CHANGER(
    tRow            IN MyTable%ROWTYPE,
    col_name        IN VARCHAR,
    nValue          IN NUMBER) 
   AS
    dynamic_request VARCHAR(300);
BEGIN 
    dynamic_request := 'BEGIN  :t_row.'||COL_NAME ||':= :n_value; END;';
    EXECUTE IMMEDIATE dynamic_request
         USING IN OUT  TROW, IN nValue;
END;

これは、が定義されていないためEXECUTE IMMEDIATEですtRow MyTable%ROWTYPE

usingそのため、ステートメントで定義しました。

于 2014-02-07T02:07:23.800 に答える