刚开始学oracle,我创建一个存储过程,里面就一句: select * from a 老是出错,我网上搜了一下,有人说要into 到一个变量,有人说要用游标,到底该怎么样才能把结果送到.net的dataset里去啊,最好给个例子

解决方案 »

  1.   

    procedure和function是不能直接用select做query只能
    1。 通过into,如果是单条记录,直接select name, age, ... into 某个定义的变量1,变量2,... from a; 如果多条结构的记录集,需要用到cursor,通过对cursor的loop,来把游标into到变量里。2。 通过execute immediate 作为动态sql执行。
      

  2.   

    就一句,为啥还用存储过程呀
    在pl/sql中 要不用游标显示查询结果,9i提供了一个 "管道化表函数"可以试试
      

  3.   

    lz需要在procedure中实现复杂的逻辑吗?
    如果一句SELECT能实现,就不需要用procedure。
      

  4.   

    存储过程中不能单独使用SELECT * FROM  能使用INSERT INTO TABLE 
    SELECT * FROM TABLE_NAME
    或者SELECT ID INTO V_ID FROM TABLE_NAME来赋值我记得是在做DDL语句的时候  要加上EXECUTE IMMEDIATE 'SQL';否则会报错
      

  5.   

    for v_RS in (select T.DAY_ID V_DATE
                  from TABLE_NAME where DAY_ID>='20090501'
                   and  day_id<='20090531'
                  GROUP BY DAY_ID
                  order by day_id)
    loop
    INSERT INTO TABLE_TEMP SELECT V_RS.V_DATE FROM DUAL;
    COMMIT;
    end loop;
    --V_RS.V_DATE就是那个结果集
      

  6.   

    oracle和SQL Server是不一样的,如果要把结果集送到你的程序里,你必须使用 package技术才行。
      

  7.   

    你需要把查询结果放在一个游标里才行啊,我给你个例子吧:
    create procedure p (my_cur out sys_refcursor)
    as 
    begin
      open my_cur for 
        select * from emp;
    end;
      

  8.   

    请参考下面的网址:
    http://www.oradev.com/ref_cursor.jsp
      

  9.   

    你的意思就是要将操作的数据返回到代码中进行调用对吗?因为单纯的select返回的是数据的集合,而存储过程是对数据操作的集合,不会返回数据,只能通过调用的方式来对数据进行相应的操作,你现在需要就应该是funcation,使用函数可以通过相应的操作语句来返回相应的数据,而且函数是必须要对数据进行返回的,至于函数体中的具体select * ..into xxxx这个就是函数体语句的要求问题了,以上都是个人的理解,希望能对你有所帮助。