CREATE OR REPLACE procedure verify_employee IS
Emp_name trkemployee.name#%TYPE,
Emp_ID trkemployee.E#%TYPE,
CURSOR c1;
IS
select e.e#, e.name from trkemployee e where e# IN (select e# from trkdriver intersect select e# from trkmechanic);
IN
(select e# from trkdriver intersect select e# from trkmechanic);
BEGIN
OPEN c1();
LOOP
END LOOP;
close c1;
END;
/
上記は私のPL/SQLコードです..私が達成しようとしているのは、ドライバーとメカニックとして同時に働くすべての従業員をリストすることです..
端末でSQLステートメントを単独で実行すると、出力は次のようになります..
SQL> select e.e#, e.name from trkemployee e where e# IN (select e# from trkdriver intersect select e# from trkmechanic);
E# NAME
---------- --------------------------------------------------
14 Andrew R. Smith
しかし、私はPL/SQLでそれを行い、DMBS_OUTPUT.PUT(result);を実行したいです。
複数のレコードをチェックすることを知っています。カーソルを使用する必要があります。将来、複数の行が返されると仮定すると、pl/sql をどのように変更すればよいでしょうか。また、プロシージャをロードすると、ターミナルでコンパイル エラーが発生したと表示されます。
以下は私の3つのテーブルです..
SQL> desc trkdriver;
Name Null? Type
----------------------------------------- -------- ----------------------------
E# NOT NULL NUMBER(12)
L# NOT NULL NUMBER(8)
STATUS NOT NULL VARCHAR2(10)
SQL> desc trkmechanic;
Name Null? Type
----------------------------------------- -------- ----------------------------
E# NOT NULL NUMBER(12)
L# NOT NULL NUMBER(8)
STATUS NOT NULL VARCHAR2(10)
EXPERIENCE NOT NULL VARCHAR2(10)
SQL> desc trkemployee;
Name Null? Type
----------------------------------------- -------- ----------------------------
E# NOT NULL NUMBER(12)
NAME NOT NULL VARCHAR2(50)
DOB DATE
ADDRESS NOT NULL VARCHAR2(300)
HIREDATE NOT NULL DATE