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;

我可以将 Oracle 函数重新创建为 UDF,将 begin...exception...end 转换为 begin try 并 begin catch 吗?

如果没有,我的其他策略是什么?

再次感谢

4

1 回答 1

1

你基本上是对的。但是,该函数在 SQL Server 中将像一条绝对的狗一样执行。我不确定它在 Oracle 中是否更好,但我当然会尽量避免使用标量函数。对于一般的函数,您最好制作一个内联表函数(本页的第二个示例),然后使用CROSS APPLY.

但是,在这种情况下,我几乎肯定会将其重构为LEFT OUTER JOINwithCASE语句(请参见此处)。

这看起来像:

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 回答