0

我有 2 个表,Driver 和 Mechanic,并且在这两个表中它们都有相同的列 Employee#

如何使用 PL/SQL 检查两个表,以便通过比较员工#,Driver 表中的员工不能出现在 Mechanic 表中。如果发生这种情况,它会显示一条消息“员工#不能既是司机又是机械师!”

我知道我可以简单地使用以下方法比较两个表:

SELECT Employee#
FROM Driver
INTERSECT
SELECT Employee#
FROM Mechanic

但它要求我使用 PL/SQL。

我试过使用游标,但我似乎无法让它贯穿整个专栏。这是我的代码:

declare
cursor c1 is select employee# from driver;
cursor c2 is select employee# from mechanic;
driverenum number(30);
mechanicenum number(30);
begin
open c1;
fetch c1 into driverenum;
close c1;
open c2;
fetch c2 into mechanicenum;
close c2;
if driverenum in (mechanicenum) then
dbms_output.put_line(driverenum);
end if;
end;
/                                                                      
4

1 回答 1

0

如果唯一的要求是您使用 PL/SQL

DECLARE
  TYPE emp_nt IS TABLE OF driver.employee#%type;

  l_drivers   emp_nt;
  l_mechanics emp_nt;
  l_both      emp_nt;
BEGIN
  SELECT employee#
    BULK COLLECT INTO l_drivers
    FROM driver;

  SELECT employee#
    BULK COLLECT INTO l_mechanics
    FROM mechanic;

  l_both := l_drivers MULTISET INTERSECT l_mechanics;

  FOR i IN 1 .. l_both.count
  LOOP
    dbms_output.put_line( 'Employee ' || l_both(i) || 
                            ' is employed as both a driver and a mechanic' );
  END LOOP;
END;

如果任一表中有大量行,这种方法可能会在 PGA 中占用相当多的空间。但通常它几乎与 SQL 解决方案一样有效。

于 2012-11-15T04:24:14.173 回答