powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
9 сообщений из 9, страница 1 из 1
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
    #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
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
    #32180079
Silver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А слово USING не пробовал?
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
    #32180080
DAV2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
USING ТО ЖЕ, ЧТО И EXECUTE IMMEDIATE
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
    #32180088
Silver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RTFM!!!
5 seconds finding == Example:

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

Source: Oracle9i SQL Reference

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

прочитай еще раз, когда поймешь и подумаешь - можешь
написать, на этот раз толково
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
    #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
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
    #32180230
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри трейс, как это выглядит со стороны ORACLE
по моему OCI автоматически заменяет литералы на связанные переменные.
Или не OCI.
В любом случае клиентские интерфейсы регулярно этим озабачиваются.
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
    #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
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ
    #32180923
DAV2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПАСИБО SOFTBUILDER'у за обстоятельный ответ, попробую, если получится с меня бутылка.

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


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