powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос массив в Select
18 сообщений из 18, страница 1 из 1
Вопрос массив в Select
    #39655348
Kadekin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Возникла задача. нужно в запросе Select вывести определенные значения через запятую. Т.е.
Я пытался сделать так
Код: sql
1.
2.
3.
Select *
From LIB$SKLAD
Where LIB$PARTI in (Spisok.txt)


Spisok.txt - тут через запятую перечислены значения в формате
1463-2-1
,1421-0-1
,1536-0-1
Эти значения меняются и количество их разное
Запрос который я привел не выводит данные.
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655394
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СУБД какая?
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655395
Kadekin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Добрый день. База Fierbierd 2.5

Модератор: Тема перенесена из форума "Другие СУБД".
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655404
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kadekin,

Давай DDL. Может в значениях Spisok.txt нужно кавычки ставить. На первый взгляд это не числа, а строки.
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655406
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

ему нужна процедура split. Где-то была здесь такая
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655413
Kadekin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,
В таблице SKLAD в ней есть поле "LIB$PARTI" Там внесены значения String, 8 символов.
такого формата 1922-0-1, 1254-0-1 и т.д.

И есть Memo в котором есть значения заполненные в таком формате
1463-2-1
,1421-0-1
,1536-0-1
количество может меняться.

Мне нужно сделать выборку в таблице SKLAD по номерам которые есть в MEMO.
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655414
Kadekin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,
На сколько я понимая, "процедура split" - разбор строки.
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655418
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KadekinДобрый день.
Возникла задача. нужно в запросе Select вывести определенные значения через запятую. Т.е.
Я пытался сделать так
Код: sql
1.
2.
3.
Select *
From LIB$SKLAD
Where LIB$PARTI in (Spisok.txt)



Spisok.txt - тут через запятую перечислены значения в формате
1463-2-1
,1421-0-1
,1536-0-1
Эти значения меняются и количество их разное
Запрос который я привел не выводит данные.
Ну если в лоб то как-то вот так
Код: sql
1.
2.
3.
Select *
From LIB$SKLAD
Where :Spisok containing LIB$PARTI


однако это не есть хорошо
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655422
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kadekin,

именно. Ищи в этом форуме (STRTOROWS, SPLIT ну и подобное).
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655466
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например 6686267
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655481
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KadekinВ таблице SKLAD в ней есть поле "LIB$PARTI" Там внесены значения String, 8 символов.

Уточни: значени Я или значени Е ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655525
AltHasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kadekin,

1) Загнать эти значения в таблицу, затем join с этой таблицей.
2) Отправить строку с запятыми на вход ХП, а там составить запрос расшепив на элементы.
3) На клиенте собирать в цикле для where 1=1 ... or LIB$PARTI contаining :VAR.
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655532
Kadekin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AltHasp,

Где то допустил ошибку
Данные поступают
1427-0-1
, 1431-1-1
, 0071-0-0
,
Сам запрос
Код: sql
1.
2.
3.
select LIB$PARTI, LIB$Sost
from LIB$SKLAD
where LIB$PARTI in (select LIB$PARTI from usr$split(:ids))



Сама процедура
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create procedure USR$SPLIT ( IDS varchar(1024))
returns ( ID varchar(1024))
as
declare variable I integer;
declare variable J integer = 1;
BEGIN
while (j < char_length(ids)) do
 begin
 i = position(',',:ids,j);
 id = substring(:ids from j for i-j);
 j = i+1;
 SUSPEND;
 end
END


При срабатывании - выводит почти всю базу .... а не те данные которые были переданы в процедуру.
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655554
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KadekinГде то допустил ошибку

Да в общем-то практически везде, начиная с постановки задачи. Процедура кривая, запрос
кривой, задача гораздо проще решается на клиенте.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655566
Kadekin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Ошибку нашел...
Дмитрий, в какую сторону капать??
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655568
Kadekin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kadekin,
Данные которые я буру для скрипта.. они находятся в Планнере.
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655571
Kadekin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kadekin,
И данные имею в планнере больше т.е. (1472-1-1_(350)) меня интересует значения до "_" или 8 символов т.к. вторая строка там записана (,1482-1-0_(0,52))
...
Рейтинг: 0 / 0
Вопрос массив в Select
    #39655596
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно вот так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
execute block returns (id integer, name varchar(128))
as
  declare procedure T returns (Id integer) as
  begin
    id = 1;
    suspend;
    id = 2;
    suspend;
  end

begin
  for select Rdb$Relations.* from T
  inner join Rdb$Relations on (Rdb$Relations.Rdb$Relation_Id = T.Id)
  as cursor C do
  begin
    :id = C.Rdb$Relation_Id;
    :name = C.Rdb$Relation_name;
    suspend;
  end
end


Процедуру T только написать правильно.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос массив в Select
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]