2013-03-09 121 views
2

如何將一個聲明爲Oracle對象類型的參數傳遞給具有參數爲PLSQL表類型的過程?將Oracle對象類型參數的值傳遞給PLSQL表類型參數

例如:

Procedure A(p_obj_emp t_obj_emp) 
Procedure B(p_emp_tab t_emp_tab) 

凡t_obj_emp = Oracle對象和t_emp_tab是BINARY_INTEGER的PLSQL表

我們如何傳遞被聲明爲具有參數的Oracle對象類型的過程的參數作爲PLSQL記錄類型?

例如:

Procedure C(p_obj_dept t_obj_dept) 
Procedure D(p_dept_rec t_dept_rec) 

凡具有2個字段(DEPTID,DEPTNAME)t_obj_dept = Oracle對象和t_dept_rec以具有2個字段(DEPTID,DEPTNAME)t_dept_rec包規範被聲明。

請幫助一些例子。 在此先感謝

回答

2

下編譯對我來說,似乎你想要做什麼:

CREATE OR REPLACE TYPE t_obj_emp AS OBJECT (
    emp_id  INTEGER, 
    emp_name VARCHAR2(100) 
); 
/

CREATE OR REPLACE TYPE t_obj_dept AS OBJECT (
    dept_id  INTEGER, 
    dept_name VARCHAR2(100) 
); 
/

CREATE OR REPLACE PACKAGE my_pkg AS 

    TYPE t_emp_tab IS TABLE OF t_obj_emp INDEX BY BINARY_INTEGER; 

    TYPE t_dept_rec IS RECORD (
    dept_id  INTEGER, 
    dept_name VARCHAR2(100) 
); 

    PROCEDURE A(p_obj_emp t_obj_emp); 
    PROCEDURE B(p_emp_tab t_emp_tab); 
    PROCEDURE C(p_obj_dept t_obj_dept); 
    PROCEDURE D(p_dept_rec t_dept_rec); 
END; 
/

CREATE OR REPLACE PACKAGE BODY my_pkg AS 

    PROCEDURE A(p_obj_emp t_obj_emp) 
    IS 
    v_emp_tab  t_emp_tab; 
    BEGIN 
    v_emp_tab(1) := p_obj_emp; 
    B(v_emp_tab); 
    END; 

    PROCEDURE B(p_emp_tab t_emp_tab) IS BEGIN NULL; END; 

    PROCEDURE C(p_obj_dept t_obj_dept) 
    IS 
    v_dept_rec t_dept_rec; 
    BEGIN 
    v_dept_rec.dept_id := p_obj_dept.dept_id; 
    v_dept_rec.dept_name := p_obj_dept.dept_name; 
    D(v_dept_rec); 
    END; 

    PROCEDURE D(p_dept_rec t_dept_rec) IS BEGIN NULL; END; 
END; 
/

注意,沒有任何「方便」的方式來創建一個對象/從另一個記錄,即使它們具有相同的成員(例如上面示例中的t_obj_deptt_dept_rec)。您必須單獨複製所有字段的值。

你說t_emp_tab是一個「binary_integer的PLSQL表」。我猜你的意思是這是一個的PL/SQL表,由binary_integer索引,因爲它比binary_integer存儲binary_integer更爲常見。對於上面的例子,我假設它是一個t_obj_emp s的表格。如果不是,則必須將t_obj_emp對象映射到任何類型的對象或記錄t_emp_tab是表格。

+0

感謝盧克,假設t_obj_emp = Oracle Object具有empID作爲字段,並且t_emp_tab是包規範中聲明的binary_integer的PLSQL表,因爲類型t_empId_tab是T_EMP Table.EMP_ID列索引by binary_integer的表。我如何將Oracle Object的價值傳遞給這個? – user2151312 2013-03-09 13:22:14

+0

如果我正確理解你,你所需要做的就是改變程序'A'來存儲'p_obj_emp.empId'而不是'p_obj_emp'。 PS:*請編輯您的問題,以澄清't_emp_tab'(或't_empID_tab'?)是一個表格。* – 2013-03-09 13:28:09

相關問題