1.定义一个游标 用来存放 s_emp 表中的 id first_name salary
使用 简单循环 结合 notfound 属性来遍历游标中的数据
2.写一个存储过程 定义两个整数参数 然后打印两个参数的最大值 并且把两个参数的和
存入第二个参数中。调用这个存储过程 然后验证存储过程的功能。
----------------------------------------------------------------------------
1.写一个plsql的函数 有两个整数参数 返回两个参数的最大值
2.设计一个函数 有两个整数参数 返回参数的最大值 并且把两个参数的和存入第二个参数中
调用这个函数 验证函数的功能
create or replace function getmax_and_sum(var_x number,var_y in out number)
return number is
begin
if var_x < var_y then
var_y:=var_x+var_y;
return var_y-var_x;
end if;
var_y:=var_x+var_y;
return var_x;
end;
/
create or replace function getmax_and_sum(var_x number,var_y in out number)
return number is
var_temp number;
begin
var_temp:=var_y;
var_y:=var_x+var_y;
if var_x < var_temp then
return var_temp;
end if;
return var_x;
end;
/
declare
var_y number:=1;
var_res number:=0;
begin
var_res:=getmax_and_sum(101,var_y);
dbms_output.put_line(var_res);
dbms_output.put_line(var_y);
end;
/
3.plsql 程序中的包
3.1 概念
把逻辑相关的 过程 函数 变量 等用逻辑结构组织起来 这个逻辑结构叫 package。
3.2 使用包中的数据 在数据前 加包名点即可 #####
3.3 系统提供的包
dbms_output.put_line('gg');
desc dbms_output; 输出相关的包
desc dbms_random; 随机相关的包
select dbms_random.value(1,100) from dual;
select trunc(dbms_random.value(1,100)) from dual;
desc dbms_job; 定时任务包 可以定时调用存储过程
desc dbms_lob; 操作大数据类型的包
4.触发器 trigger
4.1 概念
当进行dml 操作时 数据库管理系统 可以捕获到这些操作
进而可以根据这些操作 进行相应辅助操作。这种功能可以通过触发器完成。
4.2 语法
create or replace trigger 触发器的名字 before|after
dml(insert | delete|update) on 表名 |for each row
declare
begin
end;
/
4.3 举例
create table myemp101 as select id,first_name name,salary from s_emp;
create or replace trigger myemp101_tri after update on myemp101
declare
begin
dbms_output.put_line('you update myemp101');
end;
/
update myemp101 set salary=salary+100 where id=1;
update myemp101 set salary=salary+100 where id>1;
update myemp101 set salary=salary+100 where id<1;
无论sql语句影响多少行数据 都会触发一次 这种触发器叫语句级触发器。
希望检测每一行的数据变化情况 可以使用 行级触发器 for each row
create or replace trigger myemp101_tri after update on myemp101 for each row
declare
begin
dbms_output.put_line(:old.id||':'||:old.salary);
dbms_output.put_line('you update myemp101');
dbms_output.put_line(:new.id||':'||:new.salary);
end;
/
update myemp101 set salary=salary+100 where id=1;
update myemp101 set salary=salary+100 where id>1;
update myemp101 set salary=salary+100 where id<1;
update :old :new
insert :new
delete :old