PLSQL Procedure 例項1
阿新 • • 發佈:2019-02-01
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;
/