2011-08-07 35 views
1

你好有任何人誰知道如何下面的T-SQL存儲過程轉換成PL/SQL:存儲過程。 T-SQL到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 

感謝任何提示!

回答

2

您有一個表值用戶定義的函數。將其轉換爲PL/SQL的一種方法是使用返回REF CURSOR的函數。由於一些類型定義都參與其中,你最好把它放到一個包:

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

感謝科多爲your's回覆,I've使用你的代碼,但在運行腳本之後I've收到:TYPE AverageAndTallCursor IS REF CURSOR RETURN AverageAndTallResult%TYPE;將被忽略,因爲%TYPE必須應用於變量,列,字段或屬性,而不是AverageAndTallResult。你可能知道很熱,以避免它?我也回顧了最後的答案,並沒有注意到這個標記......對不起,我是在無意中做的。 – Artur

+0

我修復了它。 '%TYPE'預告片不需要。 – Codo

+0

也被刪除,只是認爲它是需要的......謝謝 – Artur