【发布时间】:2014-09-27 21:20:36
【问题描述】:
我有一个名字列表。
约翰、山姆、彼得、杰克
我想用上面的每一个作为过滤器查询相同的 sql。每个查询都会给我一个唯一的员工 ID,我想用它来删除其他一些记录。
select emp_id from employee where emp_name like '%john%';
假设对于第一个查询,我得到的 id 为 1001。所以删除查询将如下所示。
delete from account_details where emp_id = 1001;
delete from hr_details where emp_id = 1001;
delete from pay_role_details where emp_id = 1001;
我必须为员工列表重复此操作。伪代码如下所示。
var emp_list = ['john', 'jack', 'kate', 'peter', 'sam',...]
for each :employee_name in emp_list
select emp_id as :var_emp_id from employee where emp_name like '%:employee_name%';
delete from account_details where emp_id = :var_emp_id;
delete from hr_details where emp_id = :var_emp_id;
delete from pay_role_details where emp_id = :var_emp_id;
end loop
我想要一个 PL-SQL 查询来执行此操作。请帮忙。谢谢。
我尝试的是如下所示。
set serveroutput on;
begin
loop x in ('john','jack', 'kate') loop as :name
select emp_id as var_emp_id from employee where emp_name like '%:name%';
// delete queries
end loop;
end;
附:虽然根据提问,like query可能会产生多条记录,但在实际场景中,保证只有一条记录。为什么我使用 like 是在实际场景中,它是参考编号列表而不是名称。参考号还有一些其他的前置文本和后置文本,而我的逗号分隔列表只有数字。
【问题讨论】:
标签: sql oracle plsql oracle-sqldeveloper plsqldeveloper