SQL SERVER 存储过程,转换成ORACLE存储过程

ALTERprocedure[dbo].[UP_UserInfo_List_select]@StartIndexint=1,--分页开始序号参数@EndIndexint=... ALTER procedure [dbo].[UP_UserInfo_List_select]@StartIndex int=1,--分页开始序号 参数@EndIndex int=10,--分页结束序号@WhereSql nvarchar(2000)='',--分页查询条件@RecordCount int=0 output --当前条件下的总记录数asbegindeclare @sql nvarchar(max)declare @total intset @sql='select @n=count(1) from UserInfo a where 1=1 '+@WhereSqlexec sp_executesql @sql, N'@n int output',@total output --@sql相当于procedure主体,N'@n int'相当于参数部分,相当于procedure调用set @RecordCount=@totalset @sql='select * from (select row_number() over(order by t1.UserId) as Row, t1.UserId,t1.UserName,t1.RoleId,t1.IsLock,t1.[Desc] from UserInfo t1 ) a where Row between '+convert(varchar(100), @StartIndex)+' and '+convert(varchar(100), @EndIndex) +@WhereSqlexec(@sql) end-------如何把这个sql server存储过程改成oracle呢? 展开
 我来答
fly夜飞纷飞
2018-03-14 · TA获得超过132个赞
知道小有建树答主
回答量:168
采纳率:85%
帮助的人:111万
展开全部

你这个过程其实就是分页查询用户信息是吧

--利用游标返回结果集
CREATE OR REPLACE PACKAGE pkg_query AS TYPE cur_query IS REF CURSOR;
END pkg_query;


CREATE OR REPLACE PROCEDURE UP_UserInfo_List_select
       (
        WhereSql         in  varchar2,   --查询条件
       橡袭 StartIndex       in  Number,  --当前页
        EndIndex         in  Number,  --每页显示记录条数
        RecordCount      out Number,
        v_cur         弯答   out SYS_REFCURSOR)   --返回的结果集
IS
   v_sql VARCHAR2(1000) := '';      --sql语句
BEGIN
   --查总记录数
   v_sql := 'SELECT TO_NUMBER(COUNT(*)) FROM UserInfo WHERE 1=1';
   IF WhereSql IS NOT NULL or WhereSql <> '' THEN
       v_sql := v_sql || WhereSql;
   END IF;
   EXECUTE IMMEDIATE v_sql INTO RecordCount;

   --实现分页查询
   v_sql := 'SELECT * FROM (SELECT A.*, rownum r FROM (SELECT UserId,UserName,RoleId,IsLock,Desc from UserInfo ';
   IF WhereSql IS NOT NULL or WhereSql <> '' THEN
       v_sql := v_sql || ' WHERE 1=1' || WhereSql || ' ORDER BY UserId';
   END IF;

   v_sql := v_sql || ') A WHERE rownum <= ' || EndIndex || ') B WHERE r >= '|| StartIndex;
   DBMS_OUTPUT.put_line(v_sql);
   
   OPEN v_cur FOR v_sql;
   
END UP_UserInfo_List_select;

--执行埋如慧,plsql这里是看不到结果集,找到这个过程点测试,才能看到。当然你在程序里使用也是能返回的。
declare
RecordCount number :=0;
v_cur pkg_query.cur_query;
begin
  UP_UserInfo_List_select('',1,10,RecordCount,v_cur);
  DBMS_OUTPUT.put_line(RecordCount);
end;
今至电子科技有限公司
2024-08-23 广告
数据库备份是确保数据安全与业务连续性的关键环节。我们上海今至电子科技有限公司高度重视数据保护,定期执行全面的数据库备份策略。这包括使用先进工具和技术,对关键业务数据进行自动化备份,并存储在安全可靠的外部存储介质或云端。通过定期验证备份的完整... 点击进入详情页
本回答由今至电子科技有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式