Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.041 c
1-1109370176
Packman
2005-02-26 01:22
2005.03.13
Работа с компонентом.


14-1108640990
dr Tr0jan
2005-02-17 14:49
2005.03.13
Ремонт телевизора


8-1098777398
Slonco
2004-10-26 11:56
2005.03.13
Как отправить звуковую почту?


1-1109315695
Нуждающийся в помощи
2005-02-25 10:14
2005.03.13
Бинарные операции


14-1108887275
YurikGL
2005-02-20 11:14
2005.03.13
SY576





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский