2011-12-13 18 views
2
CREATE PROCEDURE(p_cur OUT a_cur) 
IS 
type rec is record(a varchar2(2), b number, c number); 
type tab is table of rec; 
tab1 tab:=tab(); 
begin 

tab1.extend; 
tab1(tab1.last).a:='as'; 
tab1(tab1.last).b:=2; 
tab1(tab1.last).c:=3; 
tab1.extend; 
tab1(tab1.last).a:='jj'; 
tab1(tab1.last).b:=2; 
tab1(tab1.last).c:=3; 

--??--- 
end; 

我已经在这里创造一个嵌套表TAB1,但我的问题是,我想在一个光标使用此嵌套表,并希望返回使用此嵌套表全部记录,限制是我不想使用任何临时表。 我使用RDBMS作为ORACLE如何使用嵌套表中的光标

+0

我想使用类似...选择a,b,c来自光标中的tab1以将光标返回到前端; – gaurav

回答

3

如果你想使用一个集合,就好像它是一个表,那么你就NEDD看一个的TABLE()功能:

这里有一个例子:http://www.dobosz.at/oracle/select-from-plsql-table/

而另一个很好的资源在这里:http://www.databasejournal.com/features/oracle/article.php/2222781/Returning-Rows-Through-a-Table-Function-in-Oracle.htm

你需要那么在你的程序中填充它,然后从中选择之前宣布在数据库中的集合类型。 Can a table variable be used in a select statement where clause?

看看,因为它可以帮助你与你想达到什么目的:

我这里使用这种方法回答的问题。

希望它可以帮助...

编辑:在回答你的问题的代码应该做你想要什么。我没有测试过,但它应该非常接近你需要的,你可以根据需要进行调试。

-- Create the relevent Object 
CREATE TYPE data_obj_type AS OBJECT (
    a VARCHAR2(2), 
    b NUMBER, 
    c NUMBER 
); 

类型创建

-- Create the collection to hold the objects 
CREATE TYPE table_obj_type IS TABLE OF data_obj_type; 

类型创建

CREATE OR REPLACE 
PROCEDURE cursor_values(
    p_cur OUT sys_refcursor 
) 
IS 
    -- Create a variable and initialise it 
    tab1 table_obj_type := table_obj_type(); 
BEGIN 
    -- Populate the tab1 collection 
    tab1.extend; 
    tab1(tab1.last) := data_obj_type('as', 2, 3); 
    tab1.extend; 
    tab1(tab1.last) := data_obj_type('jj', 2, 3); 
    -- 
    -- Open ref_cursor for output 
    OPEN p_cur FOR 
     SELECT a, 
      b, 
      c 
     FROM TABLE(CAST(tab1 AS table_obj_type)); 
END cursor_values; 

注意:这是从这个页面修改代码: http://www.akadia.com/services/ora_return_result_set.html

+0

:http://stackoverflow.com/questions/8489520/ora-22905-cannot-access-rows-from-a-non-nested-table-item – gaurav

+0

:请看我写在上面的链接代码,请找到我的代码有什么问题 – gaurav

+0

哇,这个问题的代码看起来非常过于复杂。这个问题说你只是想从一个集合中选择并将它们返回到一个游标中。这仍然是这样吗? – Ollie

相关问题