【发布时间】:2014-04-23 08:45:34
【问题描述】:
CREATE TABLE LOCATION (
LOCID VARCHAR2(5)
, MINQTY NUMBER
, MAXQTY NUMBER
, PRIMARY KEY (LOCID)
, CONSTRAINT CHECK_LOCID_LENGTH CHECK (LENGTH(LOCID) = 5)
, CONSTRAINT CHECK_MINQTY_RANGE CHECK (MINQTY BETWEEN 0 AND 999)
, CONSTRAINT CHECK_MAXQTY_RANGE CHECK (MAXQTY BETWEEN 0 AND 999)
, CONSTRAINT CHECK_MAXQTY_GREATER_MIXQTY CHECK (MAXQTY >= MINQTY)
);
CREATE OR REPLACE PROCEDURE ADD_LOCATION_TO_DB(ploccode VARCHAR2, pminqty NUMBER, pmaxqty NUMBER) AS
BEGIN
INSERT INTO location(locid, minqty, maxqty) VALUES (ploccode, pminqty, pmaxqty);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
RAISE_APPLICATION_ERROR(-20081, 'Duplicate Location ID');
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20086,sqlerrm);
END;
我创建了带有约束的上表。 现在我想通过在异常中捕获它们来测试 PL/SQL 过程中的这些约束。但我很困惑如何做到这一点。
【问题讨论】:
-
sql-server 不使用 PL/SQL。你需要它和oracle 的解决方案吗?
-
我想要一个在位置表中插入一行的过程的 PL/SQL 代码,并希望测试该 pl/sql 过程中的约束。但我不确定如何检查约束的代码。
-
是的,但是您已经用两种不同产品标记了这个问题,其中一种产品甚至没有PL/SQL。您真的需要针对这两种产品的解决方案吗?
-
我删除了 sql-server 标签,因为问题显然是关于 Oracle 和 PL/SQL 的。
-
检查约束违规没有预定义的异常(见这里:docs.oracle.com/cd/E11882_01/appdev.112/e25519/…)您需要检查
when others处理程序中的错误代码
标签: sql oracle plsql constraints check-constraint