0

この変数を使用するスクリプトがあります

with
TIME_DATA  as ( select $$D:=:DA$$ td from dual),

GROUP_INFO as (select $$N:=:GR_ID$$ gr_id_number from dual),

そしてそれらをこのように使用します

 A_PLUS_TEK as(select point_id, ml_id, ml_name, val a_plus_month, DA
from VALUE_DATA, TIME_DATA
where ml_id = 381 and DA = trunc(td, 'MM'))

この変数を初期化する方法を知りたいのですが、スクリプトを実行すると、次の出力が得られます。

Bind Variable "DA$$" is NOT DECLARED

編集:通常、ユーザーはこの値を Web サイトに入力します。レポート テーブルからスクリプトを取得したデータベースにのみアクセスできます。また、C# からこの変数を初期化する方法を知りたいです。

EIDT2:これを例に取りました ( Oracle SQL Developer で変数を使用するにはどうすればよいですか? )。できます。

variable v_count number;
variable v_emp_id number;
exec :v_emp_id := 1234;
exec select count(1) into :v_count from emp;
select *
  from emp
 where empno = :v_emp_id
exec print :v_count;

私のコード:

    declare
    variable DA$$ VARCHAR2(80);
    variable gr_id$$ number;
    begin 
    exec :DA$$ := to_date('2011-09-13 09:00:00', 'YYYY-MM-DD HH24:MI:SS');
    exec :gr_id$$ := '1341';
BEGIN

そしてステートメントで:

   WITH
    TIME_DATA  as ( select $$D:=:DA$$ td from dual),

    GROUP_INFO as (select $$N:=:GR_ID$$ gr_id_number from dual),

 ....
END;

しかし、まだこれを持っています

 Bind Variable "DA$$" is NOT DECLARED
anonymous block completed

これも何も変わらない

exec :DA$$ := '2011-09-13 09:00:00';

DA$$ は trunc() で使用されているため、日付だと思いDA = trunc(td, 'MM')) ます。 Run Statement(trl+Enter) を選択すると、Sql Developer はバインド変数の入力を提案しますが、日付の入力方法がわかりません。

EDIT3:最後に、Declare、Begin、End なしでこれを行うと、機能します:

    variable DA$$ VARCHAR2(80);
    variable gr_id$$ number; 
    exec :DA$$ := to_date('2011-09-13 09:00:00', 'YYYY-MM-DD HH24:MI:SS');
    exec  DBMS_OUTPUT.PUT_LINE(:DA$$);    
    exec :gr_id$$ := '1341';
    with
    TIME_DATA  as ( select $$D:=DA$$; td from dual),
    GROUP_INFO as (select $$N:=:GR_ID$$ gr_id_number from dual),
...
4

1 に答える 1