【问题标题】:Create procedure to verify if driver is mechanic创建程序以验证驱动程序是否是机械师
【发布时间】:2013-11-15 10:12:44
【问题描述】:

我有一个员工、司机和技工桌。司机不能是机械师,反之亦然,我需要创建一个过程 VERIFY 来验证此声明。目前我有这个。

CREATE OR REPLACE PROCEDURE VERIFY IS
ENAME VARCHAR(25);
MESSAGE VARCHAR(50) := 'OK';
CHECK1 BOOLEAN := FALSE;

DRIVERNUM TRKEMPLOYEE.E#%TYPE;
MECHANICNUM TRKEMPLOYEE.E#%TYPE;

CURSOR DRIVERNUM_CURSOR IS SELECT E# FROM TRKDRIVER;
CURSOR MECHANICNUM_CURSOR IS SELECT E# FROM TRKMECHANIC;

BEGIN
OPEN DRIVERNUM_CURSOR;
LOOP
FETCH DRIVERNUM_CURSOR INTO DRIVERNUM;

    OPEN MECHANICNUM_CURSOR;
    LOOP
    FETCH MECHANICNUM_CURSOR INTO MECHANICNUM;

        IF MECHANICNUM_CURSOR%NOTFOUND THEN
        EXIT;
        END IF;

        IF (DRIVERNUM = MECHANICNUM) THEN 
        SELECT NAME INTO ENAME FROM TRKEMPLOYEE WHERE E# = DRIVERNUM;
        DBMS_OUTPUT.PUT_LINE('EMPLOYEE#: ' || TO_CHAR(DRIVERNUM));
        DBMS_OUTPUT.PUT_LINE('EMPLOYEENAME: ' || ENAME);
        CHECK1 := TRUE;
        END IF;

    END LOOP;
    CLOSE MECHANICNUM_CURSOR;

    IF DRIVERNUM_CURSOR%NOTFOUND THEN
    EXIT;
    END IF;

END LOOP;
CLOSE DRIVERNUM_CURSOR;


IF CHECK1 = FALSE THEN
DBMS_OUTPUT.PUT_LINE(MESSAGE);
END IF;



EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('NULL');

END;
/


EXECUTE VERIFY;

它警告我说程序创建时出现编译错误。请帮忙谢谢! 并且在我的代码中也有说明,如果没有也注册为机械师的驱动程序,我需要它向我显示一条消息“OK”。

【问题讨论】:

  • 你想完成什么?找到机械表中的驱动程序?这可以通过一个SELECT 来完成,不需要所有这些。我什至不会问你为什么有单独的桌子......
  • 这不是 SQL Server 的过程。那就是 Oracle PL/SQL。您实际使用的是哪个 DBMS?
  • 是的@oerkelens 我知道我可以使用 select 语句来做到这一点,但我需要运行无数次。这就是为什么我需要一个程序。不是吗?
  • 那为什么不把这个简单的选择放在一个过程中呢?另外,如果你需要经常运行这个,我会建议对你的数据库进行限制,这样用户就不能添加违反你的业务规则的数据。那你就不用想办法不断清理了:)

标签: sql sql-server stored-procedures cursor verify


【解决方案1】:

您的代码过于复杂。要找出既是机械师又是司机的人,请遍历此查询:

SELECT d.E#, e.NAME
FROM TRKDRIVER d
JOIN TRKMECHANUC m on m.E# = d.E#
JOIN TRKEMOYEE e on e.E# = d.E#

结果与您的许多循环、测试和查询产生的结果相同。

【讨论】:

  • 是的@bohemian,这是一个很好的查询,但你知道为什么我会收到编译错误吗?
猜你喜欢
  • 2016-09-06
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多