1. 程式人生 > >PLSQL Procedure 例項1

PLSQL Procedure 例項1

CREATE TABLE 在庫
  ( 製品名 VARCHAR2(20) PRIMARY KEY, 在庫數 NUMBER
  );
CREATE TABLE 註文
  ( 註文ID NUMBER PRIMARY KEY, 製品名 VARCHAR2(20), 註文數 NUMBER
  );
CREATE SEQUENCE SEQ_註文ID;
INSERT INTO 在庫 VALUES
    ('テレビ',10
    );
  INSERT INTO 在庫 VALUES
    ('ラジオ',5
    );
  COMMIT;
CREATE OR REPLACE PROCEDURE PROC_註文受付(
    P_製品名 IN 註文.製品名%TYPE,
    P_註文數 IN 註文.註文數%TYPE)
IS
  V_在庫數 在庫.在庫數%TYPE;
BEGIN
  SELECT 在庫數 INTO V_在庫數 FROM 在庫 WHERE 製品名 = P_製品名 FOR UPDATE;
  IF P_註文數 > V_在庫數 THEN
    RAISE_APPLICATION_ERROR(-20000,'在庫不足エラー :' || P_製品名);
  END IF;
  UPDATE 在庫 SET 在庫數 = 在庫數 - P_註文數 WHERE 製品名 = P_製品名;
  INSERT INTO 註文
    (註文ID, 製品名,註文數
    ) VALUES
    (SEQ_註文ID.NEXTVAL, P_製品名, P_註文數
    );
  COMMIT;
EXCEPTION
WHEN no_data_found THEN
  RAISE_APPLICATION_ERROR(-20001,'誤った製品名です');
END;
/
begin
proc_註文受付('テレビ',3);
end;
/