Ich habe eine benutzerdefinierte Funktion, die obere und untere Quartile berechnen soll. Ich möchte es auf folgende Weise berechnen:Oracle. Übergeben Sie das Ergebnis an die benutzerdefinierte Funktion
SELECT QUARTILE_UTILS.GET_QUARTILE(0.25, YEAR_1_FTE),
QUARTILE_UTILS.GET_QUARTILE(0.75, YEAR_1_FTE)
FROM SOME_TABLE WHERE FIRM_ID=999;
So sieht es wie eine Aggregatfunktion aus. Es erhält eine Zahl, um ein Viertel (.25 oder .75) und eine Sammlung von Zahlen zu berechnen. Also hier ist die Funktion Körper:
create or replace PACKAGE BODY QUARTILE_UTILS AS
FUNCTION GET_QUARTILE(PERCENTILE NUMBER, DATASET NUMBERS_ARRAY) RETURN NUMBER
IS
REMINDER NUMBER := 0;
I SIMPLE_INTEGER := 0;
RESULT NUMBER := 0;
BEGIN
....
RETURN RESULT;
END;
END QUARTILE_UTILS;
Und wie Sie sehen können, habe ich einen benutzerdefinierten Datentyp definiert. Hier ist es:
create or replace TYPE NUMBERS_ARRAY AS TABLE OF NUMBER;
Allerdings funktioniert es immer noch nicht. Wenn ich auszuführen versuche ich solche Fehler erhalten:
PLS-306: wrong number or types of arguments in call to 'GET_QUARTILE'
Was, wie ich meine Definition von Sammlung von Nummer verstehen falsch ist. Was mache ich falsch?
Welcher Datentyp ist YEAR_1_FTE? Vermutlich kein geschachtelter Tabellentyp. Sie möchten über alle Werte aus der Tabelle aggregieren - denke ich -, also versuchen Sie [eine benutzerdefinierte Aggregatfunktion] zu schreiben (http://docs.oracle.com/cd/E11882_01/appdev.112/e10765/ aggr_functions.htm)? Oder möchten Sie die Werte aus der Tabelle in eine Sammlung umwandeln und diese an Ihre aktuelle Funktion übergeben? –
@AlexPoole YEAR_1_FTE ist nur eine Nummer. Also ja, ich muss nur eine Sammlung von Zahlen übergeben. –