Oracle中 关于数据库存储过程和存储函数的使用
方法二
SQL> create or replace
1 /
select sal into pSal from emp where empno=empid;
数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。
end;
as
pComm number; --定义变量保存员工的奖金
语句级触发器
raise_application_error(-20001,'更新后的薪水比更新前小');
declare
800涨工资后880
所有字段都是空(null)
CREATE [OR REPLACE] FUNCTION函数名(参数列表)pSal emp.sal%type;--保存员工当前 工资
示例2:确认数据(检查emp表中sal的修改值不低于原值)
存储函数
Procedure created
raisesalary(7369);
:old
创建触发器delete
end if;dbms_output.put_line('salary is:'|| queryEmpSalary(7934));
触发器的类型
将要插入的数据
/*update emp set sal=260 where empno=7499
update emp set sal = sal*1.1 where empno=empid;
before insert on emp
CREATE [or REPLACE] TRIGGER 触发器名
创建存储过程
if :new.sal<:old.sal then
/
PLSQL子程序体;
select sal,comm into psal,pcomm from emp where empno = empid;
Trigger created
end;
end;
RETURN 函数值类型
用CREATE PROCEDURE命令建立存储过程和存储函数。
删除以前该行的值
beginv_sal:=queryEmpSalary(7934);
Update
• 实施复杂的安全性检查:new
begin
员工号:7369涨工资前
/
触发语句与伪记录变量的值
触发语句
ORA-06512: 在 "SCOTT.CHECKSAL", line 4return number
SQL> /**/
SQL> begin
/
触发语句作用的每一条记录都被触发。在行级触发器中使用old和new伪记录变量,识别值的状态。
ON 表名
SQL> update emp set sal=260 where empno=7499;
Trigger created
raise_application_error(-20001,'不能在非工作时间插入数据。');
• Select * from user_triggers;
before update of sal on emp
begin
函数(Function)为一命名的存储程序,可带参数,并返回一计算值。函数和过程的结构类似,但必须有一个RETURN子句,用于返回函数值。函数说明要指定函数名、结果值的类型,以及参数类型等。
dbms_output.put_line('salary is:'|| v_sal);
Function created
为指定的职工在原工资的基础上长10%的工资,并打印工资前和工资后的工资
v_sal number;
return psal*12+nvl(pcomm,0);
end;
AS
在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行。
l 函数的调用
• Select * from user_source;
pSal number; --定义变量保存员工的工资
存储过程没有返回值。存储函数有返回值
存储过程和存储函数指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。
• 做审计,跟踪表上所做的数据操作等
--打印涨工资前后的工资
end;
end if;
SQL> create or replace procedure raiseSalary(empid in number)
PLSQL 块
触发器可用于
SQL> set serveroutput on
示例:查询某职工的年收入。
ORA-20001: 更新后的薪水比更新前小
end;
--查询该员工的工资
PLSQL子程序体;
查询触发器、过程及函数
查询某职工的总收入
SQL> create or replace trigger checkSal
begin
/*
语法:
declare
if to_char(sysdate,'day')in('星期四','星期六','星期日')
*/
触发器
触发器总结
--存储过程调用
SQL> exec raisesalary(7369);
{DELETE | INSERT | UPDATE [OF列名]}
ORA-04088: 触发器 'SCOTT.CHECKSAL'执行过程中出错
PL/SQL procedure successfully completed
end;
SQL> declare
--给该员工涨工资
/
所有字段都是空(null)
/PL/SQL procedure successfully completed
更新以前该行的值
*/更新后的值
create or replace function queryEmpSalary(empid in number)示例1:限制非工作时间向数据库插入数据
{BEFORE | AFTER}
存储过程示例:为指定的职工在原工资的基础上长10%的工资
Insert
set serveroutput ondbms_output.put_line('员工号:' || empid || '涨工资前
运行后结果:
建立存储函数的语法:
begin
create [or replace] PROCEDURE过程名(参数列表)
for each row
salary is:15600
行级触发器(FOR EACH ROW)
/
' || psal || '涨工资后' || psal*1.1);
begin
PL/SQL procedure successfully completed
trigger securityEmp
--方法一
• 数据确认
salary is:15600
[FOR EACH ROW [WHEN(条件) ] ]
as
or to_number(to_char(sysdate,'hh24'))not between 8 and 18 then
相关热词: oracle
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/sql/oracle/3589.shtml
相关文章
热门TAG
命令 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 技巧 权重 服务器 网站流量 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows 蜘蛛 搜索引擎 网站收录 JSP 实例解析最新文章
-
OracleRAC的五大优势及其劣
时间:2021-01-05
-
Oracle优化器 自适应执行计
时间:2021-01-05
-
Oracle行内链接不会引起U
时间:2021-01-05
-
Window下Oracle Database 11g 发行
时间:2020-12-29
-
Oracle如何实现like多个值的
时间:2020-12-29
-
maven添加oracle依赖失败问题
时间:2020-12-29
-
OracleRAC基本概念及入门
时间:2020-12-29
-
Azure File Storage 基本用法
时间:2020-12-26
热门文章
-
Azure Queue Storage 基本用法 Azure Storage 之
时间:2020-12-26
-
Oracle存储过程编程详解
时间:2020-12-07
-
win10下oracle 11g安装图文教程
时间:2020-12-25
-
oracle 数据库学习 基本结构介绍
时间:2020-12-13
-
Azure File Storage 基本用法 Azure Storage 之 F
时间:2020-12-26
-
windows使用sqlpus连接oracle 数据库的教程图
时间:2020-12-25
-
Window下Oracle Database 11g 发行版2安装教程
时间:2020-12-29
-
Oracle解锁的方式介绍
时间:2020-12-14
-
linux下oracle设置开机自启动实现方法
时间:2020-12-13
-
Oracle学习记录之使用自定义函数和触发器
时间:2020-12-07
