0
我爲員工詳細信息編寫了一個函數和對象。該函數爲特定的員工返回一個對象,我想通過返回對象的DBMS輸出顯示結果。但我不能這樣做。請幫我解決這個問題。如何使用oracle中的函數返回對象在oracle中輸出具有DBMS輸出的對象
類型:
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