Sqlplus中调试带cursor的存储过程

原创 2004年10月05日 18:06:00
  1. 存储过程
    1. create or replace package pkg_test as
        type t_cursor is ref cursor;
        procedure sp_getInfoCatalog(p_userId      in varchar2,
                                    p_privilege   in number,
                                    p_rowsPerPage in number,
                                    p_curPage     in number,
                                    p_rowCount    out number,
                                    cur_catalogs  out t_cursor);
      end;
      /
    2. create or replace package body pkg_test as
        procedure sp_getInfoCatalog(p_userId      in varchar2,
                                    p_privilege   in number,
                                    p_rowsPerPage in number,
                                    p_curPage     in number,
                                    p_rowCount    out number,
                                    cur_catalogs  out t_cursor) is
          v_sqlstr      varchar2(1024);
          v_sqlstrpage  varchar2(1024);
          v_rowsPerPage number(18);
          v_curPage     number(18);
          v_pageCount   number(18);
          v_pageMod     number(1);
          v_rowBegin    number(18);
          v_rowEnd      number(18);
        begin
          v_sqlstr := 'SELECT COUNT(1) FROM TUSER';
          execute immediate v_sqlstr into p_rowCount;
       
          v_sqlstr      := 'SELECT USERID,NAME,LOGINID FROM TUSER';
          v_rowsPerPage := p_rowsPerPage;
          if nvl(v_rowsPerPage, 0) < 1 then
            v_rowsPerPage := 10;
          end if;
          if p_rowCount > v_rowsPerPage then
            v_pageMod   := p_rowCount mod v_rowsPerPage;
            v_pageCount := p_rowCount / v_rowsPerPage;
            if v_pageMod > 0 then
              v_pageCount := v_pageCount + 1;
            end if;
            v_curPage := p_curPage;
            if v_curPage < 1 then
              v_curPage := 1;
            end if;
            if v_curPage > v_pageCount then
              v_curPage := v_pageCount;
            end if;
            v_rowBegin := (v_curPage - 1) * v_rowsPerPage + 1;
            v_rowEnd   := v_rowBegin + v_rowsPerPage;
            v_sqlstrpage   := 'SELECT USERID,NAME,LOGINID FROM (SELECT ORIGINTABLE.*, ROWNUM RM FROM (' ||
                          v_sqlstr ||
                          ') ORIGINTABLE WHERE ROWNUM<:W_ROWEND) WHERE RM>=:W_ROWBEGIN';
            open cur_catalogs for v_sqlstrpage
              using v_rowEnd, v_rowBegin;
          else
            open cur_catalogs for v_sqlstr;
          end if;
        end sp_getInfoCatalog;
      end pkg_test;
      /
  2. Sqlplus调试代码
    1. declare
        v_userId      tuser.userid%type;
        v_userName    tuser.name%type;
        v_userLoginId tuser.loginid%type;
        v_rowsPerPage number(4) not null := 2;
        v_curPage     number(18) not null := 4;
        v_rowsCount   number(18);
        cur_info      pkg_test.t_cursor;
      begin
        v_userId := '-9999';
        pkg_test.sp_getInfoCatalog(v_userid,
                                      0,
                                      v_rowsPerPage,
                                      v_curPage,
                                      v_rowsCount,
                                      cur_info);
        dbms_output.put_line('rowsCount = ' || v_rowsCount);
        loop
          fetch cur_info
            into v_userId, v_userName, v_userLoginId;
          exit when cur_info%NOTFOUND;
          dbms_output.put_line('userid=' || v_userId || ' name=' ||
                               v_userName);
        end loop;
        close cur_info;
      end;
      /
  3. 总结
    1. pl/sql developer 里的Command Window里面输入(Sqlplus调试代码)调试存储过程会出现“refcursor don't supported!“的错误,换到sqlplus里面调试一切正常。
  4. 参考文档
    1. SQL*Plus User's Guide and Reference Release 9.2

 

 

用SQLPLUS调试返回游标集的Oracle存储过程

CREATE OR REPLACE PACKAGE "TZH"."EMPLOYEES" ASTYPE empcur IS REF CURSOR;PROCEDURE GetEmpRecords(p_cu...
  • junmail
  • junmail
  • 2008-07-22 17:35:00
  • 1946

oracle 存储过程及REF CURSOR的使用

摘要:主要记录了oracle的stored procedure相关知识、从定义到使用。从最简单的例子入手、逐渐深入。同时后面结合了ref cursor的使用。顺便补充了在java中如何使用。...
  • chenghuaying
  • chenghuaying
  • 2014-02-27 17:16:09
  • 5028

oracle的存储过程写法以及调用,各种游标的介绍(静态,动态,sys游标的区别)

CALL  getDeptCount(); DECLARE salary varchar2(100); BEGIN getSalaryByEmpNo('测试角色',salary); DBMS_O...
  • bapinggaitianli
  • bapinggaitianli
  • 2015-06-29 15:18:09
  • 1443

oracle sqlplus 创建和调用存储过程(procedure)

oracle存储过程 语法格式 CREATE OR REPLACE PROCEDURE procedureName  IS  DECLARE  .......  BEGIN  .........
  • chen3888015
  • chen3888015
  • 2012-05-15 15:23:22
  • 3652

PLSQL游标的使用_存储过程

DECLARE    type mycur1 is ref cursor;    --定义游标mycur     v_cur_monitor     mycur1;            --定义...
  • xiaoxing1521025
  • xiaoxing1521025
  • 2013-12-13 17:12:59
  • 1820

Oracle 中调试、调用(带参数的)存储过程

㈠调试procedure:办法就是在程序中打印出变量的值.      1、sqlplus 上执行 “set serveroptput on”命令  2、在存储过程中可以用 DBMS_OUTPUT.PU...
  • zhd_superstar
  • zhd_superstar
  • 2011-02-28 23:10:00
  • 3176

SqlPlus 中,如何查看某存储过程的内容?

select text from all_source where name = '存储过程名';
  • xunzaosiyecao
  • xunzaosiyecao
  • 2014-01-08 09:38:32
  • 3041

存储过程在sqlplus中的操作

在SQLPLUS中创建、运行、调试、查看、修改和删除存储过程2011年03月11日 星期五 16:01平时基本上都是用PL/SQL DEVELOPER对ORACLE进行操作,突然有一天没有PL/SQL...
  • yywzgh
  • yywzgh
  • 2013-03-07 15:51:40
  • 8048

Oracle存储过程详解(四)-Oracle中Cursor介绍

参考资料:这里写链接内容一 概念游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存...
  • wangxy799
  • wangxy799
  • 2016-04-21 17:56:41
  • 2369

MySQL存储过程游标(cursor)示例

Mysql创建存储过程,使用游标Cursor循环更新
  • yuzongtao
  • yuzongtao
  • 2014-11-23 17:06:03
  • 2983
收藏助手
不良信息举报
您举报文章:Sqlplus中调试带cursor的存储过程
举报原因:
原因补充:

(最多只允许输入30个字)