powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / процедура в запросе
8 сообщений из 8, страница 1 из 1
процедура в запросе
    #36638488
возможно ли такое
ASE 11.9.2

создал процедуру которая по айди по цепочек выбирает из таблицы полностью имя
В таблице существует ссылочный ключ на себя («ребенок»->«родитель»)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create procedure object_name @t int, @n varchar( 100 ) output
as
loop1:
select @n=@n+(select 
          tbl_name.objname
    from 
          tbl_name
    where
          tbl_name.objid = @t)+"  "             


select @t = (select 
          tbl_name.parentid
    from 
          tbl_name
    where
          tbl_name.objid = @t)     


if @t >  0 
goto loop1

нужно эту процедуру засунуть в запрос
чтоб вместо id одного из полей
она сразу обрабатывала и возврашала значение этого id

примерно так
Код: plaintext
1.
2.
3.
4.
5.
SELECT                   
         object_name tbl_1.objid,
         tbl1.total
FROM
       tbl_1
...
Рейтинг: 0 / 0
процедура в запросе
    #36638604
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут не раз и не два это уже обсуждалось. Кажется даже в FAQ есть. Смотри, ищи.

Если коротко, то ответ "нельзя". Но есть нюансы.
...
Рейтинг: 0 / 0
процедура в запросе
    #36638612
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а конкретно это я бы вообще не стал делать в БД.
И не в процедуре. Делал бы хитрее.
...
Рейтинг: 0 / 0
процедура в запросе
    #36638638
мах фактор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
спасибо!

да в faq есть Как получить в процедуре набор данных, формируемый в другой процедуре.
щас почитаю

была мысль еще выгружать сначла эти id и их значения в временную таблицу
и затем уже выполнять запрос заменя значениями из темптаблицы
...
Рейтинг: 0 / 0
процедура в запросе
    #36638646
MasterZivНу а конкретно это я бы вообще не стал делать в БД.
И не в процедуре. Делал бы хитрее.
а как?
...
Рейтинг: 0 / 0
процедура в запросе
    #36639200
Dmitry..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно создать еще одно поле в твоей таблице в котором триггером будет вычисляться это значение.
...
Рейтинг: 0 / 0
процедура в запросе
    #36639544
сделал через курсоры и временную таблицу
мож криво но работает
примерно так
Код: plaintext
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.
64.
65.
66.
create procedure object_name @t int, @n varchar( 100 ) output
as
loop1:
select @n=@n+(select 
          tbl_name.objname
    from 
          tbl_name
    where
          tbl_name.objid = @t)+"  "             


select @t = (select 
          tbl_name.parentid
    from 
          tbl_name
    where
          tbl_name.objid = @t)     


if @t >  0 
goto loop1



declare object_cursor cursor for
SELECT tbl_1.objid  FROM  tbl_1
for read only

open object_cursor

declare @error int 
declare @mm int

select @error =  0 
select @mm =  0 

CREATE TABLE #temp (id int, idname varchar( 100 ))

while  1 = 1 
begin
      fetch object_cursor into @mm
      if @@sqlstatus =  2  break
      if @@sqlstatus =  1 
      begin
             select @error =  1 
             raiserror  20000  'Ошибка ...'
             break
      end

      declare @gg varchar( 100 )
      select @gg = ''
      execute object_name @mm, @n = @gg output

      insert into #temp values (@mm, @gg)

end

close object_cursor

SELECT                   
         #temp.idname,
         tbl_1.total
FROM
       tbl_1, #temp
WHERE 
         tbl_1.objid = #temp.id
...
Рейтинг: 0 / 0
процедура в запросе
    #36639591
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
макс фактор пишет:
> а как?

Я так понял, что там путь в дереве к элементу вычисляется от корня.
Если так, то в строку он может и не влезть.
Я бы делал расшивку дерева, хранил бы результат транзитивного
замыкания графа (матрицу достижимости по сути) и выдавал
бы оттуда таблицу по одной строке на узел в пути от корневого
узла к данному. На клиенте бы это обрабатывал, склеивая.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / процедура в запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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