关于oracle转换sql server的问题

xzl16843 2006-08-14 08:51:07
SQL SERVER一点都不熟啊,帮忙改一个例子参考一下,谢谢各位了!
CREATE OR REPLACE Procedure PROC_INPUT_BYFEE

Is

l_sTrueTel T_TRUETEL.TrueTel%Type;
l_sVirtualTel T_VIRTUALTEL.VirtualTel%Type;
l_sServiceType T_SGIP_MS.ServiceType%Type;
l_iCount int
l_iExist int

--当前处于注册状态的用户(只在1号运行)
Cursor Cu_BY_USER_NOW Is
Select a.TrueTel,a.VirtualTel
From T_VIRTUALTEL a
Where a.ActiveFlag=1
AND TO_CHAR(SYSDATE, 'DD')='01';
Cursor Cu_BY_USER_ADD Is
Select a.TrueTel,a.VirtualTel
From T_SERVICEOP a
Where a.OpType=2
And TO_CHAR(a.OpDate,'YYYYMMDD')=TO_CHAR(SYSDATE-1,'YYYYMMDD')
And TO_CHAR(a.OpDate,'DD')>='01'
And TO_CHAR(a.OpDate,'DD')<='24'
And TO_CHAR(SYSDATE, 'DD')>='02'
And TO_CHAR(SYSDATE, 'DD')<='25';
...全文
167 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzl16843 2006-08-14
  • 打赏
  • 举报
回复
我是SQL什么都不懂,sql server 2000 也不懂,不过刚在网上查了一下资料,知道怎么改了.
不过还是要谢谢你 !
Reeezak 2006-08-14
  • 打赏
  • 举报
回复
唉~~~

我不是看不懂Oracle的这种写法…………

看来lz根本没有学过SQL92啊,直接用SQL99的东西…………

PL/SQL能明白这是什么数据类型,完全是因为它也知道那个字段到底是什么类型,当你删了那个表或那个字段之后,你就会发现,它会报错的,原因跟我现在一样,不知道那个字段是什么类型

希望你的问题早日解决
xzl16843 2006-08-14
  • 打赏
  • 举报
回复
下面是存储过程的一部分
Begin
--在网用户计费
Begin
For CurrentPart In Cu_BY_USER_NOW Loop --loop1
l_sTrueTel := CurrentPart.TrueTel;
l_sVirtualTel := CurrentPart.VirtualTel;
l_sTrueTel := Trim(l_sTrueTel);
l_sVirtualTel := Trim(l_sVirtualTel);

If (lengthb(l_sTrueTel)>0 And lengthb(l_sVirtualTel)>0) Then
--该真实号码本月已对该虚拟号码计费
l_iExist := 0;
Begin
Select l_iExist = Count(*)
From T_SGIP_MS
Where ChargeNumber=l_sTrueTel
And FeeMonth=to_char(Sysdate,'YYYYMM')
And VirtualTel=l_sVirtualTel;
Exception
When Others Then
l_iExist := 0;
End;

--只有该真实号码本月没有对该虚拟号码计费才计费
If l_iExist=0 Then
--本月用户已计包月费个数
l_iCount := 0;
Begin
Select l_iCount = Count(*)
From T_SGIP_MS
Where ChargeNumber=l_sTrueTel
And FeeMonth=to_char(Sysdate,'YYYYMM');
Exception
When Others Then
l_iCount := 0;
End;

--设定业务代码
if l_iCount = 0 Then
l_sServiceType := 'CHBY15';
elsif l_iCount = 1 Then
l_sServiceType := 'CHBYX1';
elsif l_iCount = 2 Then
l_sServiceType := 'CHBYX2';
elsif l_iCount = 3 Then
l_sServiceType := 'CHBYX3';
elsif l_iCount = 4 Then
l_sServiceType := 'CHBYX4';
elsif l_iCount = 5 Then
l_sServiceType := 'CHBYX5';
elsif l_iCount = 6 Then
l_sServiceType := 'CHBYX6';
elsif l_iCount = 7 Then
l_sServiceType := 'CHBYX7';
elsif l_iCount = 8 Then
l_sServiceType := 'CHBYX8';
elsif l_iCount = 9 Then
l_sServiceType := 'CHBYX9';
else
Null;
end If;

--一个月内最多允许计费10次
If l_iCount < 10 Then
Begin
Insert Into t_sgip_ms(OpType,OpUser,Seq,SPNumber,UserNumber,ChargeNumber,MessageContent,CorpId,ServiceType, FeeType,FeeValue,GivenValue,AgentFlag,MOrelatetoMTFlag,Priority,ReportFlag,FeeMonth,VirtualTel)
Values(0,'job',s_sgip_ms.Nextval,'8417', l_sTrueTel,l_sTrueTel,'包月计费:' || l_sVirtualTel,'03713',l_sServiceType, 3,'1500','0',0,3,9,1,TO_CHAR(Sysdate,'YYYYMM'),l_sVirtualTel);
Commit;
Exception
When Others Then
Rollback;
End;
End If;
End If;
End If;
End Loop;
Exception
When Others Then
Rollback;
End;
xzl16843 2006-08-14
  • 打赏
  • 举报
回复
这样就是定义l_sTrueTel的类型和表中T_TRUETEL的字段TrueTel一样。
Reeezak 2006-08-14
  • 打赏
  • 举报
回复
l_sTrueTel T_TRUETEL.TrueTel%Type;
l_sVirtualTel T_VIRTUALTEL.VirtualTel%Type;
l_sServiceType T_SGIP_MS.ServiceType%Type;
这个当然明白

但是这些列是什么类型呢?

xzl16843 2006-08-14
  • 打赏
  • 举报
回复
全部发上去太长了,不好意思麻烦大家阿 ! T_TRUETEL、T_SGIP_MS是表,TrueTel、VirtualTel是T_TRUETEL表中的列
Reeezak 2006-08-14
  • 打赏
  • 举报
回复
大哥,oracle的这种面向对象的SQL语句,你不给出那些相关信息,如何能改写?


另外,你这个存储过程是完整的?怎么看都不像完整的啊
xzl16843 2006-08-14
  • 打赏
  • 举报
回复
就你一个人顶,分都给你了。

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧