建议将
  SELECT COUNT(*) into o_count(counter)
           FROM totfin
 WHERE passno=i_passno(counter);
改为
      select nvl(sum(1),-1)
       into o_count(counter)
        FROM totfin
     WHERE passno=i_passno(counter);
否则,原句当passno找不到时会触发一个异常,或者你捕捉这个异常。 源程序缺少了这句啊。

解决方案 »

  1.   

    创建包必须首先创建包规范,创建包规范的语法如下:CREATE [OR REPLACE] PACKAGE package_name
    {AS|IS}
    public_variable_declarations |
    public_type_declarations |
    public_exception_declarations |
    public_cursor_declarations |
    function_declarations |
    procedure_specifications
    END [package_name] 创建包主体使用CREATE PACKAGE BODY语句:CREATE [OR REPLACE] PACKAGE BODY package_name
    {AS|IS}
    private_variable_declarations |
    private_type_declarations |
    private_exception_declarations |
    private_cursor_declarations |
    function_declarations |
    procedure_specifications
    END [package_name] 
      

  2.   

    返回数据集
    CREATE OR REPLACE PACKAGE pkg_test
    AS
       TYPE myrctype IS REF CURSOR;   PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);
    END pkg_test;
    /CREATE OR REPLACE PACKAGE BODY pkg_test
    AS
       PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)
       IS
          sqlstr   VARCHAR2 (500);
       BEGIN
          IF p_id = 0 THEN
             OPEN p_rc FOR
                SELECT ID, NAME, sex, address, postcode, birthday
                  FROM student;
          ELSE
             sqlstr :=
                'select id,name,sex,address,postcode,birthday
               from student where id=:w_id';
             OPEN p_rc FOR sqlstr USING p_id;
          END IF;
       END get;
    END pkg_test;
    /
      

  3.   

    sqlstr :=
                'select id,name,sex,address,postcode,birthday
               from student where id=:w_id';
    谢谢楼上的,但id=:w_id何解?
      

  4.   

    sqlstr :=
                'select id,name,sex,address,postcode,birthday
               from student where id=:w_id';
    使用的是动态的语句,id=:w_id 的意思是 :
                      =:w_id  可以认为是变量。
      

  5.   

    =:w_id  关键问题是前面没有定义呀!
    是存储过程的输入变量,还是PL/SQL的变量?
      

  6.   

    CREATE OR REPLACE PACKAGE tmp_pack
    AS
    type g_rs is ref curosr;PROCEDURE proc_tmp(
    i_passno IN CHAR,rs out g_rs);
    END tmp_pack;CREATE OR REPLACE PACKAGE BODY tmp_pack
    AS
    PROCEDURE proc_tmp(i_passno IN CHAR,rs out g_rs)
    ASstr varchar2(2000);BEGINstr:= 'SELECT * FROM totfin
        WHERE passno =:id;
    OPEN rs FOR str USING i_passno;
    END proc_tmp;END tmp_pack;
      

  7.   

    id=:w_id 
    是一个占位符,不用官它...
    p_id 才是它的真正变量