我正在执行主存储过程以将列加载到目标表中。
我有一个名为dptname
的列 - 此列由不同的项目团队处理,因此他们已经定义了一个子存储过程,所有这些将会获得一个empno并输出Dptname
。他们要求我们调用以下存储过程来加载我的dptname
列。
您能否告诉我如何分配/调用此子存储过程并分配到主存储过程中的deptname
列?
这是子存储过程的框架:
get_dptname(in_emp_no, out_dptname)
我的主存储过程:
Create or Replace procedure InsertTargetTable
as
begin
for a in (
Select EMP.empno
EMP.NAME,
CL.Attendance,
DEPTNAME= "**ASSIGN THE VALUE FROM THE 3rd Party stored procedure**
from EMP, CL
on EMP.empno=CL.empno
) Loop
Insert Into Target Table ( empno, NAME,Attendance, DEPTNAME )
Values (a.empno, a.NAME, a.Attendance, a.DEPTNAME);
ENDLOOP;
COMMIT:
END
答案 0 :(得分:0)
您可以使用以下查询。将DEPT_NO变量传递给存储过程,因为它是一个OUT参数,您可以从主存储过程访问值。
GET_DPTNAME(IN_EMP_NO=>EMP_NO,OUT_DEPT_NO=>DEPT_NO);
答案 1 :(得分:0)
如果另一个组创建了一个函数GET_DEPT_NAME
,那么您可以按如下方式使用它:
CREATE OR REPLACE PROCEDURE InsertTargetTable
AS
BEGIN
INSERT INTO Target_Table ( empno, NAME, Attendance, DEPTNAME )
SELECT EMP.empno, EMP.NAME, CL.Attendance, GET_DEPT_NAME(EMP.empno)
FROM EMP, CL
WHERE EMP.empno = CL.empno;
COMMIT:
END;
一些注意事项:
数据正在取消正常化:如果员工更换部门怎么办?您的Target_Table将不会更新,但会在插入期间保留在部门集中。也许在实际查询表格时应该查找部门以获取当前部门的价值。
希望存储的proc是一个函数,然后它可以很容易地使用,如上例所示。 (如果没有,请求一个功能)。
尽可能避免循环。单个“插入...选择”语句将更有效。