oracle 里的函数调用问题和触发器,函数包的问题

来源:互联网 发布:c unity3d 仿真 编辑:程序博客网 时间:2024/05/22 08:00

当函数没有参数时,小括号可以省略!

create or replace function sal_tax(v_sal number)
return number
is
begin
if(v_sal <2000)then
return 0.10;
elsif(v_sal<2750)then
return 0.15;
else
return 0.20;
end if;
end;

 

调用问题

declare

v_a number;
begin

v_a :=sal_tax(2323);
dbms_output.put_line(v_a);
end;

测试的时候用这个也很好select sal_tax(2001) from dual;

 

 

如果调用的时候为

begin

sal_tax(2323);
end;

是不行的,提示说不是过程,或者你直接使用Pl/sql deverlper的测试功能吧!

-----------------------------------------------------------------------------------------------------------------------------------------------------

触发器的需求:谁要对哪张表做了修改就得记录是谁修改了,什么时间,做了什么动作!

 

现在测试这个触发器!

update emp2 set sal = sal*2 where depno = '20' ;

你可以看到emp2_log被插入了6条数据,因为目前是行级触发器!

如果是表级触发器,那么只会插入一条!

 

 

 

 

我们可以看到update的字段和参照的字段一致时,它 报错了,这个时候我们就用触发器能解决这个问题,在更新操作的时候就有一个旧值和新值得问题

,记住它是先检查触发器,然后再检查约束条件的!

 

 --------------------------------------------------------------------------------

 --------------------------------------------------------------------------------

 

函数包就和函数体就像接口和实现是一样的,必要要先定义接口,后定义包体!,接口中定义了方法不去实现,也定义了变量!这些变量是包里的所有过程,函数共享的!

 

create or replace package pkg_students

他们的名字是一样的!

create or replace package body pkg_students

 

 

原创粉丝点击