0

我喜欢创建一个 PLSQL PROCEDURE 来验证 DRIVER 和 MECHANIC 中不存在 EMPLOYEE 的数据。

我创建了 1 条记录进行测试。但是,当我使用不是我为测试而创建的记录运行 EXEC Verify(2) 时,它仍然会显示我不喜欢验证的测试记录。

我喜欢使用我选择运行 EMPLOYEE 比较的一组 EMPLOYEE.E# 来执行 PROCEDURE,但在 DRIVER 和 MECHANIC 中不存在。

这是我创建的 PLSQL。

CREATE OR REPLACE PROCEDURE Verify(enum IN EMPLOYEE.E#%TYPE) IS
eNo DRIVER.E#%TYPE;
eName EMPLOYEE.NAME%TYPE;

CURSOR c1 IS
    SELECT DRIVER.E#, EMPLOYEE.NAME
    FROM DRIVER
    INNER JOIN EMPLOYEE
    ON EMPLOYEE.E# = DRIVER.E#
    WHERE
    EXISTS (SELECT * FROM MECHANIC WHERE DRIVER.E# = MECHANIC.E#);

BEGIN   
    OPEN c1;
    FETCH c1 into eNo, eName;
    IF c1%NOTFOUND THEN
        CLOSE c1;               
        DBMS_OUTPUT.PUT_LINE('No Records Found');

    ELSE
        CLOSE c1;           
        DBMS_OUTPUT.PUT_LINE('E#| NAME');
        FOR EmpRecord IN c1
        LOOP
          DBMS_OUTPUT.PUT_LINE(EmpRecord.E# || ' | ' || EmpRecord.NAME || ' is in                   
              driver and mechanic.');
        END LOOP;
    END IF;

END;
/
4

1 回答 1

0

试试这个代码
CURSOR c1 IS
SELECT EMPLOYEE.E# , EMPLOYEE.NAME FROM EMPLOYEE WHERE EMPLOYEE.E#=enum AND NOT EXISTS (SELECT 'x' FROM MECHANIC a,DRIVER b WHERE a.E# = b.E# and a.E#=EMPLOYEE.#E);
我还没有测试过这个,但我希望它有帮助。

于 2012-11-26T19:32:24.160 回答