sybase---oracle2sybase procedure

本文介绍了一个从Oracle到Sybase的存储过程移植案例,该过程用于通过电话号码确定主叫者的地区。通过逐步检查不同长度的电话号码前缀,并从特定映射表中检索地区信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[code]
Oracle的存储过程

create or replace procedure PROC_GSLH_GETLINKERNAMEAREA
(
p_callerPhone VARCHAR2, --主叫号码
p_linkerArea out VARCHAR2 --主叫所属地区
)
as
m_callerPhone VARCHAR2( 20 ); --去掉前面0后的主叫号码
m_phonePrefix VARCHAR2( 20 ); --号码前缀,用来判断主叫所属地区
begin
--初始化数据
p_linkerArea := 'NULL';

--如果主叫前面有0,刚将0去掉
m_callerPhone := p_callerPhone;
if( substr( p_callerPhone, 1, 1 ) = '0' ) then
m_callerPhone := substr( p_callerPhone, 2, length( p_callerPhone ) );
end if;

--获取联系人所属地区
m_phonePrefix := substr( m_callerPhone, 1, 8 ); --移动号码号段((8位)
begin
select MM_FREE into p_linkerArea from AAA_MOBILE_MAP where MM_MOBILE = m_phonePrefix;
exception when no_data_found then
p_linkerArea := 'NULL';
end;

if( p_linkerArea = 'NULL' ) then
m_phonePrefix := substr( m_callerPhone, 1, 7 ); --移动号码号段((7位)
begin
select MM_FREE into p_linkerArea from AAA_MOBILE_MAP where MM_MOBILE = m_phonePrefix;
exception when no_data_found then
p_linkerArea := 'NULL';
end;
end if;

if( p_linkerArea = 'NULL' ) then
m_phonePrefix := substr( m_callerPhone, 1, 3 ); --固话区号
begin
select MM_FREE into p_linkerArea from AAA_MOBILE_MAP where MM_MOBILE = m_phonePrefix;
exception when no_data_found then
p_linkerArea := 'NULL';
end;
end if;

if( p_linkerArea = 'NULL' ) then
m_phonePrefix := substr( m_callerPhone, 1, 2 ); --固话区号
begin
select MM_FREE into p_linkerArea from AAA_MOBILE_MAP where MM_MOBILE = m_phonePrefix;
exception when no_data_found then
p_linkerArea := 'NULL';
end;
end if;
end;
/


变成sybase:

CREATE PROCEDURE PROC_GSLH_GETLINKERNAMEAREA
(
@p_callerPhone VARCHAR, --主叫号码
@p_linkerArea VARCHAR output --主叫所属地区
)
as
BEGIN

declare @m_callerPhone VARCHAR( 20 ), --去掉前面0后的主叫号码
@m_phonePrefix VARCHAR( 20 ) --号码前缀,用来判断主叫所属地区
--初始化数据
select @p_linkerArea = 'NULL'

--如果主叫前面有0,刚将0去掉
select @m_callerPhone = @p_callerPhone

if SUBSTRING(@p_callerPhone,1,1) = '0'
select @m_callerPhone = SUBSTRING(@p_callerPhone,2,CHAR_LENGTH(@p_callerPhone))

--获取联系人所属地区
select @m_phonePrefix = SUBSTRING( @m_callerPhone, 1, 8 ) --移动号码号段((8位)
begin
select @p_linkerArea=MM_FREE from AAA_MOBILE_MAP where MM_MOBILE = @m_phonePrefix
end
if not exists(select MM_FREE from AAA_MOBILE_MAP where MM_MOBILE = @m_phonePrefix)

begin
select @p_linkerArea = 'NULL'

end

if @p_linkerArea = 'NULL'
select @m_phonePrefix = SUBSTRING( @m_callerPhone, 1, 7 ) --移动号码号段((7位)
begin
select @p_linkerArea=MM_FREE from AAA_MOBILE_MAP where MM_MOBILE = @m_phonePrefix
end
if not exists ( select MM_FREE from AAA_MOBILE_MAP where MM_MOBILE = @m_phonePrefix)
begin
select @p_linkerArea = 'NULL'
end

if @p_linkerArea = 'NULL'
select @m_phonePrefix = SUBSTRING( @m_callerPhone, 1, 3 ) --固话区号
begin
select @p_linkerArea=MM_FREE from AAA_MOBILE_MAP where MM_MOBILE = @m_phonePrefix
end
if not exists(select MM_FREE from AAA_MOBILE_MAP where MM_MOBILE = @m_phonePrefix)
begin
select @p_linkerArea = 'NULL'
end

if @p_linkerArea = 'NULL'
select @m_phonePrefix = SUBSTRING( @m_callerPhone, 1, 2 ) --固话区号
begin
select @p_linkerArea=MM_FREE from AAA_MOBILE_MAP where MM_MOBILE = @m_phonePrefix
end
if not exists(select MM_FREE from AAA_MOBILE_MAP where MM_MOBILE = @m_phonePrefix)
begin
select @p_linkerArea='NULL'
end
end

[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值