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

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

select ..... from .... where name in (........ [D6, IB6.x]


Страницы:   1 2

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


Страницы:   1 2

Наверх

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