首先感谢您提供的任何帮助。我是一个完全的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