【发布时间】:2017-05-19 12:58:27
【问题描述】:
我有几个类似于下面的 Oracle 函数。我对 Oracle 知之甚少,尽管我已经在重写主要查询的道路上取得了进展。我想就如何将此函数转换为 SQL Server 2008 寻求一些帮助。
我曾尝试使用www.sqlines.com的在线转换工具,并从那里的许多页面中受益...但没有成功转换此功能....
提前致谢,约翰
甲骨文来源:
function OfficeIDMainPhoneID(p_ID t_OfficeID)
return t_OfficePhoneID
is
wPhID t_OfficePhoneID;
wPhID1 t_OfficePhoneID;
cursor cr_phone
is
select Office_PHONE_ID,IS_PHONE_PRIMARY
from Office_PHONE
where Office_ID = p_ID
order by SEQ_NUMBER;
begin
wPhID :=NULL;
wPhID1:=NULL;
for wp in cr_phone
loop
if wPhID is NULL
then wPhID1:=wp.Office_PHONE_ID;
end if;
if wp.IS_PHONE_PRIMARY = 'Y'
then
wPhID:=wp.Office_PHONE_ID;
Exit;
end if;
end loop;
if wPhID is NULL
then wPhID:=wPhID1;
end if;
return(wPhID);
end OfficeIDMainPhoneID;
SQL Server 尝试:
create function OfficeIDMainPhoneID(@p_ID t_OfficeID)
returns t_OfficePhoneID
as
begin
declare @wPhID t_OfficePhoneID;
declare @wPhID1 t_OfficePhoneID;
declare cr_phone cursor local
for
select Office_PHONE_ID,IS_PHONE_PRIMARY
from Office_PHONE
where Office_ID = @p_ID
order by SEQ_NUMBER;
set @wPhID =NULL;
set @wPhID1=NULL;
declare wp cursor for cr_phone
open wp;
fetch wp into;
while @@fetch_status=0
begin
if @wPhID is NULL
begin set @wPhID1=wp.Office_PHONE_ID;
end
if wp.IS_PHONE_PRIMARY = 'Y'
begin
set @wPhID=wp.Office_PHONE_ID;
Exit;
end
fetch wp into;
end;
close wp;
deallocate wp;
if @wPhID is NULL
begin set @wPhID=@wPhID1;
end
return(@wPhID);
end ;
【问题讨论】:
-
感谢 scsimon 的格式化帮助!!
-
现在已经很晚了,我已经喝了我的啤酒,但是这个功能看起来太复杂了,因为它所做的很少——也许你根本不需要它。如果你这样做,它可以做得更短。
-
虽然我完全同意 Erich 的观点,但我目前还不是这种语言的大师,无法重写它。慢慢地,我正在学习这两种语言,而这个非常长的大型脚本写得非常糟糕。所以我希望剥掉这个洋葱并简化代码。还是一步一个脚印吧?!
标签: oracle sql-server-2008 tsql database-migration