这个是最近做的一个练习 ,现在我这里有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_FOREGIFT CREATE 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;
/ ------------------------------------------------------------
基本问题就是这些了 ,谁会的话请教教~~
(
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_FOREGIFT CREATE 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;
/ ------------------------------------------------------------
基本问题就是这些了 ,谁会的话请教教~~
解决方案 »
- oracle数据库导入问题
- ORACL 10G RAC 最近莫名其妙会很卡,ADDM查了出这种报告,什么意思啊?
- 在oracle中,子查询的效率高,还是连接查询的效率高。
- 为什么编译不过呢???
- 急求:已经有数据库以及表了,但没有PowerDesigner模型,现需要将oracle的数据导入到PowerDesigner ,有什么好方法?谢谢!
- 问一个sql建立表的主键的问题!着急!
- 请问哪有ORACLE FOR LINUX 补丁的下载?
- 几个有关实例、建库的基本问题。还望大侠们关照我们新手啊。
- occi 创建CreateStatement卡死
- 过程测试报错,求打救
- 怎样实现Oracle实时复制数据到远程Access?
- 向oracle中插入blob对象为什么要行锁
create or replace trigger INSERT_LEASE
before insert on LEASE
嘛