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過程中測試這些約束。但我很困惑如何去做。如何在PL/SQL中捕獲約束違規?
[tag:sql-server]不使用PL/SQL。你需要一個解決方案,它和[標籤:甲骨文]? –
我希望在位置表中插入一行並希望測試該pl/sql過程中的約束的過程的PL/SQL代碼。但我不確定如何檢查約束的代碼。 – Kaash
是的,但是你用兩個*不同的*產品標記了這個問題,其中一個產品甚至沒有PL/SQL。你真的需要兩種產品的解決方案嗎? –