2011-08-07 3 views
1

Bonjour est-il quelqu'un qui sait comment convertir le t-sql procédure stockée dans pl/sql:Procédure stockée. T-sql en pl/sql

ALTER FUNCTION [dbo].[AverageAndTall]() 
    RETURNS @Players TABLE 
    (
     Number INT, 
     Name VARCHAR(20), 
     Surname VARCHAR(40), 
     Height float, 
     Position VARCHAR(40), 
     FuzzinessLevel float(3) 
    ) 
AS 
BEGIN 
    DECLARE @FuzzyLevel float 
    INSERT @Players (Number, Name, Surname, Height, Position, FuzzinessLevel) 
    SELECT Number, Name, Surname, Height, Position, dbo.MembershipLevel_AverageAndTall(Height) 
    FROM  FuzzyFootballTeam  
    RETURN 
END 

Merci pour tout conseils!

Répondre

2

Vous avez une fonction définie par l'utilisateur de type table. Une façon de convertir ceci en PL/SQL est d'utiliser une fonction retournant un REF CURSOR. Étant donné que certaines définitions de type sont impliqués, vous feriez mieux de le mettre dans un paquet:

CREATE OR REPLACE PACKAGE FootballTeam 
IS 

    TYPE AverageAndTallResult IS RECORD (
    NMBR INT, 
    NAME VARCHAR2(20), 
    SURNAME VARCHAR2(40), 
    HEIGHT NUMBER, 
    POSITION VARCHAR2(40), 
    FUZZINESS_LEVEL NUMBER); 

    TYPE AverageAndTallCursor IS REF CURSOR RETURN AverageAndTallResult; 

    FUNCTION AverageAndTall 
    RETURN AverageAndTallCursor; 

END FootballTeam; 
/

CREATE OR REPLACE PACKAGE BODY FootballTeam 
IS 

    FUNCTION AverageAndTall 
    RETURN AverageAndTallCursor 
    IS 

    l_cursor AverageAndTallCursor; 

    BEGIN 

    OPEN l_cursor FOR 
    SELECT Number, Name, Surname, Height, Position, MembershipLevel_AverageAndTall(Height) 
    FROM FuzzyFootballTeam; 

    RETURN l_cursor; 

    END AverageAndTall; 

END FootballTeam; 
/
+0

Merci pour Codo your's réponse, votre code passe utilisé, mais après l'exécution du script reçu que passe: TYPE EST AverageAndTallCursor REF CURSOR RETURN AverageAndTallResult% TYPE; sera ignoré, car% TYPE doit être appliqué à une variable, une colonne, un champ ou un attribut, et non à AverageAndTallResult. Savez-vous peut-être chaud pour l'éviter? J'ai également passé en revue les dernières réponses et n'ai pas remarqué la marque ... désolé je le faisais involontairement. – Artur

+0

Je l'ai réparé. La bande-annonce '% TYPE' n'était pas nécessaire. – Codo

+0

également supprimé, juste pensé qu'il est nécessaire ... merci – Artur