Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить перечень параметров из запроса на PL\SQL? [D5]


serg128 ©   (2004-07-02 14:06:00) 

Т.е. есть запрос типа:
 select * from tab where id = :par1
Теперь, если я его разбираю при помощи OracleQuery (пакет DOA):
 OracleQuery->Describe();
 for(int i=0; i< OracleQuery->FieldCount(); i++)
   FieldList->Add(OracleQuery->FieldName(i));

 for(int i=0; i<OracleQuery->Variables->Count(); i++)
   FieldList->Add(OracleQuery->Variables->List->Items[i]);

то он мне возвращает набор полей, а параметры не возвращает.
Как мне можно вернуть параметры? (запрос динамический, т.е. кол-во и имена параметров предусмотреть невозможно).


Курдль   (2004-07-05 15:15:00) [1]


> serg128

Где отчет? Интересно же! :)


Курдль   (2004-07-03 01:24:00) [2]

В DOA есть такая фишка - OracleDataSet.DeclareQueryVariables(OracleQuery);
и
OracleDataSet.SetQueryVariables(OracleQuery);

В результате все переменные объявляются и устанавливаются в соответствии с полями набора данных OracleDataSet.
НО! При этом в предложении OracleQuery.SQL.Text все переменные должны иметь место (типа ...:VAR_NAME);
Думаю, что если после этого пройтись циклом


for i := 0 to OracleQuery.Variables.Count - 1 do
begin
  ...
end;


то все получится (самому лень, но результат интересен) :)


Petr V.Abramov   (2004-07-02 17:39:00) [3]

FindVariables d юните Oracle

> Я представляю себе кошмар при парсинге
 52 строчки


Reindeer Moss Eater   (2004-07-02 16:29:00) [4]

Возможно он вообще реализован в DesignTime пакете.
Так что боюсь что никак.


serg128   (2004-07-02 16:23:00) [5]

А как этот scanSQL вызвать никто не знает?


Vlad   (2004-07-02 15:33:00) [6]


> Reindeer Moss Eater ©   (02.07.04 15:15) [7]

в DOA-шном Variables Editor'е есть такая кнопка "Scan SQL", по этой кнопке он парсит текст и выдает тебе список переменных, остается только вручную им тип проставить.
Это я к тому говорю, что парсит же как-то и не валится на твоем примере. Значит и мы можем распарсить.


Reindeer Moss Eater   (2004-07-02 15:15:00) [7]

ведь даже если SQL формируешь динамически, то в процессе знаешь какие переменные и куда ты там подставляешь.

Ну не скажи.
"Динамически" может означать справочник запросов в которую Вася Пупкин (пользователь программы, а не её создатель) пишет свои запросы.


Vlad   (2004-07-02 15:12:00) [8]


> Reindeer Moss Eater ©   (02.07.04 15:03) [4]


> Это переменные PL/SQL блока или какие переменные?

Это то, что в Оракле называется Bind Variables


> Я представляю себе кошмар при парсинге чего-то вроде этого:

Фактически, необходимости парсинга возникать не должно.
Думаю, что это какие-то исключительные ситуации, ведь даже если SQL формируешь динамически, то в процессе знаешь какие переменные и куда ты там подставляешь.


Reindeer Moss Eater   (2004-07-02 15:07:00) [9]

Если же тебя интересует именно список параметров, то только парсинг текста тебе поможет.

Вау. Как же хорошо, что мы выбрали именно ODAC.
Я представляю себе кошмар при парсинге чего-то вроде этого:

select to_char(date_field,'dd.mm.yyyy HH24:MI') as where some_field = :some_value


Reindeer Moss Eater   (2004-07-02 15:03:00) [10]

Это переменные PL/SQL блока или какие переменные?
Или это просто фирменный термин для параметров в параметрических SQL запросах?


Vlad   (2004-07-02 15:01:00) [11]


> Reindeer Moss Eater ©   (02.07.04 14:42) [2]


> А что, в DOA у OracleQuery нет свойства Params?

Нету. Там есть Variables: TVariables. Обявление и инициализация происходит методами, к-рые я указал выше, либо в IDE Variables Editor'е


Reindeer Moss Eater   (2004-07-02 14:42:00) [12]

К PL/SQL вопрос не имеет никакого отношения.
А что, в DOA у OracleQuery нет свойства Params?


Vlad   (2004-07-02 14:11:00) [13]

Variables - это не параметры, а Bind переменные, которые подставляются в параметр. Соответственно их нужно сначала объявить, потом инициализировать.
Методы DeclareVariable и SetVariable
Если же тебя интересует именно список параметров, то только парсинг текста тебе поможет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо