Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / СВЯЗАННЫЕ ПЕРЕМЕННЫЕ / 9 сообщений из 9, страница 1 из 1
10.06.2003, 04:36:45
    #32180067
DAV2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
Давно уже подозревал, что запросы нужно посылать серверу через связанные переменные. Намедни купил Кайта, прочитал и озаботился. Но вот как это сделать из приложения.

Раньше посылал запрос вида:
select * from TABLE where fileld1 = 123

а теперь надо

select * from TABLE where field1 = :field01

но вот как серверу передать, что field01 связанная переменная ?

если написать

begin
execute immediate 'select * from TABLE where field1 = :field01'
end;

ничего ведь в приложение не вернется !!!
самое интересное, что RAD, на котором я работаю это делает и генерит в профайлере следующее
name ":STK_TYPE_IDk0" type: float value: 3.00000
SELECT "STK_TYPE_ID","NOMINAL" FROM "T_STK_TYPE" WHERE "STK_TYPE_ID" = :STK_TYPE_IDk0
т.е. устанавливает перед запросом связанные переменые. Как ????
...
Рейтинг: 0 / 0
10.06.2003, 06:42:31
    #32180079
Silver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
А слово USING не пробовал?
...
Рейтинг: 0 / 0
10.06.2003, 06:44:10
    #32180080
DAV2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
USING ТО ЖЕ, ЧТО И EXECUTE IMMEDIATE
...
Рейтинг: 0 / 0
10.06.2003, 07:11:24
    #32180088
Silver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
RTFM!!!
5 seconds finding == Example:

EXECUTE IMMEDIATE
'DELETE FROM emp WHERE empno = :num' USING emp_id;

Source: Oracle9i SQL Reference

И НЕЧЕГО ТАК ОРАТЬ! :))
...
Рейтинг: 0 / 0
10.06.2003, 08:02:15
    #32180103
DAV2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
RTFM!!!
5 seconds finding == Example

прочитай еще раз, когда поймешь и подумаешь - можешь
написать, на этот раз толково
...
Рейтинг: 0 / 0
10.06.2003, 09:22:46
    #32180153
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
В PL/SQL связанные переменные ипользуются в динамическом SQL, в параметрезированных курсорах. В языках программирования есть специальные конструкции(методы, классы), которые позволяют использовать связанные переменные - это в каждом конкретном языке нужно смотреть как это реализуется.

А непосредственно в PL/SQL есть возможность использовать связанные переменные, обьявляемые с помощью VARIABLE:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
set serveroutput on;

variable  v_cnt_field NUMBER;
declare
v_cnt_table NUMBER;
begin
 :v_cnt_field:= 5 ;
 select 
   count(*) into v_cnt_table 
  from 
   all_tab_columns 
  where  column_id = :v_cnt_field;

dbms_output.put_line('Количество таблиц у которых есть не 
менее '||:v_cnt_field||' столбцов: '||v_cnt_table);
end;

SQLWKS> variable  v_cnt_field NUMBER;
SQLWKS> declare
      2 > v_cnt_table NUMBER;
      3 > begin
      4 >  :v_cnt_field:= 5 ;
      5 >  select 
      6 >    count(*) into v_cnt_table 
      7 >   from 
      8 >    all_tab_columns 
      9 >   where  column_id = :v_cnt_field;
     10 > 
     11 > dbms_output.put_line('Количество таблиц у которых есть не 
    12> менее '||:v_cnt_field||' столбцов: '||v_cnt_table);
     13 > end;
     14 > 
Statement processed.
Количество таблиц у которых есть не 
менее  5  столбцов:  1313 


Или так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
variable  v_cnt_table NUMBER;
variable  v_cnt_field NUMBER;

begin
 :v_cnt_field:= 5 ;
 select
    count(*) into :v_cnt_table 
  from 
   all_tab_columns 
  where
   column_id = :v_cnt_field;
end;
/

print v_cnt_table;

SQLWKS> variable  v_cnt_table NUMBER;
SQLWKS> variable  v_cnt_field NUMBER;
SQLWKS> 
SQLWKS> begin
      2 >  :v_cnt_field:= 5 ;
      3 >  select
      4 >     count(*) into :v_cnt_table 
      5 >   from 
      6 >    all_tab_columns 
      7 >   where
      8 >    column_id = :v_cnt_field;
      9 > end;
     10 > /
Statement processed.
SQLWKS> 
SQLWKS> print v_cnt_table;
V_CNT_TABLE
 ----------
 
       1313 
...
Рейтинг: 0 / 0
10.06.2003, 10:21:33
    #32180230
Eter Panji
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
Посмотри трейс, как это выглядит со стороны ORACLE
по моему OCI автоматически заменяет литералы на связанные переменные.
Или не OCI.
В любом случае клиентские интерфейсы регулярно этим озабачиваются.
...
Рейтинг: 0 / 0
10.06.2003, 14:54:20
    #32180613
Silver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
2 DAV2:
1) на каком RADe сидишь?

2) RTFM USING
Цитата:

>USING ...

>This clause specifies a list of input and/or output bind arguments . If you do not specify a parameter mode, it defaults to IN.

Иными словами случай тот же, что при использовании курсора с параметрами.
В твоем примере :field01 -- уже связанная (внешняя) переменная, а серверу для исполнения данного запроса требуется значение этой переменной. Соответственно значение и передается после USING, как это и было продемонстрировано в моем примере. Виноват, забыл подчеркнуть что передается значение. Но документацию читать все же следует :) Правильный текст должен быть такой:
begin
execute immediate 'select * from TABLE where field1 = :field01' USING 123
end;

PS на счет "USING ТО ЖЕ, ЧТО И EXECUTE IMMEDIATE" -- будем считать этот шуткой ...
...
Рейтинг: 0 / 0
11.06.2003, 04:10:46
    #32180923
DAV2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
СПАСИБО SOFTBUILDER'у за обстоятельный ответ, попробую, если получится с меня бутылка.

RAD у меня - Clarion for Windows 5.5
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / СВЯЗАННЫЕ ПЕРЕМЕННЫЕ / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]