首次接触oracle存储过程的使用,不太会,任务紧张,望大家帮个忙,高分相送:)--sql server 2000中的存储过程怎么改写成oracle里的
create procedure gettemptabdata(
  @cond varchar(10)
)
as 
  Declare @name varchar(50)CREATE TABLE #t ( 
  aa  varchar(50),
  bb  bigint,
  cc  bigint
)
Declare My_CURSOR CURSOR
FOR
        select name from table1
open My_CURSOR
FETCH NEXT FROM My_CURSOR  INTO @name
while (@@FETCH_STATUS = 0)   
        begin
           --根据取得的数据做相应的操作,这里主要是把取出的数据打入临时表#t
           Insert Into #t (aa,bb,cc) values(@aa,@bb,@cc)
           FETCH NEXT FROM My_CURSOR INTO @name
        end 
         CLOSE My_CURSOR
DEALLOCATE My_CURSOR
        select * from #t

解决方案 »

  1.   

    create procedure gettemptabdata(v_cond varchar(10)) 
    as
    v_name varchar(50) ;
    begin
    CREATE TABLE t ( 
      aa  varchar(50), 
      bb  number, 
      cc  number 
    ) ;
    CURSOR  My_CURSOR is select name from table1 ;
    open My_CURSOR ;
    FETCH  My_CURSOR  INTO v_name; 
    while my_cursor %found loop  
       Insert Into #t (aa,bb,cc) values(&aa,&bb,&cc) ;
       FETCH  My_CURSOR INTO v_name ;
    end loop;
    CLOSE My_CURSOR ;
    execute immediate 'select * from t' ;
    end;
            
      

  2.   

    用一个游标作为out的参数,存储过程的最后打开那个临时表的游标
      

  3.   

    oracle  游标
    我们使用的游标通常是指显式游标  学习中  
      

  4.   

    同意,也可以定义一个function return一个游标类型
      

  5.   


    create or replace package pag_test is
    type testCursor IS ref CURSOR;
    procedure GetZATAN  (recursor out testCursor)AS
        BEGIN
                  NULL;
        END;
    end pag_test;
      

  6.   

    临时表的创建
        创建Oracle临时表,可以有两种类型的临时表:会话级的临时表和事务级的临时表。
        1)会话级的临时表因为这这个临时表中的数据和你的当前会话有关系,当你当前SESSION不退出的情况下,临时表中的数据就还存在,而当你退出当前SESSION的时候,临时表中的数据就全部没有了,当然这个时候你如果以另外一个SESSION登陆的时候是看不到另外一个SESSION中插入到临时表中的数据的。即两个不同的SESSION所插入的数据是互不相干的。当某一个SESSION退出之后临时表中的数据就被截断(truncate table,即数据清空)了。会话级的临时表创建方法:Create Global Temporary Table Table_Name(Col1 Type1,Col2 Type2...) On Commit Preserve Rows;举例create global temporary table Student(Stu_id Number(5),Class_id  Number(5),Stu_Name Varchar2(8),Stu_Memo varchar2(200)) on Commit Preserve Rows ; 
        2)事务级临时表是指该临时表与事务相关,当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和会话级的临时表的一致(包括退出SESSION的时候,事务级的临时表也会被自动截断)。事务级临时表的创建方法:Create Global Temporary Table Table_Name(Col1 Type1,Col2 Type2...) On Commit Delete Rows;举例:create global temporary table Classes(Class_id Number(5),Class_Name Varchar2(8),Class_Memo varchar2(200)) on Commit delete Rows ;
        3)、两种不通类型的临时表的区别:语法上,会话级临时表采用on commit preserve rows而事务级则采用on commit delete rows;用法上,会话级别只有当会话结束临时表中的数据才会被截断,而且事务级临时表则不管是commit、rollback或者是会话结束,临时表中的数据都将被截断。