2016-06-29 5 views
0

In Oracle SQL, unterstützt eine der Systemfunktionen (aufgelistet auf http://docs.oracle.com/database/121/SQLRF/functions001.htm) Ausgabeparameter, oder geben sie nur einen Wert zurück?Unterstützt Oracle SQL Ausgabeparameter in Systemfunktionen?

Ich weiß, dass in Oracle PL/SQL eine Funktion Werte zurückgeben kann und Ausgabeparameter enthalten kann, aber haben irgendwelche SQL-Systemfunktionen selbst Ausgabeparameter?

+0

Funktionen per definitionem keine Ausgabeparameter unterstützen. Wenn Sie sich die Dokumentation der Funktionen ansehen, auf die in der zitierten Quelle verwiesen wird, werden Sie sehen, dass die Spezifikation von allen keinen "Ausgabeparameter" enthält - im Gegensatz zu einem Rückgabewert. Ich sehe nicht einmal etwas in der PL/SQL-Referenz, um anzuzeigen, dass eine PL/SQL-Funktion etwas anderes machen kann. Und schauen Sie sich das Dokument zu CREATE FUNCTION an. Die gleiche Geschichte. – EdStevens

+0

Um die Antwort von Ed auszuarbeiten: In PL/SQL können Sie einige Verarbeitungs- und Ausgabewerte über out-Parameter ausführen, aber diese Art von Programm wird als Prozedur und nicht als Funktion bezeichnet. Diese Art von Terminologie kann in anderen Sprachen etwas anders verwendet werden, aber dies ist die Verwendung von Oracle. – mathguy

+1

@EdStevens Funktionen ** do ** unterstützen Parameter: 'CREATE FUNCTION test_out ( Wert AUSGABE NUMMER ) RÜCKSENDE NUMMER IS BEGIN Wert: = 1; RÜCKKEHR 2; ENDE; /'dann können Sie' DECLARE eine NUMMER; b NUMMER; BEGINN a: = test_out (b); DBMS_OUTPUT.PUT_LINE (a || ',' || b); ENDE; /' – MT0

Antwort

1

[TL; DR] Funktionen mit out-Parametern können nur in PL/SQL verwendet werden.

Als Beispiel:

CREATE FUNCTION test_out(
    value OUT NUMBER 
) RETURN NUMBER 
IS 
BEGIN 
    value := 1; 
    RETURN 2; 
END; 
/

Sie können diese/SQL in PL laufen:

SET SERVEROUTPUT ON; 

DECLARE 
    a NUMBER; 
    b NUMBER; 
BEGIN 
    a := test_out(b); 
    DBMS_OUTPUT.PUT_LINE(a || ', ' || b); 
END; 
/

Ausgänge 2, 1

jedoch versuchen, die gleiche Sache in SQL (die Schaffung eines zu tun Bindevariable über Oracle SQL Developer):

VARIABLE a NUMBER; 

SELECT test_out(:a) FROM DUAL; 

PRINT a; 

Gibt Ihnen die Ausnahme:

SQL Error: ORA-06572: Function TEST_OUT has out arguments 
06572. 00000 - "Function %s has out arguments" 
*Cause: A SQL statement references either a packaged, or a stand-alone, 
      PL/SQL function that contains an OUT parameter in its argument 
      list. PL/SQL functions referenced by SQL statements must not 
      contain the OUT parameter. 
*Action: Recreate the PL/SQL function without the OUT parameter in the 
      argument list. 
Verwandte Themen