Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 хранимая процедура в запросе  [new]
LadyShack
Member

Откуда:
Сообщений: 117
Добрый день.
Нужно в одном запросе вызвать ханимку и вернуть выходные параметры этой хранимки. Возвращать значение функции можно приблизительно так
 SELECT Func() as f FROM DUAL 
А есть ли возможность создать конструкцию, чтобы использовать ХП в одном запросе?
Спасибо.
21 янв 11, 16:22    [10111533]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Три раза перечитал - нич-ч-чего не понял
21 янв 11, 16:25    [10111570]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862

On 21.01.2011 16:22, LadyShack wrote:

> А есть ли возможность создать конструкцию, чтобы использовать ХП в одном запросе?

Основная задача в том, чтобы вернуть более одного выходного параметра, тогда как у функции он только один?

Posted via ActualForum NNTP Server 1.4

21 янв 11, 16:28    [10111588]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
министерский
Member [заблокирован]

Откуда:
Сообщений: 1417
tru55
Три раза перечитал - нич-ч-чего не понял

чувак хочет out параметры процедуры в запросе вернуть на подобие как возвращается return значение функции
21 янв 11, 16:28    [10111589]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
LadyShack,

оберни процедуру в функцию, и верни объектный тип, если out параметров много
21 янв 11, 16:30    [10111616]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
nikonian
Member

Откуда: город на Неве
Сообщений: 58
В SQL нельзя вернуть значения из процедуры, только из функции.
21 янв 11, 16:40    [10111695]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
pit_alex
Member

Откуда: Kharkov
Сообщений: 686
LadyShack,

можно использовать Ref Cursor
21 янв 11, 16:41    [10111698]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
pit_alex
Member

Откуда: Kharkov
Сообщений: 686
в качестве out параметра
21 янв 11, 16:41    [10111701]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
pit_alex
Member

Откуда: Kharkov
Сообщений: 686
неполучится
недочитал вопрос :-(
21 янв 11, 16:43    [10111714]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
pit_alex
Member

Откуда: Kharkov
Сообщений: 686
хотя смотря куда вернуть, если в TDataSet то все таки можно через ref cursor
21 янв 11, 16:50    [10111767]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
LadyShack
Member

Откуда:
Сообщений: 117
А если ничего дополнительно в базу не прописывать, а просто создать такой хитрый запрос (если можно конечно)? Дело в том, что методом влоб, -вытянуть через параметры (в frxADOQuery) не получается (почему это уже вопрос на другом форуме). Поэтому ищу обходные пути.
Почему именно в одном запросе - если запрос обрамить хотя бы begin ... end, то выдается сообщение, что не хватает INTO, то есть нужно только в переменную передавать.
21 янв 11, 17:15    [10111962]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Вообще-то если BEGIN-END (т.е PL/SQL), то для вызова процедуры никакой SELECT не нужен...
21 янв 11, 17:19    [10111991]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
LadyShack
Member

Откуда:
Сообщений: 117
Согласна. Так я и написала, что методом "влоб" не катит.
21 янв 11, 17:28    [10112050]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
vie
Member

Откуда: Moscow
Сообщений: 445
LadyShack,

а не получится сделать {call finc(?)} ?
21 янв 11, 17:47    [10112159]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
LadyShack
Member

Откуда:
Сообщений: 117
2vie : не поняла ответа, что именно нужно сделать?
21 янв 11, 18:03    [10112232]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
frxADOQuery умеет работать с refcursor'ами?
21 янв 11, 18:12    [10112279]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
vie
Member

Откуда: Moscow
Сообщений: 445
LadyShack,

я имел ввиду что хранимая процедура вызывается из приложения оператором SQL CALL, например:
{CALL имя_процедуры (список_фактических_параметров)}
21 янв 11, 18:23    [10112318]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура в запросе  [new]
LadyShack
Member

Откуда:
Сообщений: 117
Denis Popov
frxADOQuery умеет работать с refcursor'ами?

не знаю, не проверяла.
Я сейчас прорабатываю другой путь. В базу пришлось залезть и создать следующее (идею почерпнула из форума)
create or replace type objSnr as object(
Y integer,
M integer,
D integer
)

create or replace function GET_OBJSNR (isnP in varchar2, isnS in varchar2, onDate in DATE)  return objSnr is
 y integer;
 m integer;
 d integer;
begin
  get_seniority ( isnP, isnS, onDate, Y, M, D);
  return objSnr(Y, M, D);
end;

и соответственно вызов

SELECT (SNR).Y, (SNR).M, (SNR).D 
FROM (
       SELECT (
               SELECT  Get_objSnr ( 'isnP',  'isnS', SYSDATE)  
               FROM DUAL  
               ) SNR 
       FROM DUAL 
     )
Вроде скриптами по базе этот вариант отработал.
21 янв 11, 18:37    [10112359]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить