Просто проблема с обеспечением ограничения не нарушается.
Цель: вставить запись, которая не нарушает ограничение.
Ограничение: ордер не должен быть разрешен, если он больше не выпускается или отсутствует на складе.
Теперь у меня есть процедура, над которой я работал, и работает необходимый синтаксис. Просто нужны последние штрихи, чтобы эта процедура вставки работала.
/* Creating Procedure */
CREATE PROCEDURE INSERT_ORDER_DETAIL(
--PARAMETERS
p_product_name IN VARCHAR,
p_unit_price IN NUMBER,
p_quantity IN NUMBER,
p_discount IN NUMBER) IS
--VARIABLES AND DECLARATION FOR PROCEDURE
p_order_id NUMBER;
PRODUCT_LIST PRODUCT%ROWTYPE;
Fail EXCEPTION;
BEGIN
-- Check for product availability
BEGIN
SELECT *
INTO PRODUCT_LIST
FROM PRODUCT
WHERE DISCONTINUED = 'N'; -- select all orders available
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('ERROR ! PRODUCT IS UNAVAILABLE');
RAISE Fail;
END;
--generate new order ID
SELECT MAX(ORDER_ID)+1
INTO p_order_id
FROM ORDER_DETAIL;
-- INSERTING A NEW ORDER
INSERT INTO ORDER_DETAIL VALUES (p_order_id, p_product_name, p_unit_price, p_quantity, p_discount);
COMMIT;
DBMS_OUTPUT.PUT_LINE('DONE!');
EXCEPTION
WHEN Fail THEN
ROLLBACK;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
ROLLBACK;
END INSERT_ORDER_DETAIL;
/