传入参数为  AA--存放一条SELECT语句,BB--起始位置,CC--结束位置 三个参数
要求返回一结果,实现查出表中第BB条到CC条的记录,请问此存储过程怎么写啊,
拜托各位,帮帮忙,急!!!

解决方案 »

  1.   

    CREATE OR REPLACE PROCEDURE QUERY(AA VARCHAR2(1000), BB NUMBER(10), CC NUMBER(10)) IS
    V_STR : VARCHAR2(1000);
    BEGIN
       V_STR := AA || ' AND (ROWMUN >=' || TO_CHAR(BB) || ' AND ROWNUM <= ' || TO_CHAR(CC) || ') ';
       EXECUTE IMMEDIATE V_STR;
    END QUERY;
    关键是
    EXECUTE IMMEDIATE 是执行一个字符串, 这个字符串中是一个查询语句, 你自己扩展一下
      

  2.   

    麻烦了,要用包,csdn上有很多例子
      

  3.   

    学习,to leborety(那只螃蟹),麻烦你能贴上一个例子的链接吗
      

  4.   

    --预先在包或库中定义对象
    TYPE T_TOTAL_DATA IS TABLE OF VARCHAR2(1000) INDEX BY BINARY_INTEGER;
    --在包中写如下函数
    CREATE OR REPLACE FUNCTION QUERY(AA VARCHAR2(1000), BB NUMBER(10), CC NUMBER(10)) RETURN T_TOTAL_DATA 
    IS
    V_STR : VARCHAR2(1000);
    IT_DATA T_TOTAL_DATA;  
    a number(3):=1;
    type cur_type is ref cursor; --定义默认游标类型
    TYPE rec_type IS RECORD (
     sqlstr varchar2(1000),
     num_no NUMBER(3));
       rec rec_type;
    BEGIN
       V_STR := AA || ' AND (ROWMUN >=' || TO_CHAR(BB) || ' AND ROWNUM <= ' || TO_CHAR(CC) || ') ';
    --   EXECUTE IMMEDIATE V_STR;
    FOR I IN (1.. (CC-BB))
    LOOP
     IT_DATA(I):='';
    END LOOP;OPEN cur_Getval  FOR V_STR ;
    LOOP
    Fetch cur_Getval  into rec.sqlstr,rec.num_no;
    exit when cur_Getval%notfound;
    IT_DATA(a) :=rec.sqlstr;RETURN IT_DATA;
    END ;未经测试,意在提供思路.
      

  5.   

    hrui99(助人为本,潜水为行) 的方法是可行的,不过V_STR := AA || ' AND (ROWMUN >=' || TO_CHAR(BB) || ' AND ROWNUM <= ' || TO_CHAR(CC) || ') ';
    语句是查不出结果的,因为ROWNUM是一个伪列,当ROWNUM > 一个数时,如果这个数是大于等于1的数,此表达式返回FALSE,也就是如果BB为一个大于等于1的数,你得到的结果永远是空,你可以改造一下,得到你的结果