powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / select from select
8 сообщений из 8, страница 1 из 1
select from select
    #32406997
Guest20040212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASE 12.5
Подскажите пож-та, как можно сделать выборку из набора данных или из выборки. Например:
SELECT * FROM (EXECUTE sp_Myproc)
или
SELECT * FROM (select * from Mytable)
...
Рейтинг: 0 / 0
select from select
    #32407153
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ASE не поддерживает подзапросы (что меня удивляет), то тут кроме как временными таблицами других вариантов и не предложишь. Насколько я помню, если с подзапроса требуется получить только одно поле, то в ASE сработает такая конструкция:
Код: plaintext
1.
2.
SELECT Field1, 
  (SELECT Field2 FROM Table2 WHERE Field1 = Table1.Field1) AS Field2
FROM Table1


Иначе только так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT *
INTO #T
FROM Table2

SELECT *
FROM Table1, #T t
WHERE Table1.Field1=t.Field1

DROP TABLE #T
...
Рейтинг: 0 / 0
select from select
    #32407191
Guest20040212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASE поддерживает подзапросы, только вот после FROM - ???

Хорошо, как бы вы посоветовали сделать:

У меня есть

create procedure myproc_1
as
begin
select 1 into #mytable
end


create procedure myproc_2
as
begin
exec myproc_1
select * from #mytable
end

Мне нужно во торой процедуре выбрать результат работы первой, только вот
вторая процедура даже не хочет создаваться, пишет что не существует #mytable,
поэтому мне и надо что-то вроде

SELECT * FROM (EXECUTE sp_Myproc)
или
SELECT * FROM (select * from Mytable)
...
Рейтинг: 0 / 0
select from select
    #32407305
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create procedure myproc_1 
as 
begin 
  insert into #mytable (Field1)
    select  1 
    from Dummy
end 

create procedure myproc_2 
as 
begin 
  create table #mytable (Field1 int)

  exec myproc_1 

  select * 
  from #mytable

  drop table #mytable
end 


ну а насчет почему вторая процедура не создается и других вопросов ответить Вам не могу, я ASE в глаза не видел, все что я о нем знаю, реально сводиться к его совместимости старых версий с MSSQL 6.5, и то в 6.5 много всего было добавлено, чего нет в ASE.
...
Рейтинг: 0 / 0
select from select
    #32407788
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
create procedure myproc_2
as
begin
exec myproc_1
select * from #mytable
end

Интересно а ASA этот финт прокатывает?
Как сервер может создать процедуру в которой идет обращение к несуществующим объектам БД?
В ASE надо делать так:

select cnt = 1 into #mytable
go
create procedure myproc_2
as
begin
exec myproc_1
select * from #mytable
end
go
drop table #mytable
go

Кстати этот вариант все равно не прокатит - после окончания работы myproc_1
таблица #mytable будет уничтожена сервером и myproc_2 вылетит с ошибкой, т.е. надо примерно так:

create procedure myproc_1
as
begin
select cnt = 1 into #mytable
exec myproc_2
end
go
select cnt = 1 into #mytable
go
create procedure myproc_2
as
begin
select * from #mytable
end
go
drop table #mytable
go

И вызывать соответственно myproc_1.
...
Рейтинг: 0 / 0
select from select
    #32407822
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИнтересно а ASA этот финт прокатывает?
Как сервер может создать процедуру в которой идет обращение к несуществующим объектам БД?
В ASA жестко контролируются на существования обьектов только представления (и это правильно). Процедуры и функции компилируются при старте сервера при первом к ним обращении, соотвествующе в них можно обращаться к любым обьектам БД, если их не существует, то во время их выполнения будет сгенерирована ошибка. Это же касается даже переменных, так как в ASA есть глобальные сессионные переменные. В этом есть и плохие стороны - при компиляции нет контроля и любая ошибка в имени обьекта/переменной будет выявлена только на этапе выполнения. Но хороших сторон больше - возможность создавать и удалять глобальные переменные, видимость темповых таблиц из дочерних ХП, даже если с триггера вызвать ХП, то она увидит таблицы Inserted и Deleted. Включаем сюда до кучи глобальные постоянные сессионные таблицы (их не нужно каждый раз создавать при запуске сервера) и возможность обрабатывать подключения и отключения сессий, и получаем очень неплохие возможности по реализации любой сложности логики силами самой СУБД. Если интересно сравнить возможности ASE и ASA, могу порекомендовать почитать последний номер рассылки по ASA, там как раз все это подробно расписано прямо на примерах.
...
Рейтинг: 0 / 0
select from select
    #32416054
707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
707
Гость
Что-то все мудрят...
А что, такое не годится ?

SELECT ........,
(SELECT .... FROM ......),
...........
FROM ...........

Т.е. обычный подзапрос.
...
Рейтинг: 0 / 0
select from select
    #32424288
Sasha11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в ASE 12.5.1 можно делать "select ... from select ..."
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / select from select
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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