Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];

Вниз

Набор данных как результат хранимой процедуры   Найти похожие ветки 

 
Bless   (2003-07-02 12:49) [0]

Есть хранимая процедура, которая набор данных.
Как к этому результирующему запросу обратиться?

Например, в другом запросе:
select * from MyStoredProc


 
Семен Сорокин   (2003-07-02 12:57) [1]

TStoredProc + F1


 
Smashich   (2003-07-02 13:18) [2]

хранимая процедура или функция?


 
MOA   (2003-07-02 13:34) [3]

Из запроса к процедуре никак. Можно к функции, если у Вас SQL2000.


 
Bless   (2003-07-02 15:38) [4]

:( У меня SQLServer 7.0

Так что, никак нельзя добраться к результату работы процедуры?


 
sniknik   (2003-07-02 15:55) [5]

Bless (02.07.03 15:38)
> Так что, никак нельзя добраться к результату работы процедуры?
просто MyStoredProc или exec MyStoredProc вернет рекордсет если он в ней конечно возврашается.
без всякой мороки
зачем использовать неопределенные для процедур конструкции? смысл? чего хочеш добится? а то может все не так уж и плохо, если разбирать конкретную задачу а не "тупичок" в общем.


 
Семен Сорокин   (2003-07-02 16:00) [6]

2Bless
см. Семен Сорокин © (02.07.03 12:57) :))


 
Stas   (2003-07-02 16:59) [7]

Попробуй в запросе EXECUTE MyProc
Если есть параметры, то укажи их через запятую.


 
Bless   (2003-07-02 17:32) [8]

>sniknik © (02.07.03 15:55)

Вот почти конкретная задача.

Есть куча строительных объектов, между которыми существуют иерархические отношения(типа родитель-потомок). То есть, например, объекты "Временная плотина подводящего канала", "Подводящий канал с устоями" - части объекта "ГАЭС" и в свою очередь могут состоять из других подобъектов и т.д.
Информация об этих связях берется из двух полей: kod - код объекта,
parent - код родителя

Нужно вывести, к примеру, список всех работ по объекту "ГАЭС"
Естесственно, все работы на "временной плотине..." и т.п. тоже считаются работами на "ГАЭС"

Всех потомков объекта с таким-то кодом планирую выбирать хранимой процедурой MyStoredProc. Код передается в качестве параметра процедуры. Тогда SQL-запрос будет выглядеть приблизительно так

select work.name
FROM work, MyStoredProc
where work.Obj_kod =MyStoredProc.kod :Object




>Stas © (02.07.03 16:59)
>Попробуй в запросе EXECUTE MyProc

Пробовал. Не работает.


 
sniknik   (2003-07-02 18:19) [9]

Bless (02.07.03 17:32)
не совсем то о чем я думал
мне бы не описание твоей работы а конкретно чего хотел добится этим
select * from MyStoredProc

данные в гриде показать?, дальнейшая обработка? на сервере и т.д.

>> Попробуй в запросе EXECUTE MyProc
> Пробовал. Не работает.
а ты попробуй не свою которая возможно ничего не возвращает (как бы хорошо ты о ней не думал), а системную которая точно работает правильно. например EXEC SP_WHO


 
Fay   (2003-07-02 19:05) [10]

А что не работает? Что за ошибка-то?


 
Bless   (2003-07-03 10:51) [11]

>sniknik © (02.07.03 18:19)
>мне бы не описание твоей работы а конкретно чего хотел добится
>этим select * from MyStoredProc.

Так я вроде конкретно написал: выбирать всех потомков (точнее все подобъекты) какого-то объекта. Данные в гриде показывать не надо. Эта процедура, если бы она возвращала значение, использовалась бы только в запросе, который я приводил выше и который выглядел бы приблизительно так:

select work.name
FROM work, MyStoredProc
where work.Obj_kod =MyStoredProc.kod :Object

, где в параметре :Object - код объекта, все подобъекты которого надо получить.

>а ты попробуй не свою которая возможно ничего не возвращает
> (как бы хорошо ты о ней не думал), а системную которая точно
>работает правильно. например EXEC SP_WHO

Если написать
select * from sp_who
или
select * from exec sp_who
или
select * from (exec sp_who),

то не работает


 
sniknik   (2003-07-03 11:02) [12]

> Если написать
select * from sp_who
....
то не работает

естественно, ведь надо писать EXEC SP_WHO, именно так без всяких дополнений.
(вот ты говориш написал вроде ясно, но у тебя конструкция нерабочая а вроде как тебе хотелось бы чтобы работало, вымысел короче без обьяснения что от него хочеш, я написал код гораздо короче в 2 слова абсолютно рабочий и ты меня не понял, догадываешся теперь насколько мне понять сложнее?)

select с процедурами не применим, insert в некоторых случаях позволяется. (ну применительно к коду вышепреведенному)


 
MOA   (2003-07-03 11:06) [13]

В 2000 можно воспользоваться функциями. В Вашем случае (7) возможны 2 варианта:
1. Оформить Ваши запросы в виде процедур, которые будут вызывать процедуру получения потомков примерно так:
EXEC ваша_процедура @ID_Object INTO #временная_таблица
- так можно. Некоторые делают все запросы приложения через процедуры (именно - все запросы), и считают, что так правильнее, чем запросами. В чём-то они правы - особенно в части безопасности и поддержки.
2. Если проект ещё недалеко продвинулся, можно изменить представление дерева, например, на основе вложенных множеств - тогда для выбора потомков не понадобится процедура. Но зато она понадобится при вставках-удалении.
Удачи!


 
sniknik   (2003-07-03 11:26) [14]

MOA © (03.07.03 11:06)
вариантов гораздо больше, зависит от того что именно делается.


 
MOA   (2003-07-03 11:35) [15]

>sniknik
Согласен.


 
Bless   (2003-07-03 12:55) [16]

>естественно, ведь надо писать EXEC SP_WHO, именно так без
>всяких дополнений.
>(вот ты говориш написал вроде ясно, но у тебя конструкция
>нерабочая а вроде как тебе хотелось бы чтобы работало, вымысел
>короче без обьяснения что от него хочеш, я написал код гораздо
>короче в 2 слова абсолютно рабочий и ты меня не понял,

>MOA ©
>EXEC ваша_процедура @ID_Object INTO #временная_таблица

Именно то, что надо. Спасибо.

>2. Если проект ещё недалеко продвинулся, можно изменить
>представление дерева, например, на основе вложенных множеств -
>тогда для выбора потомков не понадобится процедура. Но зато она
>понадобится при вставках-удалении.

:)Для практики сделаю оба, благо время не поджимает.
А если есть ссылки на информацию о других способах организации иерархических данных в реляционных базах, то поделитесь плз


 
MOA   (2003-07-03 13:33) [17]

Юссылки на информацию о других способах организации иерархических данных

http://www.osp.ru/win2000/sql/2001/05/967.htm
http://www.osp.ru/win2000/sql/2001/05/968.htm

Удачи!


 
KSergey   (2003-07-03 14:03) [18]

>EXEC ваша_процедура @ID_Object INTO #временная_таблица

Это что еще за фокусы? Что-то не нашел я в справке такого синтаксиса, да и не работает оно у меня (MSSQL 7). Я что-то не так делаю?
Например, в QA:

exec sp_who into #t

Ответ сервера: "а не пошел бы ты нафиг со своим INTO?!" (Incorrect syntax near the keyword "into".)

Что не так?


 
MOA   (2003-07-03 14:06) [19]

И ещё:
http://www.pwr.ru/items/?id=3
http://sdm.viptop.ru/articles/sqltrees.html


 
MOA   (2003-07-03 14:19) [20]

Пардон.
INSERT таблица EXEC процедура

Пример из справки

--INSERT...EXECUTE procedure example
INSERT author_sales EXECUTE get_author_sales

Ещё раз пардон. нечистый попутал ;)




 
olden69   (2003-07-03 14:21) [21]

USE northwind
GO

create procedure dbo._test
as
select top 10 * from region
GO

GRANT EXECUTE ON [dbo].[_test] TO [public]
GO

SELECT a.*
FROM OPENROWSET("SQLOLEDB","MyServer";"sa";"sapassword",
"exec northwind.dbo._test") AS a
GO


 
olden69   (2003-07-03 14:33) [22]

логично переделать из


select work.name
FROM work, MyStoredProc
where work.Obj_kod =MyStoredProc.kod :Object


в


select work.name
FROM work, MyStoredProc
where dbo.IsChildOf(Work.Obj_kod,:Object)=1


осталось только правильно написать функцию определения потомок ли
первый объект второго

запрос перечня объектов - Query1
запрос перечня работ на указанном объекте - Query2
и связать их Master-Detail по параметру Query2->:Object и полю Query1->Object


 
sniknik   (2003-07-03 14:38) [23]

MOA © (03.07.03 14:19)
это ответ на другой вопрос. (как занести результат работы процедуры в таблицу?)
а был
Набор данных как результат хранимой процедуры [D7, MSSQL]
...
select * from MyStoredProc

olden69 © (03.07.03 14:21)
подходит, результат этого ничем не отличается от простого EXEC _test (вернет такой же набор данных, только немного "попозже")

вот я и хотел узнать а зачем это нужно? смысл, может ему просто в гриде результат от процедуры отразить нужно. (не знает как вот и придумал вопрос на туже тему "помудрее")


 
olden69   (2003-07-03 14:55) [24]

вариант с OPENROWSET позволяет не создавать специально для выборки из результата одной процедуры еще одну процедуру (ради копирования во временную таблицу)
а обойтись просто селектом

но это на любителя
что "быстрее?легче?нагляднее?красивше?" - это уж как кому нравится


 
KSergey   (2003-07-03 16:49) [25]

По поводу варианта с OpenRowset: вот только какие ресурсы потребуются для подключения сервера самого к себе через OLE... Про безопасность вообще молчу - явно в SQL-тексте написан пароль
Хотя как поучительный вариант - безусловно интересен. (лишь мое мнение)


 
olden69   (2003-07-03 17:38) [26]

будем надеятся что в YUKON Microsoft реализует синтаксис типа

SELECT * FROM (EXECUTE MyStoredProc)


 
Bless   (2003-07-04 09:05) [27]

Что такое YUKON?


 
olden69   (2003-07-04 16:19) [28]

http://www.compulenta.ru/2003/6/26/40396/



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.006 c
4-91938
firefox
2003-05-23 12:51
2003.07.28
Опять про Resource..... :(


4-91955
Jack-of-shadow
2003-05-25 12:59
2003.07.28
Отказ MessageBox, связанный с: unit XPMan, {$R WindowsXP.res}


14-91865
Феликс
2003-07-10 23:14
2003.07.28
Вопрос по Перлу.


14-91895
Князь Мышкин
2003-07-11 15:10
2003.07.28
Где достать исходники Делфи


1-91758
yaJohn
2003-07-15 15:12
2003.07.28
Трабла с ObjectPascal. const mbNew = Succ ( High (TMsgDlgBtn) );





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский