![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
select ..... from .... where name in (........ [D6, IB6.x]
denis24 © (2005-02-08 16:39:00)Как в данный запрос подать строку '111','222222','333'
если есть стркока '1111,22222,33333' ну и stringlist c этими итемами например?
stud (2005-02-09 15:24:00) [1]
> Я ничерта в нем не понял.
скорее всего где-то синтаксическая ошибка, типа лишняя запятая, незакрытый апосторф
посмотри в каком виде параметр передается
denis24 (2005-02-09 15:23:00) [2]наверно не шарю.Еще не сталкивался
где про него прочитать?
Digitman (2005-02-09 15:11:00) [3]
> Я ничерта в нем не понял
ЧЕГО ты не понял ?
ты там видишь SELECT-предложение ? тебе нужно не SELECT, а DELETE-предложение ? ну так и составь его по образу и подобию !
или ты вообще не шаришь в PSQL ?
denis24 (2005-02-09 14:58:00) [4]сорри
delete from tbl1 where tbl1.name NOT in ('aa','bb','cc')
denis24 (2005-02-09 14:57:00) [5]сорри
delete from tbl1 where tbl1.name NOT in ('aa','bb','cc')
denis24 (2005-02-09 14:42:00) [6]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')
Если не сильно надоел то посоветуй.
Digitman (2005-02-09 14:37:00) [7]
> А как например парсит строку
нормально "парсит".
> Так он удалит лишнее
а нафига цикл ?
разумеется, лишнее удалит !
в случае с
delete ...from ...where name not in('aa','bb','cc')
ядро сервера для КАЖДОЙ записи из FROM-набора выполнит ее удаление лишь только в том случае, если значение ее поля NAME не равно НИ 'aa', НИ 'bb', НИ 'cc' ..
Reindeer Moss Eater (2005-02-09 14:24:00) [8]Тебе же говорят.
Цикл нужен.
на каждой итерации одинаковый селект с одним из значений из списка
denis24 (2005-02-09 13:47:00) [9]А как например парсит строку если нужно выполнить запрос вида
delete ...from ...where name not in('aa','bb','cc')
Если парсить то в цикле выполнять запрос
delete ..from where name<>'aa'
. 'bb'
. 'cc'
Так он удалит лишнее.
Нужно одним запросом.
В таком случае только execute statement
Reindeer Moss Eater (2005-02-09 12:35:00) [10]О да. Согласен.
"in" это конечно красиво и элегантно, но как правило медленнее.
Danilka (2005-02-09 12:32:00) [11]Динамический скуль в этом случае как-то некрасиво, на мой взгляд. :)
Я как-то подобное делал, на больших списках получалось заметно медленнее, чем парсить параметры и в цикле по каждому параметру отдельный запрос исполнять. То-есть, та-же процедура серверная, которой передается в качестве строкового параметра список через какой-нибудь разделитель, и которая исполняет execute statement будет медленнее, чем если в теле этой процедуры распарсить список и цикл устроить.
Desdechado (2005-02-09 12:19:00) [12]2 Reindeer Moss Eater © (09.02.05 11:47) [13]
речь шла об execute statement, а не о параметрическом запросе
stud (2005-02-09 12:19:00) [13]вот работающий код
for execute statement 'select id from uslugi where id in ('||:par||')' into :ii do
suspend;
в psr передается строка 500,600 на выходе имеем нужный результат
Reindeer Moss Eater (2005-02-09 11:47:00) [14]С кавычками или без - нет никакой разницы.
Для запроса where name in :parameter
Это не пройдет.
Параметр будет интерпретирован как одно значение (одна единственная альтернатива для IN)
stud (2005-02-09 11:28:00) [15]в зависимости от типа параметров они заключаются в кавычки либо нет. если параметр сторковый, то должна формироваться строка вида
''aaa','bbb','ccc',....'
Desdechado (2005-02-09 10:46:00) [16]а тебе не кажется, что строки необходимо как-нибудь в кавычки брать, что ли. Каждую, через запятую...
denis24 (2005-02-09 10:22:00) [17]не слабо,
пробовал.
Передаю параметр
pFIBStoredProc1.ParamByName ('list_of_name').Asstring:=aaa,bbb,ccc';
получаю
'Dynamic SQlError code=104.Unexpected end of command'
Desdechado (2005-02-08 19:29:00) [18]а попробовать слабо?
denis24 (2005-02-08 18:44:00) [19]Создал процедуру
execute statment 'delete from tbl1 where name not in ('||list_of_name||')';
Входной параметр list_of_name
Теперь просто из програмы передавать сроку вида 'aaa,bbb,ccc'?
Desdechado (2005-02-08 17:31:00) [20]это команда в хост-языке хранимых процедур FB 1.5