|
Возврат данных в датасет из процедуры, которая обращается еще к одной процедуре.
|
|||
---|---|---|---|
#18+
Помогите, пожалуйста начинающему! Перехожу с 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2002, 10:18 |
|
Возврат данных в датасет из процедуры, которая обращается еще к одной процедуре.
|
|||
---|---|---|---|
#18+
Тебе никто не мешает вызывать функцию прямо в запросе, наподобе: open f_ost for select o.tovar , gp_get_priceondata (o.id,"today") price from ostatki o ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2002, 10:58 |
|
|
start [/forum/topic.php?fid=52&fpage=2842&tid=1993098]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 128ms |
0 / 0 |