■SI Object Browser 掲示板
|
ユーザの皆様、開発者、サポート担当者の交流のための掲示板です! ユーザーの皆様同士で教え合ったりもできる交流の場にしたいと思っていますので、相互協力をよろしくお願いします。 なお、過去に同じようなQ&Aがあるケースも多いので、投稿前にキーワード検索してみてください。 |
|
| ※各投稿のカラーは対象となる製品に対応しています。【■…OB ■…OBER ■…全般 ■…その他】 ※ライセンスに関するお問合せにつきましては、お問い合わせページよりご連絡いただきますようお願いいたします。 ※誹謗中傷や公序良俗に反する書き込みはご遠慮ください。運営側の判断によりメッセージを削除する場合があります。 ※環境依存や技術的調査が必要な問題については掲示板上ではお答えしかねます。ご了承ください。 | |
プロシージャの出力引数にレコードセット指定
2003/02/06 16:00
OB
1
さぼ
ストアドプロシージャの出力引数に以下の様な、ユーザ指定型のレコードセットを格納する方法を調べています。ユーザ指定と言うのは例えばカーソル(テーブルを等結合する為)や任意のデータ型(配列)です。
Oracle8iの「アプリケーション開発者ガイド基礎編」(9-9ページ)より
CREATE PROCEDURE Get_emp_rec (
Emp_number IN Emp_tab.Empno%TYPE,
Emp_ret OUT Emp_tab%ROWTYPE
) AS
BEGIN
SELECT Empno, Ename, Job, Mgr, Hiredate, Sal, Comm, Deptno
INTO Emp_ret
FROM Emp_tab
WHERE Empno = Emp_number;
END;
/
出力引数の「Emp_tab」をユーザ指定型にできないでしょうか?
・ASとBEGINの間にカーソル宣言して「Emp_tab」の代わりにカーソル名を指定したら
コンパイルエラーになってしまいました。
Oracle8iの「アプリケーション開発者ガイド基礎編」(9-9ページ)より
CREATE PROCEDURE Get_emp_rec (
Emp_number IN Emp_tab.Empno%TYPE,
Emp_ret OUT Emp_tab%ROWTYPE
) AS
BEGIN
SELECT Empno, Ename, Job, Mgr, Hiredate, Sal, Comm, Deptno
INTO Emp_ret
FROM Emp_tab
WHERE Empno = Emp_number;
END;
/
出力引数の「Emp_tab」をユーザ指定型にできないでしょうか?
・ASとBEGINの間にカーソル宣言して「Emp_tab」の代わりにカーソル名を指定したら
コンパイルエラーになってしまいました。
返信を投稿
OB
はじめ
パッケージにカーソル(配列)を宣言し、
出力引数にそのレコード型を指定する方法があります。
CREATE PACKAGE PACKAGE1
AS
CURSOR Emp_cur(Emp_number IN Emp_tab.Empno%TYPE) IS
BEGIN
SELECT Empno, Ename, Job, Mgr, Hiredate, Sal, Comm, Deptno
FROM Emp_tab
WHERE Empno = Emp_number;
END;
END PACKAGE1;
/
CREATE PROCEDURE Get_emp_rec(
Emp_rec OUT PACKAGE1.Emp_cur%ROWTYPE
) AS
BEGIN
OPEN PACKAGE1.Emp_cur;
FETCH PACKAGE1.Emp_cur INTO Emp_rec;
CLOSE PACKAGE1.Emp_cur;
END;
/
こんな感じで。
出力引数にそのレコード型を指定する方法があります。
CREATE PACKAGE PACKAGE1
AS
CURSOR Emp_cur(Emp_number IN Emp_tab.Empno%TYPE) IS
BEGIN
SELECT Empno, Ename, Job, Mgr, Hiredate, Sal, Comm, Deptno
FROM Emp_tab
WHERE Empno = Emp_number;
END;
END PACKAGE1;
/
CREATE PROCEDURE Get_emp_rec(
Emp_rec OUT PACKAGE1.Emp_cur%ROWTYPE
) AS
BEGIN
OPEN PACKAGE1.Emp_cur;
FETCH PACKAGE1.Emp_cur INTO Emp_rec;
CLOSE PACKAGE1.Emp_cur;
END;
/
こんな感じで。
返信を投稿
OB