Форум: "Базы";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
ВнизКак получить перечень параметров из запроса на PL SQL? Найти похожие ветки
← →
serg128 (2004-07-02 14:06) [0]Т.е. есть запрос типа:
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]);
то он мне возвращает набор полей, а параметры не возвращает.
Как мне можно вернуть параметры? (запрос динамический, т.е. кол-во и имена параметров предусмотреть невозможно).
← →
Vlad © (2004-07-02 14:11) [1]Variables - это не параметры, а Bind переменные, которые подставляются в параметр. Соответственно их нужно сначала объявить, потом инициализировать.
Методы DeclareVariable и SetVariable
Если же тебя интересует именно список параметров, то только парсинг текста тебе поможет.
← →
Reindeer Moss Eater © (2004-07-02 14:42) [2]К PL/SQL вопрос не имеет никакого отношения.
А что, в DOA у OracleQuery нет свойства Params?
← →
Vlad © (2004-07-02 15:01) [3]
> Reindeer Moss Eater © (02.07.04 14:42) [2]
> А что, в DOA у OracleQuery нет свойства Params?
Нету. Там есть Variables: TVariables. Обявление и инициализация происходит методами, к-рые я указал выше, либо в IDE Variables Editor"е
← →
Reindeer Moss Eater © (2004-07-02 15:03) [4]Это переменные PL/SQL блока или какие переменные?
Или это просто фирменный термин для параметров в параметрических SQL запросах?
← →
Reindeer Moss Eater © (2004-07-02 15:07) [5]Если же тебя интересует именно список параметров, то только парсинг текста тебе поможет.
Вау. Как же хорошо, что мы выбрали именно ODAC.
Я представляю себе кошмар при парсинге чего-то вроде этого:
select to_char(date_field,"dd.mm.yyyy HH24:MI") as where some_field = :some_value
← →
Vlad © (2004-07-02 15:12) [6]
> Reindeer Moss Eater © (02.07.04 15:03) [4]
> Это переменные PL/SQL блока или какие переменные?
Это то, что в Оракле называется Bind Variables
> Я представляю себе кошмар при парсинге чего-то вроде этого:
Фактически, необходимости парсинга возникать не должно.
Думаю, что это какие-то исключительные ситуации, ведь даже если SQL формируешь динамически, то в процессе знаешь какие переменные и куда ты там подставляешь.
← →
Reindeer Moss Eater © (2004-07-02 15:15) [7]ведь даже если SQL формируешь динамически, то в процессе знаешь какие переменные и куда ты там подставляешь.
Ну не скажи.
"Динамически" может означать справочник запросов в которую Вася Пупкин (пользователь программы, а не её создатель) пишет свои запросы.
← →
Vlad © (2004-07-02 15:33) [8]
> Reindeer Moss Eater © (02.07.04 15:15) [7]
в DOA-шном Variables Editor"е есть такая кнопка "Scan SQL", по этой кнопке он парсит текст и выдает тебе список переменных, остается только вручную им тип проставить.
Это я к тому говорю, что парсит же как-то и не валится на твоем примере. Значит и мы можем распарсить.
← →
serg128 (2004-07-02 16:23) [9]А как этот scanSQL вызвать никто не знает?
← →
Reindeer Moss Eater © (2004-07-02 16:29) [10]Возможно он вообще реализован в DesignTime пакете.
Так что боюсь что никак.
← →
Petr V.Abramov (2004-07-02 17:39) [11]FindVariables d юните Oracle
> Я представляю себе кошмар при парсинге
52 строчки
← →
Курдль (2004-07-03 01:24) [12]В DOA есть такая фишка -
OracleDataSet.DeclareQueryVariables(OracleQuery);
иOracleDataSet.SetQueryVariables(OracleQuery);
В результате все переменные объявляются и устанавливаются в соответствии с полями набора данных OracleDataSet.
НО! При этом в предложении OracleQuery.SQL.Text все переменные должны иметь место (типа ...:VAR_NAME);
Думаю, что если после этого пройтись циклом
for i := 0 to OracleQuery.Variables.Count - 1 do
begin
...
end;
то все получится (самому лень, но результат интересен) :)
← →
Курдль © (2004-07-05 15:15) [13]
> serg128
Где отчет? Интересно же! :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.029 c