0

提供されたヘルプにまず感謝します。私は完全な SQL Server 初心者であり、過去 20 年間、Oracle と PL/SQL のみを使用してきました。

私の現在のソースはまだ回答を提供していないので、私が指摘できる関連ドキュメントも素晴らしいでしょう!

Oracle 関数 = SQL Server ユーザー定義関数 Oracle プロシージャ = SQL Server SPROC は正しいですか?

私の簡略化されたOracleの例:

select student_id
       ,someschema.f_get_accommadation_get(student_id) accommodation 
from   students;

someschema.someschema.f_get_accommadation_get(student_id) の場所:

create or replace function someschema.f_get_accommadation_get(p_student_id in number)
return varchar2 is
local_sped number;

begin
  select sped_cd from someschema.student_sped 
  into local_sped
  where student_id = p_student_id;

  if local_sped = 1 then return('A')
    elsif local_sped = 2 then return('B')
       else        return('C')
    end if;
  end if;
exception when others then return(null);
end;

begin...exception...end を begin try と begin catch に変換して、Oracle 関数を UDF として再作成できますか?

そうでない場合、他の戦略は何ですか?

再度、感謝します

4

1 に答える 1

1

あなたは基本的に正しいです。ただし、この関数はSQLServerの絶対的な犬のように機能します。Oracleでそれが優れているかどうかはわかりませんが、スカラー関数は避けようとしています。一般的な関数の場合、インラインテーブル関数(このページの2番目の例)を作成してから、を使用して値を取得することをお勧めしますCROSS APPLY

ただし、この場合、ほぼ確実に、ステートメントLEFT OUTER JOIN付きのaにリファクタリングします(ここを参照)。CASE

これは次のようになります。

select student_id,
       CASE spec_cd WHEN 1 THEN 'A'
                    WHEN 2 THEN 'B'
                    WHEN 3 THEN 'C'
                    ELSE NULL END as ColumnName
from   students s left outer join 
       someschema.student_sped ss 
    on ss.student_id = s.student_id
于 2012-06-12T19:18:24.470 に答える