2011-08-07 12 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に変換する1つの方法は、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

おかげCodo your's返信用、I'veはあなたのコードを使用しますが、スクリプトを実行した後I'veがいることを受けた:TYPE AverageAndTallCursorはIS REF CURSOR RETURN AverageAndTallResult%TYPE; %TYPEはAverageAndTallResultではなく、変数、列、フィールドまたは属性に適用する必要があるため、無視されます。あなたは多分それを避けるために熱く知っていますか?私は最後の解答を見直して、マークに気付かなかった...残念ながら、私はそれをやっていたのです。 – Artur

+0

私はそれを修正しました。 '%TYPE'トレーラーは必要ありませんでした。 – Codo

+0

も削除されました。ただ必要と思っていた...ありがとう – Artur