Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / процедура в запросе / 8 сообщений из 8, страница 1 из 1
20.05.2010, 11:38
    #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
20.05.2010, 12:10
    #36638604
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
процедура в запросе
Тут не раз и не два это уже обсуждалось. Кажется даже в FAQ есть. Смотри, ищи.

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

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

была мысль еще выгружать сначла эти id и их значения в временную таблицу
и затем уже выполнять запрос заменя значениями из темптаблицы
...
Рейтинг: 0 / 0
20.05.2010, 12:19
    #36638646
процедура в запросе
MasterZivНу а конкретно это я бы вообще не стал делать в БД.
И не в процедуре. Делал бы хитрее.
а как?
...
Рейтинг: 0 / 0
20.05.2010, 14:52
    #36639200
Dmitry..
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
процедура в запросе
можно создать еще одно поле в твоей таблице в котором триггером будет вычисляться это значение.
...
Рейтинг: 0 / 0
20.05.2010, 16:15
    #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
20.05.2010, 16:25
    #36639591
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
процедура в запросе
макс фактор пишет:
> а как?

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


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