这个是最近做的一个练习 ,现在我这里有2个表 --1.创建图书信息表.CREATE TABLE BOOKINFOS
(
BOOKID NUMBER(38) NOT NULL,  --书的ID编号
BNAME VARCHAR2(30) NOT NULL, --书名
CONCERN VARCHAR2(60),        --出版社
PRICE NUMBER NOT NULL,       --价格
TYPEID NUMBER(38) NOT NULL,  --书的分类
PRIMARY KEY ( BOOKID )
)TABLESPACE BOOKS;----创建图书借阅表CREATE TABLE LEASE
(
DAYID NUMBER(38)  NOT NULL,   --ID
STIME CHAR(20) NOT NULL,      --借书时间
BOOKID NUMBER(38) NOT NULL,   --书的ID号
USERID NUMBER(38) NOT NULL,   --用户的ID号
FOREGIFT NUMBER(38) NOT NULL, --押金
PRIMARY KEY ( DAYID )
)TABLESPACE BOOKS;-----------------------------------
现在想实现的是在对 LEASE 表做插入数据时,用触发器判断押金是否小于书价,如果小于则提示错误信息。其中ID插入的是序列,避免出现输入错误,一开始我用的是异常处理,但是却不允许运行序列~~~~~~~
--序列
CREATE SEQUENCE SEQ_LEASE_ID
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE;这个是异常处理--插入图书借阅数据时检查押金是否小于书的价格 TRI_FOREGIFTCREATE OR REPLACE PROCEDURE INSERT_LEASE (DAYID1 NUMBER , STIME1 CHAR , BOOKID1 NUMBER , USERID1 NUMBER , FOREGIFT1 NUMBER )
AS
BOOKID_C BOOKINFOS.BOOKID%TYPE;
PRICE_C  BOOKINFOS.PRICE%TYPE;FOREGIFT_SIZE EXCEPTION;
BEGIN
SELECT BOOKID , PRICE INTO BOOKID_C,PRICE_C FROM BOOKINFOS WHERE BOOKID = BOOKID_C;IF( BOOKID1 = BOOKID_C AND FOREGIFT1 < PRICE_C ) THEN
RAISE FOREGIFT_SIZE;
END IF;INSERT INTO LEASE VALUES ( DAYID1 ,STIME1 ,BOOKID1 ,USERID1 ,FOREGIFT1 );
EXCEPTION
WHEN FOREGIFT_SIZE THEN
DBMS_OUTPUT.PUT_LINE('押金不能低于书价。');
END;
/------------------------------------------------------------
基本问题就是这些了 ,谁会的话请教教~~