Bir tablo döndüren pakette bir işlev oluşturmaya çalışıyorum. Bu fonksiyonu paketin içinde bir kez çağırmayı umuyorum, ancak veri mulitple zamanlarını yeniden kullanabiliyorum. Oracle’da temp tabloları oluşturduğumu bildiğim halde, işleri DRY’de tutmayı umuyordum.Bir tablo döndüren bir Oracle işlevi oluşturun
Başlığını:
CREATE OR REPLACE PACKAGE TEST AS
TYPE MEASURE_RECORD IS RECORD (
L4_ID VARCHAR2(50),
L6_ID VARCHAR2(50),
L8_ID VARCHAR2(50),
YEAR NUMBER,
PERIOD NUMBER,
VALUE NUMBER
);
TYPE MEASURE_TABLE IS TABLE OF MEASURE_RECORD;
FUNCTION GET_UPS(
TIMESPAN_IN IN VARCHAR2 DEFAULT 'MONTLHY',
STARTING_DATE_IN DATE,
ENDING_DATE_IN DATE
) RETURN MEASURE_TABLE;
END TEST;
Gövde: başlık derler
CREATE OR REPLACE PACKAGE BODY TEST AS
FUNCTION GET_UPS (
TIMESPAN_IN IN VARCHAR2 DEFAULT 'MONTLHY',
STARTING_DATE_IN DATE,
ENDING_DATE_IN DATE
) RETURN MEASURE_TABLE IS
T MEASURE_TABLE;
BEGIN
SELECT ...
INTO T
FROM ...
;
RETURN T;
END GET_UPS;
END TEST;
, vücut değil
Şimdiye kadar, bu ben ne var. Bir hata mesajı 'yeterli değerler değil', bu muhtemelen MEASURE_TABLE yerine MEASURE_RECORD içine seçmem gerektiği anlamına geliyor.
Neyi eksik?
Bir imlecin kullanılmasının, geçici bir tablo kullanmaktan ziyade kaynak yoğunluğu (daha yavaş) olacağı varsayılmaktadır. Doğrumuyum? Bu işlevin sonuçlarını gruplandırmam gerekiyor. Bu önerilerinizi değiştirir mi? – craig
İmleçle ilgili olarak, evet performans açısından çok iyi olmadıklarına inanıyorum, bu yüzden Tony'nin bahsettiği gibi TOPLU TOPLAMA yapmak daha hızlı olur ve daha sonra dizi üzerinde yineleyin. Bu, uğraştığınız satırların sayısına ve diğer performans değerlendirmelerine bağlı olacaktır. Sonuçları gruplandırmaya gelince, emin değilim, ama geçici bir tablonun her durumda boru hattından daha verimli olacağını düşünüyorum. Daha fazla araştırma öneririm (ya da daha iyisi, deneyler). Soruyu http://asktom.oracle.com adresinden rica ediyorum. –
Lütfen downvote'u açıklayın. –