Oracle SQLプロシージャが表を戻すことはできますか?私は現在dbms_output
を使って2つのカーソルの出力をループしていますが、2つの列が返されていればそれはより美しく見えます。プロシージャ内で可能なのでしょうか?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. SQLプロシージャー・エラー
- 2. フラグメントがキーを押し戻すことはできますか?
- 3. RichTextBoxを元に戻すと元に戻すことができますか?
- 4. UIModalTransitionStyleCoverVerticalを元に戻すことはできますか?
- 5. チェックアウトを元に戻すことはできますか?
- 6. ビューからシーンに戻ることはできますか?
- 7. スクロールバーを非表示にすることはできますが、オーバーフローを防ぐことはできますか?
- 8. TWebBrowserは元に戻すかやり直すことができます
- 9. ポインタをゼロに戻すことができません
- 10. 大きなテキストをサーバーに戻すことはできますか? ASP.NET MVC
- 11. TextChangedで元に戻すことができません
- 12. pl/sqlプロシージャーで変数を宣言するときに構文エラーが発生する
- 13. SQLでSELECTでマージすることはできますか?
- 14. グループボックスを非表示にすることはできますが、内容は表示できますか?
- 15. SQL Server 2005パッケージをスケジュールすることはできますか?
- 16. DapperはSQL関数から値を返すことができますか?
- 17. スヌッチをPropertyからsimplesnitchに戻すことはできますか?
- 18. コミットしたことがない場合、 'git reset -hard HEAD'を元に戻すことはできますか?
- 19. ProgressBarを元に戻すことはできません。
- 20. JFaceウィザードで戻るボタンを無効にすることはできますか?
- 21. ストアでSencha Touch Card Layoutを元に戻すことはできますか?
- 22. youtube APIでorderbyの結果を元に戻すことはできますか?
- 23. Oracleプロシージャーからデータ固有ストアード・プロシージャーを呼び出す
- 24. GraphicsDevice - フルスクリーンから戻ることができません
- 25. Iphone:ナビゲーションバーのコントローラから戻ることができません
- 26. TabControlは最初のタブに戻ります。これは防ぐことができますか?
- 27. OpenFacesデータテーブルdataTablePaginatorは戻ることができません
- 28. SQLに「ヌル行」を含めることはできますか?
- 29. クロムデバッガの戻り値を操作することはできますか?
- 30. ジェネリッククラスをメソッド/戻り型にすることはできますか?
あなたはどのようなデータベースを使用していますか? – Lee
私はOracleを使用しています – Jaqualembo
どのように手続きを消費していますか?結果セットをCursorからSYS_REFCURSORデータ型のOUTパラメータに戻すことはできますが、クライアントは結果セットの読込みをサポートする必要があります。 –