Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.16;
Скачать: CL | DM;

Вниз

Самогенерация SQL запроса   Найти похожие ветки 

 
Soft ©   (2002-08-24 15:55) [0]

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

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


 
Desdechado ©   (2002-08-24 17:46) [1]

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

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


 
Soft ©   (2002-08-24 19:47) [2]

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

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


 
Johnmen ©   (2002-08-24 21:23) [3]

>Soft ©

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


 
Soft ©   (2002-08-24 22:41) [4]

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

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

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

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


 
Johnmen ©   (2002-08-24 23:43) [5]

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


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

Нужно запускать запрос полученный из поля таблицы в 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 запросы из переменной.


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

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

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

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


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

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


 
Soft ©   (2002-08-25 03:16) [9]

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

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

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


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

Чуть не в тему, но уж больно вопрос интересный - авось да пригодится...
У большого и толстого 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


 
Polevi ©   (2002-08-25 13:04) [11]

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


 
DmitryK ©   (2002-08-25 15:21) [12]

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

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

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



 
Soft ©   (2002-08-25 17:04) [13]

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

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

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

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


 
Polevi ©   (2002-08-25 18:40) [14]

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


 
Praco ©   (2002-08-26 09:20) [15]

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


 
ivv ©   (2002-08-26 09:43) [16]

>>Еше вопрос, можно узнать названия команд 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]...];


 
DmitryK ©   (2002-08-26 13:41) [17]

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)

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


 
Soft ©   (2002-08-26 20:09) [18]

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



Страницы: 1 вся ветка

Текущий архив: 2002.09.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
7-50995
wistler
2002-07-04 22:56
2002.09.16
Программирование модема.


14-50939
Milz
2002-08-21 14:30
2002.09.16
Подскажите алгоритмик


1-50746
vasya_dvc
2002-09-05 22:28
2002.09.16
Програмный фильтр низких частот


3-50593
Lego
2002-08-23 07:22
2002.09.16
Обнуление autoincrement поля... как ?


14-50909
Neox
2002-08-19 17:20
2002.09.16
литература по ADO