oracle - 如何从 Oracle PL SQL 的过程中的(对象类型表)的输入参数中获取值?
问题描述
请任何人都可以帮助我。我有一个表格类型的对象。
CREATE OR REPLACE TYPE SI_PHONE_ACC_T AS TABLE OF SI_PHONE_ACC;
CREATE OR REPLACE TYPE SI_PHONE_ACC AS OBJECT
(
PHONE_ACC VARCHAR2(15);
);
下面一般是作为UI端的输入传递给程序的。
例子:
SI_PHONE_ACCT_T(SI_PHONE_ACC('123-345-6543'),SI_PHONE_ACC('999-999-9999'), SI_PHONE_ACC('ax878974545787wp')); -- 前 2 位是电话号码,第 3 位是帐号。
电话表:
Emp_id--- phone_number
1 -- 123-345-6543
2 -- 999-999-9999
3--- 897-897-8781
账户表:
Emp_id--- account_number
10 -- A0000
20 -- B0000
30--- ax878974545787wp
CREATE OR REPLACE PACKAGE BODY order_mgr
IS
PROCEDURE ins_trees ( p_emp_details_in IN SI_PHONE_ACC_T )
BEGIN
-- Now, I need to retrieve emp_ids from Phone and Account tables based on the phone or account numbers passed in the input parameter. please let me know how to do this.
---once I get those emp_id's, i need to insert into employee table which contains only one column emp_id.
--Please let me know how to do this.
FOR i IN 1 .. p_emp_details_in.count
LOOP
INSERT into employee (emp_id)
values(??);
END IF;
END LOOP;
END;
解决方案
PROCEDURE ins_trees ( p_emp_details_in IN SI_PHONE_ACC_T )
BEGIN
INSERT into employee (emp_id)
select Emp_id
from table(p_emp_details_in) t
, Phone_table t2
where t.PHONE_ACC = t2.phone_number
union
select Emp_id
from table(p_emp_details_in) t
, Account_table t2
where t.PHONE_ACC = t2.account_number
;
END;
/
推荐阅读
- c - 为什么使用 malloc 分配内存块不遵循先拟合?
- html - 如何将图像的无序列表居中?
- excel - 使用变量分配单元格编号(不是单元格值)
- bash - 如何使用 systemd timer 下载并执行远程 bash 脚本?
- mysql - MySql,UNION 时重复 Select IN (Select()) 的替代方法
- php - 如何根据 PHP 中的两列计算数组值?
- php - 根据单词相似度将一个 varchar 与另一个 varchar 进行比较
- reactjs - Nginx 和多个 React Web 应用程序
- c++ - 中级 C++ 开发人员的棘手面试问题
- r - R studio 找不到现有库