oracle存储过程转化成sqlserver

oracle存储过程转化成sqlserver
1. 变量的定义 ,sqlserver变量名前加@. eg: a varchar2(4) --> @a varchar(4).
2. 类型转化,将varchar2转化成varchar. eg: 参上.
3. 变量的赋值,将 :=替换成set. eg: a :='abc' --> set @a = 'abc'.
4. 字符串的拼接,将||替换成+.eg: a = 'ab'||'c' --> a='ab'+'c'.
5. 语句结构,去掉所有;.
6. if结构的改变. eg: if ... then end if; --> if ..begin ..end end.
7. 返回结果集.oracle可以定义游标类型返回.
     java中采用注册输出参数,然后获取结果集.
    sqlserver中不返回结果集,改成exec(@querySql)
     java中采用executeQuery获取结果集.
8. 注意拼接sql语句是,如果需要用单引号,需要用两个单引号进行转义.
    1个引号时,而且是前置时,就是表示所辖内容为字符串.
    2个引号时,而且是在语句中,表示一个'.第一个为转义
    3个引号时,而且是前置时,第一个表示字符串前引号,第二个是转义字符,第三个表示引号(字符内容)
    eg:a = ''' 相当于一个'
        set @retJSON = '{msg:''获取页面准备数据出错:' + SUBSTRING(ERROR_MESSAGE(), 1, 200) + ''''

 

/**
* 通用结构
*/
-- 存在则删除
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[XXX]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[XXX]
GO

create procedure XXX(@x1 varchar,...,@put varchar out)
as
begin
    -- 定义变量
    declare @a  datetime;
    declare @b  varchar(20);
    declare @c  date;
    ...;
 
  -- 定义函数体
  begin try 
    begin transaction

    -- 变量赋值
    set @b = convert(datetime,@x1,120)   
    select @b=name from t
        -- with (xlock holdlock)  表锁直至事务释放
        where id =@a
    set @a  = @a + 'b' + @b

   
    -- 使用if结构
    if @b is not null or @b = 'b'
      begin
        delete from call_list
         where  convert(datetime, substring(call_list.id, 0, 8), 112) <= @queryTime
      end
    
    -- 使用游标
    declare v_cur cursor for select 1 from a;
    open v_cur
    fetch next from v_cur into @a
    while @@fetch_status=0
      begin
        ...
      end
    close v_cur
    deallocate v_cur -- 删除对游标命名变量的引用

    print @a -- 打印语句
   
    --创建call_list索引wsj-begin
    set @v_SQL=' create index PKL_TASKID_'+@i_tenantId+' on  CALL_LIST_' + @i_tenantId +' (TASK_FK)'
    Exec (@v_SQL)
   
    exec (@querySql)  -- 返回结果集,无需输出参数java可以直接调用获取

    commit
  end try
  begin catch
    rollback
      set @retCode = '-1'
      set @retJSON = '{msg:''获取页面准备数据出错:' + SUBSTRING(ERROR_MESSAGE(), 1, 200) + ''''
  end catch
end

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值