好文档 - 专业文书写作范文服务资料分享网站

21天学通Oracle 课后答案(第三版) 

天下 分享 时间: 加入收藏 我要投稿 点赞

PL/SQL procedure successfully completed

·231·

3.利用PL/SQL Developer的Debug功能调试存储过程find_student。 1)在PL/SQL Developer的Procedures下,找到存储过程find_student。 2)在右键菜单中选择【Test】

3)在参数栏内填入要传入的参数,并单击Debug按钮或者按下F9。

4)此时,调试步骤按钮栏将变为可用。

从左至右依次为:

Run(继续执行,直至程序结束,或者下一个断点) Step into(进入存储过程/函数内部)

StepOver(执行当前语句,在下一条语句处停止) Step out(跳出当前存储过程/函数)

Run to next exception(执行直至下次抛出异常) 4)利用这5个按钮,即可进行存储过程的调试。

精品文档

· 232·

第9章 游标

1.声明一个游标cu_sutdnet,并向该游标传递参数studentName,来获得所有与参数同名的学生信息。对该游标依次执行打开、获取、关闭的步骤来依次打印获得的学生信息。

1)声明带有参数的游标时,应将参数列表置于小括号内

declare cursor cu_student_id_name(studentName)

2)声明变量临时存取学生姓名和学号

student_id students.student_id%type; student_name students.student_name%type;

3)打开游标时,传入参数studentName

open cu_student_id_name('张三');

4)获取游标数据

fetch cu_student_id_name into student_id, student_name;

5)循环打印学生信息

while cu_student_id_name %found loop dbms_output.put_line(student_id || ':' || student_name); fetch cu_student_id_name into student_id, student_name; end loop;

6)关闭游标

close cu_student_id_name;

7)执行结果如下

SQL> declare cursor cu_sutdnet(studentName in varchar2) is 2 select student_id, student_name

3 from students where student_name=studentName; 4

5 student_id students.student_id%type;

6 student_name students.student_name%type; 7 begin

8 open cu_sutdnet('张三');

9 fetch cu_sutdnet into student_id, student_name; 10

11 while cu_sutdnet%found loop

12 dbms_output.put_line(student_id || ':' || student_name); 13 fetch cu_sutdnet into student_id, student_name; 14 end loop; 15

16 close cu_sutdnet; 17 end; 18 /

17:张三 18:张三 21:张三

PL/SQL procedure successfully completed 精品文档

·233·

2.声明一个名为studentname的变量,然后利用cursorfor游标来实现习题1的功能。通过修改studentname的值,来模拟传入参数功能。

SQL> begin 2 declare

3 studentname varchar2(20); 4 begin

5 studentname := '张三';

6 for student in (select * from students where student_name = studentname) loop 7 dbms_output.put_line(student.student_id || ':' || 8 student.student_name); 9 end loop; 10 end; 11 end; 12 /

17:张三 18:张三 21:张三

通过修改studentname的值,可以查找特定学生名称的所有信息。

3.创建函数get_student_cursor,返回表students中的所有学生信息的集合 1)利用如下SQL语句创建名为get_student_cursor的函数

SQL> create or replace function get_student_cursor 2 return SYS_REFCURSOR 3 is

4 student_cursor sys_refcursor; 5 begin

6 open student_cursor for select * from students; 7 return student_cursor; 8 end; 9 /

Function created

2)利用返回的游标类型,打印所有学生姓名

SQL> begin

2 declare student_cursor sys_refcursor; 3 student students%rowtype; 4 begin

5 student_cursor := get_student_cursor(); 6 loop

7 fetch student_cursor into student;

8 dbms_output.put_line(student.student_name); 9 exit when (student_cursor%notfound); 10 end loop; 11 end; 12 end; 13 / 王松 精品文档

· 234·

金瑞

钟君 王山 刘迪 钟会 张玉 柳青 胡东 商乾 王蒙 周兵 王云 刘兵 胡玉 张洁 张三 张三 王云 张军 张三 张三

PL/SQL procedure successfully completed

第10章 触发器

1.现有一个海量数据表products(product_id number, product_name varchar2(120)),代表产品表。有一个小数据表popular_prodcuts(id, product_id, product_name),代表那些畅销产品。由于products数据表具有海量数据,因此,popular_prodcuts是一个合理的冗余。但是,现在要求表products中的product_name改变之后,表popular_products中的product_name随之改变。创建一个行级触发器tr_product来实现该功能。

1)创建表products,并插入实例数据

SQL> create table products(product_id number, product_name varchar2(120));

Table created

SQL> insert into products values(1, '海尔冰箱');

1 row inserted

SQL> insert into products values(2, '格力空调');

1 row inserted

SQL> insert into products values(3, '戴尔电脑'); 精品文档

1 row inserted

SQL> commit;

Commit complete

SQL> create table popular_products(id number, product_id number, product_name varchar2(120));

Table created

SQL> insert into popular_products values(1, 2, '格里空调');

1 row inserted

SQL> commit;

Commit complete

·235·

2)在表products上创建触发器tr_product,一旦表products中的产品信息发生了改变,那么将同步更新到表popular_products中。

SQL> create or replace trigger tr_product 2 after update

3 on products for each row 4 begin

5 update popular_products set product_name=:new.product_name where product_id=:new.product_id; 6 end; 7 /

Trigger created

其中,after update代表该触发器是在表products的update动作之后触发;update popular_products set product_name=:new.product_name where product_id=:new.product_id则利用更新表products之后的新的product_name来更新表popular_products中的数据。

3)尝试更新products中的“格力空调”为“格力中央空调”。

SQL> update products set product_name = '格力中央空调' where product_id=2;

1 row updated

SQL> commit;

Commit complete

4)验证两个表中的数据是否一致

SQL> select * from products;

PRODUCT_ID PRODUCT_NAME

-------------------- -------------------------------------------------------------------------------- 1 海尔冰箱

2 格力中央空调 3 戴尔电脑 精品文档

21天学通Oracle 课后答案(第三版) 

PL/SQLproceduresuccessfullycompleted·231·3.利用PL/SQLDeveloper的Debug功能调试存储过程find_student。1)在PL/SQLDeveloper的Procedures下,找到存储过程find_student。2)在右键菜单中选择【Test】
推荐度:
点击下载文档文档为doc格式
4of240mr4k6x2111f20r4n7xz5ee5l00bj4
领取福利

微信扫码领取福利

微信扫码分享