⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 作业_getbookname_answer.txt

📁 orale培训教材包括了所有的sql说明和实例
💻 TXT
字号:
--基本表结构
--图书
create table book (
isbn char(13),--ISBN号
name varchar2(20),
zuozhe varchar2(40), --考虑合著
price number(6,2),
publisher varchar2(30),
shuliang number(8,0),
publishdate date);
--建立定购表
create table booked( 
isbn char(13),
benshu number(3,0), 
uername varchar2(20));
--参见  综合练习2.txt



create or replace procedure getbookname 
(p_isbn in char) is
--loacal 变量
  v_name book.name%TYPE;--用type方法声明变量
  v_price number;

begin

  select name,price into v_name,v_price from book
  where isbn = p_isbn;
  dbms_output.put_line('ISBN : ' || p_isbn);
  dbms_output.put_line('书名 : ' || v_name);
  dbms_output.put_line('售价 : ' || v_price);
end;

----改进1。企图判断有无此isbn:失败!

create or replace procedure getbookname 
(p_isbn in char) is
--loacal 变量
  v_name book.name%TYPE;--用type方法声明变量
  v_price number;

begin

  select name,price into v_name,v_price from book
  where isbn = p_isbn;
  if v_price is null then 
     dbms_output.put_line('没有这本书!');
     --当没有输入的isbn,总无法输出这句话.
     --因为select into 要求必须有并且只有一条记录,返回0条2条,都出错.
     --跳过其他语句 ,直接end.
     --怎么办?必须保证有并且只有一条记录.先count(*) where isbn=p_isbn;
     --count(*)总返回一条记录.0,1.因为isbn为pk.
  else
	  dbms_output.put_line('ISBN : ' || p_isbn);
	  dbms_output.put_line('书名 : ' || v_name);
	  dbms_output.put_line('售价 : ' || v_price);
  end if;
end;

select count(*) from sm_emp where empid='a';
--返回0.一条记录。select count(*) into var..  where empid='a'。正确有且只有一条纪录。
select * from sm_emp where empid='a';
--空集。所以,select empid into var..  where empid='a'将发生错误。 

----改进2:count(*)总返回一条记录.0,1.因为isbn为pk.只判断是否=0就可
create or replace procedure getbookname 
(p_isbn in char) is
--loacal 变量
  v_name book.name%TYPE;--用type方法声明变量
  v_price number;
  v_book number:=0; --判断有几条纪录

begin
  
  select count(*) into v_book from book where isbn=p_isbn; --有无此书
  if v_book =0 then 
    dbms_output.put_line('sorry 。没有此书号的图书');
  else
    --找到图书
    select name,price into v_name,v_price from book
    where isbn = p_isbn;
    dbms_output.put_line('ISBN : ' || p_isbn);
    dbms_output.put_line('书名 : ' || v_name);
    dbms_output.put_line('售价 : ' || v_price);
  end if;
end;



  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -