存储过程和UDF的Oracle vs SQL Server



首先感谢您提供的任何帮助。我是一个完全的SQL Server新手,在过去的20年里只使用Oracle和PL/SQL。

我可以指出的任何相关文档也很棒,因为我当前的消息来源尚未提供答案!

是否为真:Oracle 函数 = SQL Server 用户定义函数 Oracle Procedure = SQL Server SPROC?

我的简化甲骨文示例:

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 吗,转换开头...例外。。。结束开始尝试并开始捕捉?

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

再次感谢

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

但是,在这种情况下,我几乎肯定会将其重构为具有CASE语句的LEFT OUTER JOIN(请参阅此处)。

这看起来像这样:

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

最新更新