'return table from oracle procedure
How do I return the table of my procedure whenever I call it?
-- this code will find all the empty categories.
create or replace procedure empty_cats(emptyCat OUT DEPT%rowtype) as
begin
select * into emptyCat from DEPT where CatNO not in (select CatNO from posts);
end;
I'm using oracle 11 XE & Application Express 4.0.2.00.09
Solution 1:[1]
Option 1: A Cursor
CREATE PROCEDURE empty_cats(
o_cursor OUT SYS_REFCURSOR
) AS
BEGIN
OPEN o_cursor FOR
SELECT *
FROM dept
WHERE CatNO NOT IN (SELECT CatNO FROM posts);
END;
/
Option 2: DBMS_SQL.RETURN_RESULT (From Oracle 12.1)
CREATE PROCEDURE empty_cats
AS
v_cursor SYS_REFCURSOR;
BEGIN
OPEN v_cursor FOR
SELECT *
FROM dept
WHERE CatNO NOT IN (SELECT CatNO FROM posts);
DBMS_SQL.RETURN_RESULT(v_cursor);
END;
/
Option 3: A Collection
Create an object and a collection type:
CREATE TYPE dept_obj AS OBJECT(
col1 NUMBER,
col2 VARCHAR2(20),
col3 DATE
);
CREATE TYPE dept_obj_table AS TABLE OF dept_obj;
Then:
CREATE PROCEDURE empty_cats(
o_depts OUT dept_obj_table
) AS
BEGIN
SELECT dept_obj(col1, col2, col3)
BULK COLLECT INTO o_depts
FROM dept
WHERE CatNO NOT IN (SELECT CatNO FROM posts);
END;
/
or
CREATE FUNCTION empty_cats
RETURN dept_obj_table AS
v_depts dept_obj_table;
BEGIN
SELECT dept_obj(col1, col2, col3)
BULK COLLECT INTO v_depts
FROM dept
WHERE CatNO NOT IN (SELECT CatNO FROM posts);
RETURN v_depts;
END;
/
Option 4: SQL_MACRO(TABLE) (From Oracle 19.7)
CREATE FUNCTION empty_cats
RETURN VARCHAR2 SQL_MACRO(TABLE) IS
BEGIN
RETURN q'{SELECT * FROM dept WHERE CatNO NOT IN (SELECT CatNO FROM posts)}';
END;
/
db<>fiddle here
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
