如何在oracle Begin- End内部输出Select语句

时间:2019-05-27 06:33:53

标签: oracle

基本上我来自MS SQL后台,但是这种情况是我需要在Oracle中创建一个具有临时表并在Begin内的查询-End im更新该表的行,最后我想要一个select语句来输出桌子。

CREATE GLOBAL TEMPORARY TABLE temp_users ( 
   id number(5)  NOT NULL, 
   name varchar2(50)  NOT NULL, 
   surname varchar2(50)  NOT NULL ) ON COMMIT DELETE ROWS;

Declare  
dd varchar(400); 
Begin 




    INSERT INTO temp_users VALUES (1, 'John', 'Smith'); 
    INSERT INTO temp_users VALUES (2, 'Anne', 'Parker'); 
    INSERT INTO temp_users VALUES (3, 'Kate', 'Doe'); 
    INSERT INTO temp_users VALUES (1, 'John', 'Smith'); 
    INSERT INTO temp_users VALUES (2, 'Anne', 'Parker'); 
    INSERT INTO temp_users VALUES (3, 'Kate', 'Doe'); 



    // this code i have used to return the table
     execute immediate'SELECT * FROM temp_users'; 



     execute immediate 'drop table temp_users'; 

End;

1 个答案:

答案 0 :(得分:0)

有几种选择,您可以使用bulk collect into子句简单地返回所有内容,例如在此Oracle example中,然后将其返回到外部。

或者您可以使用PIPELINED子句,在这种情况下,您将创建一个游标并将其通过管道传递到外部,例如:

FUNCTION some_fn
(
  in_1 IN NUMBER,
  in_2 IN VARCHAR2 DEFAULT NULL
)
RETURN some_table_type PIPELINED
[…]
FOR l_row IN c_some_cursor
      LOOP
        PIPE ROW(l_row);
 END LOOP;

在两种情况下,您都应声明表变量 TYPE ,例如here。您的函数应该(因为函数可能最适合您)返回该表变量类型。