Текущий архив: 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