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

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

Самогенерация SQL запроса [D5, IB6.x]


Soft ©   (2002-08-24 15:55:00) 

Привет всем.
Возможно ли как-то создать процедуру в IB6, которая сгенерирует SQL запрос из таблиц как стринговую переменную и запустит ее на выполнение? Если возможно простой пример, как это сделать.

Заранее благодарен.


Soft   (2002-08-26 20:09:00) [1]

Спасибо всем за ответы. А запрос SQL программа будет(должна) генерировать внутри исходя из собственных данных. Ака AI.


DmitryK   (2002-08-26 13:41:00) [2]

2Praco ©
> Работает в MSSQL, но не в IB.


Возможно и так, но вот, что пишет Soft © (25.08.02 00:15)


> Пробую сделать
> EXECUTE immediate "select * from table1";
>
> Вылазит ошибка Dynamic SQL Error
> SQL error code = -104
> Token unknown - line 1, char 8
> immediate
> Statement: EXECUTE immediate "select * from table1"


из чего я делаю вывод, что проблемы у него вовсе не с EXECUTE, а с immediate

кроме того, я кажется в начале не совсем уловил смысл вопроса и предложил вариант выполнения подготовленного в текстовой строке запроса. Насколько я улавливаю, в задаче надо выполнить запрос сохраненный в таблице.

Но вот чего я никак не пойму, какой именно запрос можно выбрать таким запросом select * from table1

Из какой строки, изкакого поля?????

в общем же случае схема должна быть такой

DECLARE @sqlstr varchar(255)
select @sqlstr=SQLFIELD from table1 where ID=1
EXEC (@sqlstr)

ну или примерно такой...


ivv   (2002-08-26 09:43:00) [3]

>>Еше вопрос, можно узнать названия команд Oracle lite и MSDE которые позволяют запускать DSQL. Формат их я прочитаю сам.

EXECUTE IMMEDIATE dynamic_string
[INTO {define_variable[, define_variable]... | record}]
[USING [IN | OUT | IN OUT] bind_argument
[, [IN | OUT | IN OUT] bind_argument]...];


Praco   (2002-08-26 09:20:00) [4]

DmitryK © (25.08.02 15:21)
Работает в MSSQL, но не в IB.


Polevi   (2002-08-25 18:40:00) [5]

EXECUTE
еще посмотри sp_executesql


Soft   (2002-08-25 17:04:00) [6]

А почему у меня не работает
EXECUTE immediate "select * from table1";

Она должна автоматически производить препроцессинг, запускать и уничтожать запрос из стринговой строки или из стринговой переменной.

Используемая IB WI-V6.0.1.6 Может это глюк данной версии? Поможет ли установка FireBird?

Еше вопрос, можно узнать названия команд Oracle lite и MSDE которые позволяют запускать DSQL. Формат их я прочитаю сам.


DmitryK   (2002-08-25 15:21:00) [7]

Возможно я конечно ошибаюсь, но EXEC - это вещь стандартная для SQL. Если это все-таки так, то следующий пример должен работать и в Итербазе

EXEC ("delete from "+@tablename+" where lastday<""1.1.1"" or lastday=firstday")

В данном примере происходит удаление строк в таблице заданной переменной @tablename, т.е. происходит формирование строки запроса непосредственно в коде процедуры (переменная @tablenameможет быть входной переменной процедуры).


Polevi   (2002-08-25 13:04:00) [8]

поставь себе MSDE и радуйся


Serge_D   (2002-08-25 12:10:00) [9]

Чуть не в тему, но уж больно вопрос интересный - авось да пригодится...
У большого и толстого Oracle есть маленький, рахитичный, но очень жизнеспособный (Windows 95/98/NT/2000, Windows CE / Pocket PC, Palm Computing Platform, EPOC) братец Oracle lite, которого, кстати, можно слить с официального сайта, если у тебя хороший канал и/или хватает терпения.
http://otn.oracle.com/docs/products/lite/doc_library/release501/readme.htm


Soft   (2002-08-25 03:16:00) [10]

Ладно на ты, так на ты.

Вот начну издалека. Если ты посмотришь мою анкету, то увидишь, что у меня хобби системы искуственного интеллекта. С SQL-лем я совсем недавно работаю и не знаю всех его наворотов. Так вот у меня есть несколько примеров чат-ботов. И я всего лишь хочу написать чат бот(это только пока для тренировки) по типу Алисы http://www.alicebot.org/Эта приблуда сделана на XML. А я хочу это сделать на SQL(может далее получится что-то путное). Для этого мне нужно возможность запускать SQL запросы, сгенерированные из таблиц, в которых лежат куски знаний(слова или что-то подобное).

Мне не нужно ничего навороченного, я хочу просто знать как запускать динамический SQL запрос, сгенерированый в серверной процедуре. Кстати Oracle это позволяет, но он слишком большой и толстый. Не может быть, чтобы это никто не делал.


Johnmen   (2002-08-25 00:27:00) [11]

Да-а-а-а-а...Чувствую, что глобально проблему не пойму...
М.б.начать с частностей ?
(опять ты "выкаешь" ... не надо...:-))


Soft   (2002-08-25 00:23:00) [12]

Сорри опять какой-то бред вышел.

Попробую рассказать часть проблеммы, которую я хочу решить. Нужно, чтоб SQL запрос генерил SQL запрос, который тоже генерит SQL запрос или возвращает полученные данные. Вот такая элементарная задача:)

PS
Пробую сделать данные не просто набором битов, а активными. Хотя полностью проблемму вы просто не поймете:((


Soft   (2002-08-25 00:15:00) [13]

Нужно запускать запрос полученный из поля таблицы в SQL процедуре

Пробую сделать
EXECUTE immediate "select * from table1";

Вылазит ошибка Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, char 8
immediate
Statement: EXECUTE immediate "select * from table1"

Это баг или я что-то не так делаю? Через него можно запучкать SQL запросы из переменной.


Johnmen   (2002-08-24 23:43:00) [14]

Вот я не понял ! Какое отношение имеет данная ссылка к решаемой проблеме ?
М.б.сформулируешь заново ? В чем проблема ? (предлагаю на ты - надо быть проще :-))))


Soft   (2002-08-24 22:41:00) [15]

To Johnmen
>Нельзя...
Плохо, однако такие проблеммы есть.

>Невозможно придумать проблему, которую нельзя решить, кроме как указанным способом !

Очень даже можно Е-технология http://www.airesearch.ru/modules.php?name=News&file=article&sid=100
Как ее решить другим способом, если вы такой крутой программист.

ЗЫ
Иногда проблеммы сложнее обычного грида с набором полей.


Johnmen   (2002-08-24 21:23:00) [16]

>Soft ©

Нельзя...
Невозможно придумать проблему, которую нельзя решить, кроме как указанным способом !


Soft   (2002-08-24 19:47:00) [17]

Я слышал(жаль не могу вспомнить где:(( ) что MSSql такое позволяет делать. А в программе это не очень удобно делать.

Точнее про проблемму. Есть язык Пролог(логическое программирование). В нем можно создавать программы внутри программы исходя из наборов данных. Я хотел проверить возможно ли это в SQL. Если бы получилось, очень многие вещи (data mining) было бы реализовать очень просто.


Desdechado   (2002-08-24 17:46:00) [18]

вероятно, нет. Это связано с тем, что код ХП прекомпилируемый, поэтому корректность динамически создаваемых запросов проверить нельзя. Хотя я читал, что в будущем в ИБ что-то такое будет.

Можно сделать так. Сгенерить текст запроса а ХП, вернуть его в программу как текстовый ответ, а оттуда запустить.


Наверх

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