如果我用光标引用整个表。我可以多次使用基于其他表中条件的insert语句吗?例如:
V_Name Emp.Name%type;
V_E_Number Emp.Number%type;
V_Location Emp.Location%type;
V_City Emp.City%type;
V_P_ID Emp.P_ID%type;
V_State_Code Emp.State_Code%type;
Cursor C1 is Select emp.name, emp.number, emp.Location, emp.City, emp.P_ID, emp.State_Code
From Employee Emp, Former_Employee Femp
Where Emp.Number = Femp.Number
And State_Code = '4';
Begin
Open C1;
Loop
Fetch C1 Into V_Name, V_E_Number, V_Location, V_City, V_P_ID, V_State_Code;
EXIT WHEN C1%NOTFOUND;
IF New_Emp.P_ID != V_P_ID
Then Insert Into New_Emp
Values (V_Name, V_E_Number, V_Location, V_City, V_P_ID, V_State_Code);
IF New_Emp.P_ID = V_P_ID,
New_Emp.State_Code = V_State_Code
Then Insert Into Emp_Archive
VALUES (V_Name, V_E_Number, V_Location, V_City, V_P_ID, V_State_Code);
Else Do Nothing;
End If;
End Loop;
Close C1;
End;
/
然后我可以再次打开光标并使用另一个If语句来填充具有不同条件的其他表吗?
答案 0 :(得分:1)
您可以打开光标,从光标取指,关闭光标,然后再重新打开它。再次打开游标时可能会得到不同的数据,因为基础表中的数据可能已更改。但是,查看代码时,似乎没有必要首先声明游标 - 您可以简单地编写两个INSERT
语句(假设您的代码引用的new_emp
记录但是不声明有效)
INSERT INTO new_emp
Select emp.name, emp.number, emp.Location, emp.City, emp.P_ID, emp.State_Code
From Employee Emp, Former_Employee Femp
Where Emp.Number = Femp.Number
And State_Code = '4'
AND emp.p_id = new_emp.p_id;
INSERT INTO Emp_Archive
Select emp.name, emp.number, emp.Location, emp.City, emp.P_ID, emp.State_Code
From Employee Emp, Former_Employee Femp
Where Emp.Number = Femp.Number
And State_Code = '4'
AND emp.p_id = new_emp.p_id
AND emp.state_code = new_emp.state_code;
您可以通过执行单个INSERT ALL
进一步简化这一过程INSERT ALL
WHEN new_emp.p_id = p_id
THEN INTO new_emp( name, number, location, city, p_id, state_code )
VALUES( name, number, location, city, p_id, state_code )
WHEN new_emp.p_id = p_id AND
new_emp.state_code = state_code
THEN INTO emp_archive( name, number, location, city, p_id, state_code )
VALUES( name, number, location, city, p_id, state_code )
Select emp.name, emp.number, emp.Location, emp.City, emp.P_ID, emp.State_Code
From Employee Emp, Former_Employee Femp
Where Emp.Number = Femp.Number
And State_Code = '4'