Форум: "Базы";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Внизselect ..... from .... where name in (........ Найти похожие ветки
← →
denis24 (2005-02-08 16:39) [0]Как в данный запрос подать строку "111","222222","333"
если есть стркока "1111,22222,33333" ну и stringlist c этими итемами например?
← →
Reindeer Moss Eater © (2005-02-08 16:42) [1]Никак.
Если только макросом. Если он поддерживается.
← →
stone © (2005-02-08 16:45) [2]Не знаю поддерживает ли данная версия интербэйза UDF, но для MSSQL я решил такую задачу именно при помощи UDF.
← →
denis24 (2005-02-08 16:46) [3]fib 1.5
а как макросом?
← →
stud © (2005-02-08 16:53) [4]execute statment
← →
denis24 (2005-02-08 17:09) [5]stud © (08.02.05 16:53) [4]
что это?
← →
stud © (2005-02-08 17:26) [6]в фб 1,5 создаеш процедуру и пишеш
execute statment "select * from where ppp in "stroka"........."
stroka твои значения например
← →
Desdechado © (2005-02-08 17:31) [7]это команда в хост-языке хранимых процедур FB 1.5
← →
denis24 (2005-02-08 18:44) [8]Создал процедуру
execute statment "delete from tbl1 where name not in ("||list_of_name||")";
Входной параметр list_of_name
Теперь просто из програмы передавать сроку вида "aaa,bbb,ccc"?
← →
Desdechado © (2005-02-08 19:29) [9]а попробовать слабо?
← →
denis24 (2005-02-09 10:22) [10]не слабо,
пробовал.
Передаю параметр
pFIBStoredProc1.ParamByName ("list_of_name").Asstring:=aaa,bbb,ccc";
получаю
"Dynamic SQlError code=104.Unexpected end of command"
← →
Desdechado © (2005-02-09 10:46) [11]а тебе не кажется, что строки необходимо как-нибудь в кавычки брать, что ли. Каждую, через запятую...
← →
stud © (2005-02-09 11:28) [12]в зависимости от типа параметров они заключаются в кавычки либо нет. если параметр сторковый, то должна формироваться строка вида
""aaa","bbb","ccc",...."
← →
Reindeer Moss Eater © (2005-02-09 11:47) [13]С кавычками или без - нет никакой разницы.
Для запроса where name in :parameter
Это не пройдет.
Параметр будет интерпретирован как одно значение (одна единственная альтернатива для IN)
← →
Desdechado © (2005-02-09 12:19) [14]2 Reindeer Moss Eater © (09.02.05 11:47) [13]
речь шла об execute statement, а не о параметрическом запросе
← →
stud © (2005-02-09 12:19) [15]вот работающий код
for execute statement "select id from uslugi where id in ("||:par||")" into :ii do
suspend;
в psr передается строка 500,600 на выходе имеем нужный результат
← →
Danilka © (2005-02-09 12:32) [16]Динамический скуль в этом случае как-то некрасиво, на мой взгляд. :)
Я как-то подобное делал, на больших списках получалось заметно медленнее, чем парсить параметры и в цикле по каждому параметру отдельный запрос исполнять. То-есть, та-же процедура серверная, которой передается в качестве строкового параметра список через какой-нибудь разделитель, и которая исполняет execute statement будет медленнее, чем если в теле этой процедуры распарсить список и цикл устроить.
← →
Reindeer Moss Eater © (2005-02-09 12:35) [17]О да. Согласен.
"in" это конечно красиво и элегантно, но как правило медленнее.
← →
denis24 (2005-02-09 13:47) [18]А как например парсит строку если нужно выполнить запрос вида
delete ...from ...where name not in("aa","bb","cc")
Если парсить то в цикле выполнять запрос
delete ..from where name<>"aa"
. "bb"
. "cc"
Так он удалит лишнее.
Нужно одним запросом.
В таком случае только execute statement
← →
Reindeer Moss Eater © (2005-02-09 14:24) [19]Тебе же говорят.
Цикл нужен.
на каждой итерации одинаковый селект с одним из значений из списка
← →
Digitman © (2005-02-09 14:37) [20]
> А как например парсит строку
нормально "парсит".
> Так он удалит лишнее
а нафига цикл ?
разумеется, лишнее удалит !
в случае с
delete ...from ...where name not in("aa","bb","cc")
ядро сервера для КАЖДОЙ записи из FROM-набора выполнит ее удаление лишь только в том случае, если значение ее поля NAME не равно НИ "aa", НИ "bb", НИ "cc" ..
← →
denis24 (2005-02-09 14:42) [21]To stud ©
Это синтаксис execute statement для возвраьа одной строки
А мне нужно удалить.
В примере по FB 1.5
Syntax 1
Executes <string> as SQL operation that does not return any data rows, viz. INSERT, UPDATE, DELETE,
EXECUTE PROCEDURE or any DDL statement except CREATE/DROP DATABASE.
EXECUTE STATEMENT <string>;
Example
CREATE PROCEDURE DynamicSampleOne (Pname VARCHAR(100))
AS
DECLARE VARIABLE Sql VARCHAR(1024);
DECLARE VARIABLE Par INT;
BEGIN
SELECT MIN(SomeField) FROM SomeTable INTO :Par;
Sql = ’EXECUTE PROCEDURE ’ || Pname || ’(’;
Sql = Sql || CAST(Par AS VARCHAR(20)) || ’)’;
EXECUTE STATEMENT Sql;
END
Я ничерта в нем не понял.
Мне нужно
delete from tbl1 where tbl1.name in ("aa","bb","cc")
Если не сильно надоел то посоветуй.
← →
denis24 (2005-02-09 14:57) [22]сорри
delete from tbl1 where tbl1.name NOT in ("aa","bb","cc")
← →
denis24 (2005-02-09 14:58) [23]сорри
delete from tbl1 where tbl1.name NOT in ("aa","bb","cc")
← →
Digitman © (2005-02-09 15:11) [24]
> Я ничерта в нем не понял
ЧЕГО ты не понял ?
ты там видишь SELECT-предложение ? тебе нужно не SELECT, а DELETE-предложение ? ну так и составь его по образу и подобию !
или ты вообще не шаришь в PSQL ?
← →
denis24 (2005-02-09 15:23) [25]наверно не шарю.Еще не сталкивался
где про него прочитать?
← →
stud © (2005-02-09 15:24) [26]
> Я ничерта в нем не понял.
скорее всего где-то синтаксическая ошибка, типа лишняя запятая, незакрытый апосторф
посмотри в каком виде параметр передается
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.04 c