![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить перечень параметров из запроса на 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
Если же тебя интересует именно список параметров, то только парсинг текста тебе поможет.