Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.033 c
3-1089279204
Sir John
2004-07-08 13:33
2004.08.01
конфигурация ODBC


4-1087236670
Nomolos
2004-06-14 22:11
2004.08.01
Адресное пространство процесса


1-1089749097
Mazer
2004-07-14 00:04
2004.08.01
Есть ли StringGrid с возможностями, наподобие DBGridEh?


6-1085955124
VID
2004-05-31 02:12
2004.08.01
Точное определение момента, когда можно отправлять текст в сокет


3-1089286411
Vopros
2004-07-08 15:33
2004.08.01
Имя пользователя





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский