Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Execute block / 5 сообщений из 5, страница 1 из 1
20.05.2019, 12:27
    #39815298
ECMAScriptNinja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Execute block
Появилась необходимость переписать запрос под Execute block.
Необходимо вывести все записи из указанной таблицы, но если не указывать условие WHERE то получается ошибка multiple rows.
По ошибке понятно что оно не может весь результат впихнуть в одну строку, должно ведь каждый результат выводить в отдельную строку.... или у меня не правильное представление о SUSPEND.
Собственно сам запрос(упростил и подписал для приятности глаз как мог):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
execute block
returns(ID_ABON integer,ID_CATEGORY integer, DATE_NATH date, DATE_KON date, status integer,PRIM varchar(200),DATE_VVOD date, KOD_OP integer, STAT_COMMENT integer,
N_CATEGORY varchar(100), ADRES varchar(100),N_COMMENT varchar(100), NOM_ABON varchar(15),KOL_JIL integer, kol_lg integer, DATE_DOST date, NAIM_SS varchar(100))
as
begin
--Обнуляем
ID_ABON = 0; ID_CATEGORY=0;DATE_NATH=null;DATE_KON=null;status=0; PRIM='';DATE_VVOD=null;KOD_OP=0; STAT_COMMENT=0;N_CATEGORY=''; ADRES=''; N_COMMENT='';NOM_ABON='';
KOL_JIL=0;kol_lg=0;DATE_DOST=null;NAIM_SS='';


--Что выбрать
select  g.id_abon, g.id_category, g.date_nath, g.date_kon, g.status, g.prim, g.date_vvod, g.kod_op, g.stat_comment, s.naim,
(select p.adres from bal_pc_adres(g.id_abon) p), k.naim_kod, sa.nom_abon, sa.kol_jil, sa.kol_lg,
(select max(z.date_dost) from bal_pr_zajvka z where z.id_abon=g.id_abon and coalesce(z.pr_ned,0)=0), bs.naim

--Откуда выбрать
from bal_gurnal_sop g
inner join spr_sop s on (s.id=g.id_category)
inner join bal_spr_abon sa on (sa.id=g.id_abon)
inner join sp_punkt sp on (sp.kod_punkt=sa.kod_punkt)
left outer join bal_spr_ss bs on (bs.kod=sp.kod_ss)
left outer join klsfct k on (k.kod=77) and k.kod_hc=g.stat_comment

--where g.id_abon = 19   когда задаешь к примеру данное условие(гарантированно будет 1 уникальное поле) отрабатывает без проблем

--Присваиваем
into :ID_ABON,:ID_CATEGORY,:DATE_NATH,:DATE_KON,:status,:PRIM,:DATE_VVOD,:KOD_OP,:STAT_COMMENT,:n_category,:ADRES,:N_COMMENT,:NOM_ABON,
:KOL_JIL,:kol_lg,:DATE_DOST,:NAIM_SS;
suspend;

end


на выходе примерно должно получиться Как-то так:
id_abon date
19 20.01.2019
1256 05.11.2015
658 14.06.2018

Но выкидывает ошибку multiple rows . Что-то я упустил, может подскажете?

И пользуясь случаем. Понадобилось добавить второй ключ к таблице - используя "ленивый режим" при создании нового поля и указывая что это будет ключем ругается что ключ имеется уже. Запросом тоже не получается(пример запроса не могу дать т.к.
пытался в пятницу добавить и ввиду того что не получалось не сохранил).
Может так на вскидку подскажете!
...
Рейтинг: 0 / 0
20.05.2019, 12:37
    #39815303
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Execute block
Код: sql
1.
2.
FOR SELECT ... FROM ... INTO .... 
  DO SUSPEND;
...
Рейтинг: 0 / 0
20.05.2019, 12:45
    #39815306
ECMAScriptNinja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Execute block
Дорогой вы мой человек... Благодарю большое!!!!
hvlad
Код: sql
1.
2.
FOR SELECT ... FROM ... INTO .... 
  DO SUSPEND;



Насчет второго ключа не подскажете?(1 ключ есть, второй добавить не могу).....
...
Рейтинг: 0 / 0
20.05.2019, 12:48
    #39815308
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Execute block
ECMAScriptNinja,

какой ещё второй ключ? Если речь про ПК, то он может быть только один, но можно добавить UNIQUE.
Если же надо добавить второй столбец в PK, то сначала надо удалить предыдущий ключ
...
Рейтинг: 0 / 0
20.05.2019, 12:51
    #39815312
ECMAScriptNinja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Execute block
Симонов ДенисECMAScriptNinja,

какой ещё второй ключ? Если речь про ПК, то он может быть только один, но можно добавить UNIQUE.
Если же надо добавить второй столбец в PK, то сначала надо удалить предыдущий ключ

Хм....понял благодарю! да,я про PK

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


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