объявить переменные связывания в скрипте

У меня есть скрипт, который использует эти переменные

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

EDIT: Обычно пользователи вводят эти значения на веб-сайте, у меня есть доступ только к базе данных, где я получил скрипт из таблицы отчетов. Также я хочу знать, как инициализировать эти переменные из С#.

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),
...

person Lavandil    schedule 23.05.2014    source источник


Ответы (1)


Из С# вы можете сделать это:

// using Oracle.DataAccess.Client
using(OracleCommand command = new OracleCommand(commandText, dbConnection))
{
    command.CommandType = CommandType.Text;
    command.Parameters.Add("DA$$", OracleDbType.Int32, valueDA, ParameterDirection.Input);
    command.Parameters.Add("GR_ID$$", OracleDbType.Int32, valueGR_ID, ParameterDirection.Input);
}

Но просмотрите свой текст команды. Потому что вы, вероятно, столкнетесь с синтаксическими ошибками из-за "$$D:" и "$$N:"

person playful    schedule 23.05.2014