表book和表author,结构如下:Book:
(bookid char(6)主键,bookname varchar(30),price float(5,2))
Author:
(authorid char(6),authorname varchar(10),bookid char(6), BZ clob)
1.根据表结构,创建Book表和Author表。
2.分别向Book表和Author表分别插入以下两行数据。
3.修改Author表的bookid为外键关联Book表的bookid字段。
4.创建一个存储过程,实现计算Book表中price的平均价格,并调用该函数。
5.创建一个函数,实现根据书名查询书的价格。
6.向Author表中authorname为‘凡尔纳’的BZ字段添加数据‘科幻小说之父’。
第一题代码:
--创建book表
create table book(
bookid char(6) primary key,
bookname varchar(30),
price number(5,2));
--创建author表
create table Author(
authorid char(6),
authorname varchar(10),
bookid char(6),
BZ clob
);
第二题插入代码:
--book数据
insert into Book values('001','老人与海',38.8);
insert into Book values('002','海底两万里',49.2);
--author表数据
insert into Author values('202001','海明威','001','美国作家,1899年-1961年,诺贝尔文学奖获得者。');
insert into Author values('202002','凡尔纳','002','法国小说家,1828年-1905年,');
第三题添加外键关联:
alter table Author add constraint bkid_con foreign key (bookid) references Book(bookid);
第四题创建存储过程
set serveroutput on;
create or replace procedure pri_name
is
avg_pri book.price%type;
begin
select avg(price) into avg_pri from book;
dbms_output.put_line('平均价格为:'||avg_pri);
end;
/
--调用
execute pri_name;
运行结果:
第五题函数:
set serveroutput on;
create or replace function func_pri(b_name in book.bookname%type)return number
is pri number(5,2); --创建函数func_pri,变量b_name接收从外界输入的书名,pri变量保存函数的返回值
begin
select price into pri from book where bookname=b_name;
return pri;
end;
/
--调用
declare
v_name book.bookname%type:='&书名'; --从外界输入书名
begin
dbms_output.put_line('价格为:'||func_pri(v_name));
end;
/
第六题添加字段:
set serveroutput on;
declare
var_lob clob; --被写入的LOB
var_length number; --写入的长度
var_start number; --写入的起始位置
var_return varchar2(100); --写入的LOB数据
begin
var_return:='科幻小说之父';
var_length:=length(var_return);
var_start:=19; --现有数据:法国小说家,1828年-1905年,
select BZ into var_lob from author where authorname='凡尔纳' for update;
DBMS_LOB.write(var_lob,var_length,var_start,var_return);
dbms_output.put_line(var_lob);
commit;
end;
/
--验证
select BZ from author;
以上代码均为PL SQL语句,使用SQL Developer工具编写,若有错误,欢迎提出!