Oracle SQL過程可以返回表嗎?我目前使用dbms_output
來打印循環中的兩個遊標的輸出,但如果它返回兩列,這看起來會更好。這是可能的程序內嗎?一個SQL過程可以返回一個表嗎?
6
A
回答
8
PL/SQL函數可以返回一個嵌套表。假設我們將嵌套表聲明爲SQL類型,我們可以使用它作爲查詢的來源,使用the TABLE() function。
這裏是一個類型,嵌套表從它內置:
SQL> create or replace type emp_dets as object (
2 empno number,
3 ename varchar2(30),
4 job varchar2(20));
5/
Type created.
SQL> create or replace type emp_dets_nt as table of emp_dets;
2/
Type created.
SQL>
這裏是它返回嵌套表的功能...
create or replace function get_emp_dets (p_dno in emp.deptno%type)
return emp_dets_nt
is
return_value emp_dets_nt;
begin
select emp_dets(empno, ename, job)
bulk collect into return_value
from emp
where deptno = p_dno;
return return_value;
end;
/
......這是怎麼它的工作原理:
SQL> select *
2 from table(get_emp_dets(10))
3/
EMPNO ENAME JOB
---------- ------------------------------ --------------------
7782 CLARK MANAGER
7839 KING PRESIDENT
7934 MILLER CLERK
SQL>
SQL類型爲我們提供了大量的功能,並允許我們在PL/SQL中構建相當複雜的API。 Find out more。
0
這也可以幫助:
DECLARE
TYPE t_emptbl IS TABLE OF scott.emp%rowtype;
v_emptbl t_emptbl;
ret_val t_emptbl;
--
Function getEmployeeList Return t_emptbl
IS
BEGIN
SELECT * bulk collect INTO v_emptbl FROM scott.emp;
-- Print nested table of records:
FOR i IN 1 .. v_emptbl.COUNT LOOP
DBMS_OUTPUT.PUT_LINE (v_emptbl(i).empno);
END LOOP;
RETURN v_emptbl;
END;
--
BEGIN
ret_val:= getEmployeeList;
END;
/
1
我認爲你可以使用Oracle光標本(如果你的Oracle版本支持):
PROCEDURE myprocedure(
mycursor OUT SYS_REFCURSOR)
AS
BEGIN
OPEN mycursor FOR SELECT * FROM mytable;
END;
END;
相關問題
- 1. 我可以從存儲過程返回一個varchar(max)嗎?
- 2. 你可以在一個SQL語句中返回多個COUNT嗎?
- 3. 你可以返回一個b2Fixture嗎?
- 4. gcc可以返回一個值嗎?
- 5. Runnable可以返回一個值嗎?
- 6. actionPerformed可以返回一個值嗎?
- 7. PHP - 可以返回一個指針嗎?
- 8. MySql可以在多個表上回滾一個sql事務嗎?
- 9. 我可以在一行上返回這個sql查詢嗎?
- 10. 一個方法可以返回一個文件嗎?
- 11. 一個方法可以返回一個NSRange嗎?
- 12. 一個函數可以返回一個數組嗎?
- 13. 一個WCF服務可以返回一個嗎?
- 14. 一個New-Module可以返回一個psobject嗎?
- 15. 可以.bat文件執行一個sql查詢並返回一個值嗎?
- 16. 我可以通過C++中的值返回一個數組嗎?
- 17. 可以通過移動返回一個局部變量嗎?
- 18. 我可以從另一個函數返回返回值嗎?
- 19. 我可以通過返回構造函數直接返回一個對象嗎?
- 20. 我可以重寫一個Lua表的返回值嗎?
- 21. 我可以從LotusScript函數返回一個列表嗎?
- 22. SQL過程將值返回給另一個過程中的一個變量
- 23. T-Sql如何從另一個存儲過程的storedproc中返回一個表
- 24. SQL服務器存儲過程返回一個表
- 25. 可以重構這個linq語句來返回一個IQueryable嗎?
- 26. Codeigniter:我可以從同一個函數返回多個值嗎?
- 27. .read()返回一個流嗎?
- 28. 一個表在SQL Server中可以有兩個標識列嗎?
- 29. 單SQL SELECT返回從一個錶行
- 30. SQL AVG返回一個int
什麼數據庫您使用的? – Lee
我正在使用Oracle – Jaqualembo
您如何使用該過程?您可以通過SYS_REFCURSOR數據類型的OUT參數從Cursor返回結果集,但您的客戶端需要支持讀取結果集。 –