powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Возврат данных в датасет из процедуры, которая обращается еще к одной процедуре.
3 сообщений из 3, страница 1 из 1
Возврат данных в датасет из процедуры, которая обращается еще к одной процедуре.
    #32050337
Kostik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста начинающему!
Перехожу с Interbase на Oracle. Была такая процедура, она берет данные из таблицы и для каждой строки вытаскивает цену на определенную дату из другой процедуры.

CREATE PROCEDURE GP_FREE_OSTATKI RETURNS (
NUMSTRING INTEGER,
TYPETOVAR VARCHAR(10),
TOVAR VARCHAR(20),
CODE VARCHAR(5),
OBIVKA VARCHAR(15),
KARKAS VARCHAR(8),
FREEOST DOUBLE PRECISION,
FIRM VARCHAR(12),
SKLAD VARCHAR(5),
PRICE DOUBLE PRECISION,
SUMMA DOUBLE PRECISION,
ID INTEGER
) AS
BEGIN
FOR SELECT o.numstring,o.typetovar,o.tovar,o.code,o.obivka,o.Karkas,
(o.Kolvo-o.REZERVED),f.Shortname,S.SkladNAME,O.ID
FROM OSTATKI O,GP_contragents f,SKLADS S
where o.Kolvo>o.rezerved
AND o.FIRM_ID=F.ID
AND o.SKLAD_ID=S.ID
INTO :NUMSTRING,:TYPETOVAR,:TOVAR,:CODE,:OBIVKA,:KARKAS,:FREEOST,:FIRM,:SKLAD,:ID
DO BEGIN
SELECT PRICE FROM GP_GET_PRICEONDATA (:ID,"TODAY") INTO :PRICE;
IF (PRICE IS NULL) THEN PRICE=0;
SUMMA=FREEOST*PRICE;
SUSPEND;
END
END

Как это сделать на Oracle, и возвратить тип Ref Cursor?
Пытался, вытащил данные из таблицы в курсор, оттуда в
запись, там можно добавить результаты из процедуры,
а как все это возвратить в виде курсора? :

TYPE F_OST_T IS RECORD (
NUMSTRING INTEGER,
TYPETOVAR VARCHAR2(10),
TOVAR VARCHAR2(20),
CODE VARCHAR2(5),
OBIVKA VARCHAR2(15),
KARKAS VARCHAR2(8),
FREEOST DOUBLE PRECISION,
FIRM VARCHAR2(12),
SKLAD VARCHAR2(5),
ID INTEGER,
PRICE DOUBLE PRECISION,
SUMMA DOUBLE PRECISION);

TYPE FREE_OSTATKI IS REF CURSOR RETURN F_OST_T;


FUNCTION GP_FREE_OSTATKI RETURN FREE_OSTATKI;

FUNCTION GP_FREE_OSTATKI RETURN FREE_OSTATKI
AS
F_OST FREE_OSTATKI;
f_rec F_OST;
I INTEGER;
BEGIN
OPEN F_OST FOR SELECT o.numstring,o.typetovar,o.tovar,o.code,o.obivka,o.Karkas,
(o.Kolvo-o.REZERVED) AS FREEOST,f.Shortname AS FIRM,S.SkladNAME,O.ID,0 AS PRICE,0 AS SUMMA
FROM OSTATKI O,GP_contragents f,SKLADS S
where o.Kolvo>o.rezerved
AND o.FIRM_ID=F.ID
AND o.SKLAD_ID=S.ID;

FETCH F_OST INTO F_REC;
FOR i IN 1..F_OST%ROWCOUNT LOOP

F_REC.PRICE:=999;




/*SELECT PRICE FROM GP_GET_PRICEONDATA (:ID,"TODAY") INTO :PRICE;
IF (PRICE IS NULL) THEN PRICE=0;
SUMMA=FREEOST*PRICE;
SUSPEND;
END*/
END LOOP;

RETURN F_OST;
END GP_FREE_OSTATKI;


end GP_OSTATKI
...
Рейтинг: 0 / 0
Возврат данных в датасет из процедуры, которая обращается еще к одной процедуре.
    #32050360
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе никто не мешает вызывать функцию прямо в запросе, наподобе:

open f_ost for
select o.tovar
, gp_get_priceondata (o.id,"today") price
from ostatki o
...
Рейтинг: 0 / 0
Возврат данных в датасет из процедуры, которая обращается еще к одной процедуре.
    #32050481
Kostik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, все заработало!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Возврат данных в датасет из процедуры, которая обращается еще к одной процедуре.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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