在Oracle PL SQL中,如何在存储过程中验证或从(Type Table)的输入参数中获取值?
我需要检查输入参数中的值在存储过程中是否为NULL。输入参数为表类型,其中包含嵌套对象。它包含3个属性-员工id、经理id和地址。我需要检查经理id和员工id是否为空。根据值,如果为空,我需要插入到两个不同的表中在Oracle PL SQL中,如何在存储过程中验证或从(Type Table)的输入参数中获取值?,oracle,object,stored-procedures,input,types,Oracle,Object,Stored Procedures,Input,Types,我需要检查输入参数中的值在存储过程中是否为NULL。输入参数为表类型,其中包含嵌套对象。它包含3个属性-员工id、经理id和地址。我需要检查经理id和员工id是否为空。根据值,如果为空,我需要插入到两个不同的表中 CREATE OR REPLACE PACKAGE BODY order_mgr IS PROCEDURE ins_trees ( p_emp_details_in IN trees_type_t, p_nrmployee
CREATE OR REPLACE PACKAGE BODY order_mgr
IS
PROCEDURE ins_trees ( p_emp_details_in IN trees_type_t,
p_nrmployee_Id IN NUMBER
)
BEGIN
-- Condition goes here.. please let me know how to check this in the table type object as it contains nested object.
-- IF the manager_id is NULL in the trees_type_t type object
THEN
INSERT into emp (employee_id, address)
values(p_emp_details_in.employee_id, p_emp_details_in.address_id);
END IF;
-- Condition goes here.. please let me know how to check this in the table type object as it contains nested object.
-- IF the (employee_id is NULL in the trees_type_t type object then
INSERT into manager (manager_id, address)
values(p_emp_details_in.manager_id,p_emp_details_in.address_id);
END IF;
END;
END;
/
对象类型:
create or replace TYPE trees_type_t AS TABLE OF tree_obj_type;
请建议并帮助我。首先,我假设既然您接受了一个集合,那么您的目的就是迭代集合中的每个元素。您的代码没有循环,我想您应该没有循环。其次,我假设集合是密集的(即没有未填充的索引) 你可能想要像这样的东西
FOR i IN 1 .. p_emp_details_in.count
LOOP
IF p_emp_details_in(i).employee_id IS NOT NULL
THEN
INSERT into emp (employee_id, address)
values(p_emp_details_in(i).employee_id, p_emp_details_in(i).address_id);
END IF;
IF p_emp_details_in(i).manager_id IS NOT NULL
THEN
INSERT into manager (manager_id, address)
values(p_emp_details_in(i).manager_id,p_emp_details_in(i).address_id);
END IF;
END LOOP;
当然,如果您不需要使用PL/SQL,您可以使用一个INSERT ALL
INSERT ALL
WHEN employee_id IS NOT NULL
INTO emp(employee_id, address) VALUES( employee_id, address )
WHEN manager_id IS NOT NULL
INTO manager( manager_id, address ) VALUES( manager_id, address )
SELECT employee_id, manager_id, address
FROM TABLE( p_emp_details_in );
你的代码将无法工作。p_emp_details_in是一个集合。您必须对其进行迭代才能获得每个对象的值。
INSERT ALL
WHEN employee_id IS NOT NULL
INTO emp(employee_id, address) VALUES( employee_id, address )
WHEN manager_id IS NOT NULL
INTO manager( manager_id, address ) VALUES( manager_id, address )
SELECT employee_id, manager_id, address
FROM TABLE( p_emp_details_in );