私はいつも、私は、デフォルトのHRスキーマにrowtypeを使用してレコードにカーソルをフェッチすることはできますか?
CREATE OR REPLACE PACKAGE EMP_PKG AS
TYPE T_EMP_REC IS RECORD (
V_EMP_TAB EMPLOYEES%ROWTYPE,
V_DEPT_NAME DEPARTMENTS.DEPARTMENT_NAME%TYPE
);
FUNCTION GET_EMP (P_EMP_ID EMPLOYEES.EMPLOYEE_ID%TYPE) RETURN T_EMP_REC;
END EMP_PKG;
/
CREATE OR REPLACE PACKAGE BODY EMP_PKG AS
FUNCTION GET_EMP (P_EMP_ID EMPLOYEES.EMPLOYEE_ID%TYPE)
RETURN T_EMP_REC
AS
CURSOR V_EMP_CUR IS
SELECT E.*, D.DEPARTMENT_NAME
FROM EMPLOYEES E, DEPARTMENTS D
WHERE E.EMPLOYEE_ID = P_EMP_ID
AND E.DEPARTMENT_ID = D.DEPARTMENT_ID;
V_EMP_REC T_EMP_REC;
BEGIN
OPEN V_EMP_CUR;
FETCH V_EMP_CUR INTO V_EMP_REC;
CLOSE V_EMP_CUR;
RETURN V_EMP_REC;
END GET_EMP;
END EMP_PKG;
列の一致の数を使用していると私はいつもテーブルと同じタイプを使用しています、
PLS-00597: expression 'V_EMP_REC' in the INTO list is of wrong type
がここにパッケージだそうです。レコード型の各列を宣言するのではなく、このアプローチが可能かどうかはわかりません。
ありがとう!この関数を呼び出すときに、どのようにレコードを印刷できますか? –
@ Rishabh Jainの回答を参照してください。レコードを印刷するには、レコードの各列に明示的にアクセスする必要があります(つまり、DBMS_OUTPUT.PUT_LINE( 'Col1:' || V_EMP_REC.employees_col1 || '、Col2:' || V_EMP_REC.employees_col2 ... ') Oracleドキュメント:[12c](https://docs.oracle.com/database/121/LNPLS/composites.htm#LNPLS005)、[11g](https://docs.oracle.com/cd/B28359_01/appdev.111) /b28370/collections.htm#LNPLS005)、 [10グラム(https://docs.oracle.com/cd/B14117_01/appdev.101/b10807/05_colls.htm) – Guillaume