0
DECLARE

  v_name  A.TRANSACTION_TYPE%TYPE   :='SALARY';
  v_salary    A.SALARY%TYPE := 1000;

BEGIN

  update A set v_name= v_salary where EMPID = 517; 
-- PL/SQL: ORA-00904: "v_name": invalid identifier
--update A set SALARY = 1000 where EMPID = 517;

END;

/

私の考えは、テーブルの列を更新することですが、これらの列名は変数に格納されています。variable から列名を渡す方法はありますか? 即時実行以外にオプションはありますか

4

2 に答える 2

0

これがあなたの状況で機能するかどうかはわかりませんが、SQL Plus でスクリプトを作成し、クエリを実行する別のスクリプトを (または単に使用して) "作成" したソリューションを作成しました。これらのクエリの列/テーブルはSQL Plus スクリプトのロジックによって決定されます。次に、最初のスクリプトからの出力をスクリプトとして実行し、動的に生成されたクエリを実行します。.dbms_output.put_linepromptexecute immediate

于 2012-12-07T18:06:12.583 に答える
0

次のアイデアは、同じ型の複数の列に対して機能する可能性があります... 書かれているように、特定のレコードに対して毎回すべての列を更新しますが、で指定された列のみが でv_name設定された値に変更されv_valueます。他の列は単に既存の値に更新されます。DECODEアイデアは、NVLまたは他の同様の条件演算子を使用して再生できます。

 declare

 v_name varchar2(20):= 'SAL';
 v_value emptest.sal%TYPE := 5000;

 begin

 update emptest
 set sal = ( select case when v_name = 'SAL' then v_value else sal end from dual),
 comm = ( select case when v_name = 'COMM' then v_value else comm end from dual)
 where empno = 7369;

 commit;

 end;
于 2012-12-07T18:46:44.247 に答える