今天写了一个有关存储过程的代码段,但是出师不利第一个存储就开始报错(以下为本人在实验过程中所遇到的错误,如有不妥之处,望指正)
题目要求:
- 借书时要求输入借阅流水号,借书证号,图书编号。(即该存储过程有3个输入参数)
- 借书时,借书日期为系统时间。
- 图书的是否借出改为‘是’
报错代码:
create or replace procedure p_借书(
p_借阅流水号 in Leadinformation.Leadid%TYPE,
p_借书证号 in Leadinformation.Readerid%TYPE,
p_图书编号 in Leadinformation.Bookid%TYPE
)
as
Begin
insert into Leadinformation
values(p_借阅流水号,p_借书证号,p_图书编号,to_date(SYSDATE,'yyyy/mm/dd'),'','','');
update Book set Book.Isout='是' where Book.Bookid=p_图书编号;
dbms_output.put_line('操作成功');
commit;
return;
END;
错误原因:因为在数据表中日期的存储类型为date,首先想的是转换为日期类型,但是没有想到的是SYSDATE就已经是DATE类型,所以这里不再使用to_date进行转换。另外,转换SYSDATE也只能使用to_char来转换为char型,也尝试过先将其转换为char在转换为date型,但在实验过程中也会报错,因此在日期类型这里直接使用SYSDATE。
如果有报这种错误的,可以看看参数中是否含有日期类型的数据。
更改后代码:
create or replace procedure p_借书(
p_借阅流水号 in Leadinformation.Leadid%TYPE,
p_借书证号 in Leadinformation.Readerid%TYPE,
p_图书编号 in Leadinformation.Bookid%TYPE
)
as
Begin
insert into Leadinformation
values(p_借阅流水号,p_借书证号,p_图书编号,SYSDATE,'','','');
update Book set Book.Isout='是' where Book.Bookid=p_图书编号;
dbms_output.put_line('操作成功');
commit;
return;
END;