2017-10-17 18 views
1

J'ai une procédure stockée que j'ai commencé à coder et que vous devez retourner une valeur. Dans SQL Server, je pourrais simplement faire un SELECT de la variable pour le renvoyer. Cependant, cela ne semble pas fonctionner avec Teradata et n'a pas trouvé un exemple similaire sur la façon de le faire. Voici ma procédure stockée:Sélectionnez une variable à exporter à l'intérieur d'une procédure stockée dans Teradata

REPLACE PROCEDURE sp_Get_MyValue() 
BEGIN 
DECLARE mytestvar VARCHAR(40); 
SELECT mycolumn INTO mytestvar FROM MyTable; 
SELECT mytestvar; 
END; 

Je reçois cette erreur:

STATEMENT 2: REPLACE failed. Failed [5526 : HY000] Stored Procedure is not created/replaced due to error(s).{Nested Failure Msg [5526 : HY000] SPL1045:E(L10), Invalid or missing INTO clause.}

J'ai aussi essayé d'ajouter une variable OUT à la procédure, mais cela ne fonctionne pas non plus:

REPLACE PROCEDURE sp_Get_MyValue(mytestvarout VARCHAR(40)) 
BEGIN 
DECLARE mytestvar VARCHAR(40); 
SELECT mycolumn INTO mytestvar FROM MyTable; 
END; 

Avec cette erreur:

Executed as Single statement. Failed [5531 : HY000] Named-list is not supported for arguments of a procedure. Elapsed time = 00:00:00.079

Répondre

3

Pour revenir une seule ligne, vous devez définir et OUT variable et attribuer une valeur à elle:

REPLACE PROCEDURE sp_Get_MyValue(OUT mytestvarout VARCHAR(40)) 
BEGIN 
    DECLARE mytestvar VARCHAR(40); 
    SELECT mycolumn INTO mytestvar FROM MyTable; 
    SET mytestvarout = mytestvar; 
END; 

Pour retourner un jeu de résultats, vous devez définir une sorte de curseur factice (blâmer SQL standard :-)

Returning Result Sets from a Stored Procedure

+0

Je reçois toujours cette erreur: Named-list n'est pas supporté pour les arguments d'une procédure. – Russ960

+1

Vous devez l'APPELER avec un nom de paramètre: 'CALL sp_Get_MyValue (peu importe)' (habituellement, vous utilisez le nom de la variable réelle au lieu de 'whatever') – dnoeth

+0

Merci. Noob erreur de ma part. Ça a marché! – Russ960