将值从 Oracle 对象类型参数传递到 PLSQL 表类型参数
Posted
技术标签:
【中文标题】将值从 Oracle 对象类型参数传递到 PLSQL 表类型参数【英文标题】:Passing values from Oracle Object type parameter to PLSQL Table type parameter 【发布时间】:2013-03-09 11:46:07 【问题描述】:我们如何将声明为 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)
其中 t_obj_dept = 具有 2 个字段(deptid、deptname)的 Oracle 对象,并且 t_dept_rec 在包规范中声明为具有 2 个字段(deptid、deptname)的 t_dept_rec。
请提供一些示例。 提前致谢
【问题讨论】:
【参考方案1】:以下为我编译,似乎可以做你想做的事:
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_dept
和 t_dept_rec
)。您必须单独复制所有字段的值。
您说t_emp_tab
是“二进制整数的PLSQL 表”。我猜你的意思是它是某种类型的 PL/SQL 表索引 binary_integer
,因为用binary_integer
索引这些表比存储binary_integer
更常见s 在其中。对于上面的示例,我假设它是t_obj_emp
s 的表。如果不是,您必须将 t_obj_emp
对象映射到任何类型的对象或记录 t_emp_tab
是一个表。
【讨论】:
感谢 Luke,假设 t_obj_emp = Oracle 对象具有 empID 作为字段,并且 t_emp_tab 是在包规范中声明的 binary_integer 的 PLSQL 表,因为类型 t_empId_tab 是 T_EMP Table.EMP_ID 列的表,按 binary_integer 索引。如何将值从 Oracle 对象传递给它? 如果我对您的理解正确,您只需将程序A
更改为存储p_obj_emp.empId
而不是p_obj_emp
。 PS:请编辑您的问题以澄清t_emp_tab
(或t_empID_tab
?)是一个表格。以上是关于将值从 Oracle 对象类型参数传递到 PLSQL 表类型参数的主要内容,如果未能解决你的问题,请参考以下文章
如何将值从 javascript 传递到嵌入式 flex 对象?
JMeter - 将值从第一个 JDBC 请求传递到第二个 JDBC 请求
将值从 fullCalendar 单击传递到 Django 模板