0
私は従業員の詳細のための関数とオブジェクトを作成しました。この関数は特定の従業員のオブジェクトを返し、返されたオブジェクトからDBMS出力を介して結果を表示します。しかし、私はこれをすることはできません。この問題を解決するために私を助けてください。ORACLEのDBMS出力を持つオブジェクトを出力する方法oracleの関数戻りオブジェクト
タイプ:
CREATE OR REPLACE TYPE EMP_DETAILS_OBJ AS OBJECT(
EMPID NUMBER,
ENAME VARCHAR2(100),
DESIGNATION VARCHAR2(100),
DEPARTMENT VARCHAR2(50),
JOIN_DATE DATE,
COUNTRY VARCHAR2(50),
REGION VARCHAR2(30)
)
/
CREATE OR REPLACE TYPE EMP_DETAILS_TABLE IS TABLE OF EMP_DETAILS_OBJ
/
機能:
CREATE OR REPLACE FUNCTION GETEMPLOYEE_INFO(SEARCH_EMPLOYEE_ID NUMBER)
RETURN EMP_DETAILS_TABLE IS
EMPLOYEEID NUMBER;
EMPLOYEE_NAME VARCHAR2(100);
DESIGNATION VARCHAR2(100);
DEPARTMENT VARCHAR2(50);
JOIN_DATE DATE;
COUNTRY VARCHAR2(50);
REGION VARCHAR2(30);
EMP_DETAILS EMP_DETAILS_TABLE := EMP_DETAILS_TABLE();
BEGIN
EMP_DETAILS.EXTEND();
SELECT EMP.EMPLOYEE_ID,
EMP.FIRST_NAME||' '||EMP.LAST_NAME,
EMPJOB.JOB_TITLE,
DEPT.DEPARTMENT_NAME,
EMP.HIRE_DATE,
CNTRY.COUNTRY_NAME,
RGN.REGION_NAME
INTO EMPLOYEEID, EMPLOYEE_NAME, DESIGNATION, DEPARTMENT, JOIN_DATE,
COUNTRY, REGION
FROM EMPLOYEES EMP
LEFT OUTER JOIN JOBS EMPJOB ON EMPJOB.JOB_ID = EMP.JOB_ID
LEFT OUTER JOIN DEPARTMENTS DEPT ON DEPT.DEPARTMENT_ID = EMP.DEPARTMENT_ID
LEFT OUTER JOIN LOCATIONS LOC ON LOC.LOCATION_ID = DEPT.LOCATION_ID
LEFT OUTER JOIN COUNTRIES CNTRY ON CNTRY.COUNTRY_ID = LOC.COUNTRY_ID
LEFT OUTER JOIN REGIONS RGN ON RGN.REGION_ID = CNTRY.REGION_ID
WHERE EMP.EMPLOYEE_ID = SEARCH_EMPLOYEE_ID ;
EMP_DETAILS(1) := EMP_DETAILS_OBJ(EMPLOYEEID, EMPLOYEE_NAME, DESIGNATION,
DEPARTMENT, JOIN_DATE, COUNTRY, REGION);
RETURN EMP_DETAILS;
END;
/
コール:
SET SERVEROUTPUT ON;
DECLARE
--EMP_DETAILS EMP_DETAILS_TABLE :=EMP_DETAILS_TABLE();
EMP_OBJ EMP_DETAILS_OBJ;
BEGIN
EMP_OBJ :=GETEMPLOYEE_INFO(100);
--EMP_OBJ :=EMP_DETAILS_OBJ(EMP_DETAILS.EMPID,EMP_DETAILS.ENAME,EMP_DETAILS.DESIGNATION,EMP_DETAILS.DEPARTMENT,EMP_DETAILS.JOIN_DATE,EMP_DETAILS.COUNTRY,EMP_DETAILS.REGION);
DBMS_OUTPUT.PUT_LINE('EMPLOYEE_ID: '||EMP_OBJ.EMPID);
DBMS_OUTPUT.PUT_LINE('EMPLOYEE_NAME: ');
DBMS_OUTPUT.PUT_LINE('DESIGNATION: ');
DBMS_OUTPUT.PUT_LINE('DEPARTMENT: ');
DBMS_OUTPUT.PUT_LINE('JOIN DATE: '||EMP_DETAILS.JOIN_DATE);
DBMS_OUTPUT.PUT_LINE('COUNTRY: '||EMP_DETAILS.COUNTRY);
DBMS_OUTPUT.PUT_LINE('REGION: '||EMP_DETAILS.REGION);
END;
/
SELECT GETEMPLOYEE_INFO(100) FROM DUAL;
質問に答えるには、より多くの情報が必要です。たとえば、どのようなエラーが発生しているか、これを実行するとどうなりますか。私のところから飛び出したことは、あなたの関数がオブジェクトのテーブルを返し、あなたがこれを置く変数が、オブジェクトのテーブルではなく単一のオブジェクトであるということです。 –
pl/sqlで結果を確認するためにクエリを実行すると、EMPIDが宣言されていないことを示すエラーが表示されます。しかし、私はすでにオブジェクトを宣言しています。では、GETEMPLOYEE_INFO関数を呼び出すことによって、DBMS OUTPUTのオブジェクトの詳細に出力を表示するにはどうすればいいですか? –
関数EMPLOYEEID、EMPLOYEE_NAME、DESIGNATION、DEPARTMENT、JOIN_DATE、COUNTRY、REGIONのこれらの変数の宣言はどこですか.Oracleはこれらの宣言を参照します。 – XING