powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Процедура не выводит результат
16 сообщений из 16, страница 1 из 1
Процедура не выводит результат
    #39834318
koo3mee4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста что не так? Процедура с селектом не выводит результат. Но если отдельно выполнить запрос, то работает.
Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
create or alter procedure RES_CITOLOG
(
  PROTOCOLID type of column TREATPLACE.PROTOCOLID,
  CODEPARAMS type of column PARAMSINFO.CODEPARAMS,
  ORGANID type of column PARAMSINFO.ORGANID,
  TREATCODE type of column TREAT.TREATCODE
)
returns
(
  SPOSOB type of column PARAMSINFO.VALUETEXT
)
as
begin
for
	select
 IIF(coalesce(tp.dirid,0)>0, (select distinct
										IIF(p.organid=14874,
										(select v1.valuetext
										from treat t
										left join clrefdet crd on t.treatcode=crd.rtreatcode and crd.schid=502001397 and crd.organid=14874
										left join clreferrals cr on crd.refid=cr.refid
										left join stat_direction sd on cr.dirid=sd.sdid
										left join treatplace tp1 on sd.sdid=tp1.dirid and tp1.placeid=502000472 and cr.dcode=tp1.dcode
										left join (select valuetext, protocolid from paramsinfo where codeparams=502038627 and ver_no=0) v1 on tp1.protocolid=v1.protocolid
										where t.treatcode=:treatcode),
										IIF(p.organid=14876,
										(select v1.valuetext
										from treat t
										left join clrefdet crd on t.treatcode=crd.rtreatcode and crd.schid=502001397 and crd.organid=14876
										left join clreferrals cr on crd.refid=cr.refid
										left join stat_direction sd on cr.dirid=sd.sdid
										left join treatplace tp1 on sd.sdid=tp1.dirid and tp1.placeid=502000472 and cr.dcode=tp1.dcode
										left join (select valuetext, protocolid from paramsinfo where codeparams=502038650 and ver_no=0) v1 on tp1.protocolid=v1.protocolid
										where t.treatcode=:treatcode),''))
										from paramsinfo p
										where p.codeparams=:codeparams and p.organid=:organid and p.protocolid=:protocolid),
	(select distinct
										IIF(p.organid=14874,
										(select v1.valuetext
										from treat t
										left join clrefdet crd on t.treatcode=crd.rtreatcode and crd.schid=502001397 and crd.organid=14874
										left join treat t1 on crd.treatcode=t1.treatcode
										left join treatplace tp1 on t1.treatcode=tp1.treatcode and tp1.placeid=502000472
										left join (select valuetext, protocolid from paramsinfo where codeparams=502038627 and ver_no=0) v1 on tp1.protocolid=v1.protocolid
										where t.treatcode=:treatcode),
										IIF(p.organid=14876,
										(select v1.valuetext
										from treat t
										left join clrefdet crd on t.treatcode=crd.rtreatcode and crd.schid=502001397 and crd.organid=14876
										left join treat t1 on crd.treatcode=t1.treatcode
										left join treatplace tp1 on t1.treatcode=tp1.treatcode and tp1.placeid=502000472
										left join (select valuetext, protocolid from paramsinfo where codeparams=502038650 and ver_no=0) v1 on tp1.protocolid=v1.protocolid
										where t.treatcode=:treatcode),''))
										from paramsinfo p
										where p.codeparams=:codeparams and p.organid=:organid and p.protocolid=:protocolid))


	from treatplace tp
	where tp.protocolid=:protocolid
	into :SPOSOB
  do
  suspend;
end


Модератор: Пользуйся тегом SRC.
И форматируй правильно, тогда и помочь захотят.
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834325
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koo3mee4,

в таком виде даже смотреть не хочется. Надо было текст скрипта оформить в тег [src]
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834333
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koo3mee4Процедура с селектом не выводит результат. Но если отдельно выполнить запрос, то работает.

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

да я думаю и сам запрос можно было бы написать гораздо короче. Этот читать не возможно
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834341
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для начала неплохо бы заменить свои цепочки IIF на CASE
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834343
koo3mee4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Менял не помогло
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834346
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.07.2019 13:10, koo3mee4 пишет:
> Менял не помогло

имхо, тут программист нужен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834348
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koo3mee4,

оно и не должно было помочь. Просто сделает эту фигню в 2 экрана более читаемой.

Какая версия Firebird?
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834349
koo3mee4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

3,0
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834356
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koo3mee4,

это уже хорошо. Значит мутные подзапросы вроде
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
(select v1.valuetext
from treat t
left join clrefdet crd on t.treatcode=crd.rtreatcode and crd.schid=502001397 and crd.organid=14874
left join clreferrals cr on crd.refid=cr.refid
left join stat_direction sd on cr.dirid=sd.sdid
left join treatplace tp1 on sd.sdid=tp1.dirid and tp1.placeid=502000472 and cr.dcode=tp1.dcode
left join (select valuetext, protocolid from paramsinfo where codeparams=502038627 and ver_no=0) v1 on tp1.protocolid=v1.protocolid
where t.treatcode=:treatcode),


можно выделить в PSQL подфункции
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834392
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВероятнее всего отдельно выполняется несколько другой запрос.
а я ставлю на "не те" параметры (которые передаются в процедуру, и которые передаются в вырезанный из нее запрос).
Симонов Денисможно выделить в PSQL подфункции
это да. но мне вот тут вдруг подумалось, что процедурное мышление в SQL иногда вредит. К примеру, обычный Дельфи, С++ и т.д. программист привык повторяющийся код оформлять в процедуры и функции.
Далее, он пишет запросы. И в разных запросах есть обращение к одной таблице. И он думает - запросы разные, а обращение одно, дай я оформлю обращение в процедуру. И потом использует эту процедуру в тех запросах. И вдруг наступают тормоза...
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834430
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvпроцедурное мышление в SQL иногда вредит.

Это не "процедурное мышление", это "отсутствие мышления".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834505
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда я вижу что все до единого соединения в многоэтажной этажерке left, я дальше не вникаю. Просто потому, что по жизни такой запрос нужен один на 1000. А в остальных 999 случаях это говорит о необходимости археологических раскопок в консерватории. Что мне уже скучно.
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834513
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка,

я тебе скажу чуть иначе. многоэтажки left join у меня вызывают сомнения, что человеку нужен именно left join. И запрос скорее построен автоматическим построителем, чем вручную.
И когда задаешь вопрос типа, а что, и правда в treat есть записи, которым нет соответствия в clrefdet, в ответ либо молчание, либо мычание.

В этом случае надо дать по башке книгой Дейта, конкретно главой 19 "Отсутствующая информация"
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834545
koo3mee4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvСтарый плюшевый мишка,

И запрос скорее построен автоматическим построителем, чем вручную.
И когда задаешь вопрос типа, а что, и правда в treat есть записи, которым нет соответствия в clrefdet, в ответ либо молчание, либо мычание.



Запрос построен вручную.
Да в treat есть записи, которым нет соответствия в clrefdet.
Просто чтобы понять логику:
Treat - таблица приемов врачей.
Clreferrals - таблица направлений (в каком приеме какое направление)
Clrefdet - детальная таблица направлений, на какие именно анализы (услуги)
Отсюда, не на всех приемах врач делает направление на анализы, соответственно не всегда будет treatcode в таблицах clreferrals и clrefdet. Если есть направление в приеме, то заполняется treatcode в обоих таблицах направлений.
Если приём стационарный то заполняется поле dirid в таблице treat и clreferrals. Treatcode заполняется только в таблице clreferrals, в clrefdet нет. А связка между clreferrals и clrefdet происходит по полю refid.
...
Рейтинг: 0 / 0
Процедура не выводит результат
    #39834546
koo3mee4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koo3mee4Если приём стационарный то заполняется поле dirid в таблице treat и clreferrals. Treatcode заполняется только в таблице clreferrals, в clrefdet нет. А связка между clreferrals и clrefdet происходит по полю refid.
Описался. Treatcode вообще не записывается ни в clreferrals ни в clrefdet. Связь между treat и clreferrals производится по полю dirid. А между clreferrals и clrefdet по полю refid
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Процедура не выводит результат
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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