2016-04-06 12 views
0

Ich habe eine einfache gespeicherte Prozedur für Testzwecke in Netezza erstellt, die eine Zeichenfolge zurückgibt. Wenn ich es von einer Select-Anweisung aus aufrufen, funktioniert es einwandfrei, es sei denn, ich nenne es mehrmals in mehreren Spalten. Ich erhalte den Fehler:Können Sie eine gespeicherte Netezza-Prozedur mehr als einmal in Select aufrufen?

ERROR [HY000] ERROR: Can't use a stored procedure in this context.

Ist das nicht erlaubt?

Stored Procedure:

CREATE OR REPLACE PROCEDURE SP_TEST_PROC(VARCHAR(ANY)) 
RETURNS VARCHAR(32) 
EXECUTE AS OWNER 
LANGUAGE NZPLSQL AS 
BEGIN_PROC 
DECLARE 
    TEST_PAR ALIAS FOR $1; 

BEGIN 

RETURN 'A' || TEST_PAR; 

END; 
END_PROC; 

Wie ich es nennen:

SELECT SP_TEST_PROC('abc') as test1, sp_test_proc('def') as test2 

Antwort

0

Sie können nicht mehr als eine gespeicherte Prozedur in einer SELECT aufrufen gehen. Es gibt ein paar Möglichkeiten, wie Sie eine Netezza gespeicherte Prozedur aufrufen können:

CALL SP_TEST_PROC('abc'); 
EXEC SP_TEST_PROC('abc'); 
SELECT SP_TEST_PROC('abc'); 

kann jedoch nicht eine FROM-Klausel haben, wenn SELECT verwenden. Das SELECT-Formular ist nur ein Synonym für eines der anderen Formulare und ist nicht wirklich ein SELECT, wie wir normalerweise an ein solches denken.

Sie finden die Dokumentation zum Aufruf einer gespeicherten Prozedur here.

Wenn Sie nach einer Skalarfunktion suchen, dann ist es wahrscheinlich besser, wenn Sie eine UDF schreiben. UDFs in Netezza unterstützen NZPLSQL jedoch nicht als Sprache. Sie müssten es in einer der unterstützten UDF-Sprachen (z. B. C++ oder Lua) schreiben.

0

Um eine gespeicherte Prozedur ausführen, müssen Sie diesen Befehl ausführen:

EXECUTE SP_TEST_PROC('abc') 
EXECUTE SP_TEST_PROC('def') 

und nicht, wie Sie haben geschrieben:

SELECT SP_TEST_PROC('abc') as test1, sp_test_proc('def') as test2 

Sie können here für ein Beispiel

+0

"SELECT SP_TEST_PROC ('abc') als test1" funktioniert, ich denke, es wandelt nur in eine EXECUTE-Anweisung – Kelly

Verwandte Themen