怎么样在ORACEL函数中建临时表

解决方案 »

  1.   

    /--给个例子,试一下:create table SSS
    (
      ID     NUMBER,
      VALUE1 NUMBER
    )insert into sss values(1,2);CREATE OR REPLACE PROCEDURE BBBB(PO_RESULT OUT SYS_REFCURSOR) IS
    BEGIN
      execute immediate 'CREATE GLOBAL TEMPORARY TABLE AAA (NUM VARCHAR2(10),QTY INTEGER) ON  COMMIT  DELETE ROWS ';  execute immediate 'insert into AAA SELECT * FROM sss';  OPEN PO_RESULT FOR 'select * from AAA';
    END BBBB;
      

  2.   

    临时表在procedure和function中的用法大致相同。只要一commit,即自动删除临时表中的所有内容。
      

  3.   

    高手,在函数中执行报错呀,谢谢!create or replace type CTest as object
    (
    tid varchar2(6),
    tname varchar2(20)
    )
    create table SSS
    (
      ID     NUMBER,
      VALUE1 NUMBER
    )insert into sss values(1,2);
    /
    create or replace type tabCtest is table of cTest/
    create or replace function myTest return tabctest
    is  execute immediate 'CREATE GLOBAL TEMPORARY TABLE AAA (NUM VARCHAR2(10),QTY INTEGER) ON  COMMIT  DELETE ROWS ';  execute immediate 'insert into AAA SELECT * FROM sss';
      
    Result tabctest := tabctest();
    begin
    Result := tabctest();
    Result.extend;
    Result(Result.count) := CTEST(NULL,NULL);
    Result(Result.count).tid := '1';
    Result(Result.count).tname := 'name1';Result.extend;
    Result(Result.count) := CTEST(NULL,NULL);
    Result(Result.count).tid := '2';
    Result(Result.count).tname := 'name2';
    return(Result);
    end myTest;
    /select *
    from table(cast(myTest as tabctest))
      

  4.   

    在函数中不用执行DML、DDL语句,用存储过程吧。
      

  5.   

    如果必须要用函数的话,可以在函数代码中调用一个存储过程,这个存储过程就执行DML、DDL语句。