在Oracle的存储过程中如果要返回一个数据集(也就是一个Table)必须要用到游标,游标是不是必须在包里定义,能不能在一个系统中只定义一个游标,所有的存储过程要返回数据集都用这一个游标,但会不会产生两个以上用户同时要返回数据集时数据有误?还有请问大家在写Oracle存储过程时有什么经验没有?
请问怎样得到一个存储过程和包的输入输出参数属性?在SQL中是
select PARAMETER_NAME,PARAMETER_MODE,DATA_TYPE,NUMERIC_PRECISION,NUMERIC_SCALE,CHARACTER_MAXIMUM_LENGTH from INFORMATION_SCHEMA.PARAMETERS where SPECIFIC_NAME='" +ProcedureName+ "' order by ORDINAL_POSITION小弟第一次使用Oracle

解决方案 »

  1.   

    还有能不能在包中只定义一个游标,不定义存储过程的一些参数,在其他的存储过程中用这个游标,比如:
    CREATE OR REPLACE  PACKAGE "SCOTT"."HWTYPE" as
      TYPE HWCURSOR IS REF CURSOR;
    end;
    CREATE OR REPLACE  PROCEDURE "SCOTT"."PROC_TEST_CURSOR" (DDD OUT 
        HWTYPE.HWCURSOR)
    as
    begin
     
     --这样可以动态设置游标了。
     open DDD for SELECT DEPTNO,DNAME,LOC FROM DEPT;
    end;
      

  2.   

    虽然oracle里可以在存储过程(函数)里返回一个记录集(游标),但我一般不这么做,我觉得,返回一个打开的游标是不好的习惯,再说即使有需要记录集的场合下,完全可以在存储过程里完成对该记录集的生成,并完成数据的处理。一家之言,仅供参考。你上面说的只定义一个游标,....若其他存储过程在同一个包内的话,可以调用该游标的....
      

  3.   

    但是我需要的是在Oracle中把捞到的数据集返回到应用程序中进行显示,如果不用游标还有没有好的办法?
    我说的只定义一个游标是不想在包中包含存储过程的参数,
    CREATE OR REPLACE  PACKAGE "SCOTT"."HWTYPE" as
      TYPE HWCURSOR IS REF CURSOR;
    end;
    CREATE OR REPLACE  PROCEDURE "SCOTT"."PROC_TEST_CURSOR" (DDD OUT 
        HWTYPE.HWCURSOR)
    as
    begin
     
     --这样可以动态设置游标了。
     open DDD for SELECT DEPTNO,DNAME,LOC FROM DEPT;
    end;
    如上面所写在一个包中没有包含存储过程的参数,但在存储过程中可以直接使用定义的游标。不知道这样行不行?
    如果只定义一个游标那么在有两个以上用户同时使用时会不会产生问题?因为一个用户已经使用了这个游标,并且这个游标处于打开状态?