首先感谢您提供的任何帮助。我是一个完整的SQL Server新手,在过去的20年里一直专注于Oracle和PL / SQL。
我可以指出的任何相关文件都会很棒,因为我目前的消息来源尚未提供答案!
以下是否正确:Oracle Function = SQL Server用户定义函数 Oracle Procedure = 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转换为开始尝试并开始捕获吗?
如果没有,我的其他策略是什么?
再次感谢
答案 0 :(得分:1)
你基本上是对的。但是,该函数将像SQL Server中的绝对狗一样执行。我不确定它在Oracle中是否更好,但我当然试图避免使用标量函数。对于一般的函数,最好使用内联表函数(second example on this page),然后使用CROSS APPLY
获取值。
但是,在这种情况下,我几乎肯定会将其重构为LEFT OUTER JOIN
,并带有CASE
语句(see here)。
这看起来像是:
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