oracle中数据库存储过程和存储功能的使用

存储过程和存储函数是指存储在数据库中的所有存储过程和存储函数的用户程序中的子程序。
存储过程没有返回值。存储函数具有返回值。

创建存储过程
存储过程和存储函数是通过创建过程命令创建的。

Grammar:
创建{或替换}过程过程名(参数列表)
作为
PLSQL子程序体;

存储过程示例:根据原始工资给指定员工的10%的工资

*
指定员工的工资按原来的工资为10%,工资前后分别打印。
* /
已创建或替换程序raisesalary(工号的数量)
作为
PSAL EMP。萨尔分型;-保存员工的薪酬水平
开始
-询问雇员的工资
选择从EMP在PSAL萨尔为empno =工号;
-为雇员加薪
更新EMP组萨尔=萨尔* 1.1 empno =工号;
-工资增加前后的打印工资
dbms_output.put_line(员工编号:工号| || |工资之前
| | ' ' | | PSAL工资的| | PSAL×1.1);
结束;
1 /

程序创建
-存储过程调用
方法一
SQL >进行设置
SQL> exec raisesalary(7369);

员工人数:工资上涨前的7369
800后880工资

方法二
进行设置
开始
(7369)raisesalary;
结束;
/

已成功完成


存储功能
函数(函数)是一个命名的存储程序,它可以接受参数并返回一个计算值。函数和过程的结构是相似的,但必须返回一个返回函数值的子句。函数指定函数的名称、结果值的类型和参数的类型。

构建存储函数的语法:

创建{或替换}函数函数名(参数列表)
返回函数值类型
作为
PLSQL子程序体;


例句:询问工人的年收入情况。
**
*
询问工人的总收入
* /
创建或替换功能queryempsalary(工号的数量)
返回数
作为
PSAL数;定义变量保持员工的工资
多线程数;定义变量来保存员工的奖金
开始
选择SAL,通讯在PSAL,Pcomm从EMP在EMPNO =工号;
返回PSAL * 12 + NVL(软件,0);
结束;
/

函数创建

L函数的调用

已申报
v_sal数;
开始
v_sal:= queryempsalary(7934);
dbms_output.put_line('salary是:| | v_sal);
结束;
/

工资:15600

已成功完成

SQL >开始
dbms_output.put_line('salary是:| | queryempsalary(7934));
结束;
/

工资:15600

已成功完成


触发
数据库触发器是一个与表相关联的存储的SQL / SQL程序。每当在指定的表上发布特定的数据操作语句(插入、更新、删除)时,Oracle将自动执行触发器中定义的语句序列。

触发类
Level Trigger的说法
在指定的操作语句的操作之前或之后执行一次,而不管该语句受多少行影响。

行级触发器(每行)
触发语句的每个记录都被触发。在行级触发器中,使用旧的和新的伪记录变量来标识值的状态。

创建一个触发器
创建{或替换}触发器触发器名称
{在} |
{插入删除更新{ | |柱} }
在表名
{每行{当(条件)}时
PLSQL块

示例1:通过限制非工作时间将数据插入数据库
创建或替换
securityemp触发
插入EMP前
声明
开始
如果to_char(系统日期、星期)在(星期四,星期六,星期日)
或to_number(to_char(SYSDATE,'hh24)之间的8和18)不
raise_application_error(20001,不能插入的数据在非工作时间。);
最后如果;
结束;
/

触发器的创建

触发器语句和伪记录变量的值。





触发语句


:老


:新



插入


所有的字段都为空(null)


要插入的数据



更新


更新前的行的值


更新后的值



删除


删除前一行的值。


所有的字段都为空(null)

示例2:确认数据(检查萨尔中的EMP表,修改不小于原始值的值)
SQL触发器创建触发器checksal >
在电磁脉冲更新之前
每一行
声明
开始
如:新。萨尔<:old.sal然后
raise_application_error(20001,工资更新后比以前小更新);
最后如果;
结束;
/

触发器的创建
运行结果之后:
SQL >更新EMP组萨尔= 260在EMPNO = 7499;

更新设置萨尔= 260,EMP empno = 7499

在ora-20001薪酬:更新比更新前
ora-06512:史葛。checksal
在ora-04088执行错误:trigger'scott checksal。

触发器概述
可以使用人字拖。
数据验证
进行复杂的安全检查
审计、跟踪表上的数据操作等。

查询触发器、进程和函数
SELECT * FROM user_triggers;
SELECT * FROM user_source;