oracle13 触发器 变量

触发器
  触发器是指隐含的执行的存储过程。当定义触发器时,必须要指定触发的事件和触发的操作,常用的触发事件包括insert,update,delete语句,而触发操作实际就是一个pl/sql块。可以使用create trigger来建立触发器。
特别说明:
我们会在后面详细为大家介绍触发器的使用,因为触发器是非常有用的,可维护数据库的安全和一致性。 
定义并使用变量,复合类型
定义并使用变量 

在编写pl/sql程序时,可以定义变量和常量;在pl/sql程序中包括有:
1.标量类型(scalar)
2.复合类型(composite)
3.参照类型(reference)
4.lob(large object) 

标量(scalar)——常用类型
在编写pl/sql块时,如果要使用变量,需在定义部分定义变量。pl/sql中定义变量和常量的语法如下:
identifier [constant] datatype [not null] [:=| default expr]
identifier : 名称
constant :指定常量。需要指定它的初始值,且其值是不能改变的
datatype :数据类型
not null :指定变量值不能为null
:= 给变量或是常量指定初始值
default 用于指定初始值
expr :指定初始值的pl/sql表达式,可以是文本值、其它变量、函数等。 

 标量定义的案例
1.定义一个变长字符串
v_ename varchar2(10);
2.定义一个小数,范围 -9999.99~9999.99
v_sal number(6,2);
3.定义一个小数并给一个初始值为5.4 :=是pl/sql的赋值号
v_sal2 number(6,2):=5.4;
4.定义一个日期类型的数据
v_hiredate date;
5.定义一个布尔变量,不能为空,初始值为false
v_valid boolean not null default false; 

 标量(scalar)——使用标量
在定义好变量后,就可以使用这些变量。这里需要说明的是pl/sql块为变量赋值不同于其它的编程语言,需要在等号前面加冒号(:=)
下面以输入员工号,显示雇员姓名、工资、个人所得税(税率为0.03)为例。说明变量的使用,看看如何编写。
Sql代码
1.declare  
2.  c_tax_rate number(3,2):=0.03;   
3.  --用户名   
4.  v_ename varchar2(5);   
5.  v_sal number(7,2);   
6.  v_tax_sal number(7,2);   
7.begin  
8.--执行   
9.    select ename,sal into v_ename,v_sal from emp where empno=&no;   
10.--计算所得税   
11.    v_tax_sal := v_sal*c_tax_rate;   
12.--输出   
13.    dbms_output.put_line(‘姓名是:‘||v_ename||‘工资:‘||v_sal||‘ 交税:‘||v_tax_sal);   
14.end;   
15./
标量(scalar)——使用%type类型
对于上面的pl/sql块有一个问题:
就是如果员工的姓名超过了5个字符的话,就会有错误,为了降低pl/sql程序的维护工作量,可以使用%type属性定义变量,这样它会按照数据库列来确定你定义的变量的类型和长度。
我们看看这个怎么使用:
标识符名 表名.列名%type;
比如上例的v_ename,这样定义: v_ename emp.ename%type; v_ename这个变量的类型和emp表的ename字段类型一样。

复合变量(composite)
标量只能存放单个数据,用于存放多个值的变量。主要包括这几种: 
1.pl/sql记录类型 
2.pl/sql表类型 
3.嵌套表类型 
4.varray类型

复合类型——pl/sql记录
类似于高级语言中的结构体,需要注意的是,当引用pl/sql记录成员时,必须要加记录变量作为前缀(记录变量.记录成员)如下:

Sql代码

  1. declare
  2. --定义一个pl/sql记录类型emp_record_type,类型包含3个数据name,salary,title。说白了,就是一个类型可以存放3个数据,主要是为了好管理
  3. type emp_record_type is record(
  4. name   emp.ename%type,
  5. salary emp.sal%type,
  6. title  emp.job%type);
  7. --定义了一个sp_record变量,这个变量的类型是emp_record_type
  8. sp_record emp_record_type;
  9. begin
  10. select ename, sal, job into sp_record from emp where empno = 7788;
  11. dbms_output.put_line (‘员工名:‘ || sp_record.name);

end;

时间: 2024-10-11 07:32:10

oracle13 触发器 变量的相关文章

Oracle 11g数据库详解(2015-1-18更新)

Oracle 11g数据库详解 整理者:高压锅 QQ:280604597 Email:[email protected] 大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的 1   简介 数据库操作主要有以下几步: 1.  启动.停止数据库 2.  连接.断开数据库 3.  创建.修改.删除数据库用户 4.  表空间 5.  新建.修改.删除表 6.  查询.插入.修改.删除表数据 7.  新建.修改.删除视图 8.  新建.修改.删除存储过程 9.  新建.修改.删除触发

SQL错误码

///////////////////////////////////////////////////////////////ORA-00001: 违反唯一约束条件 (.)ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-00020: 超出最大进程数 ()ORA-00021: 会话附属于其它某些进程:无法转换会话ORA-00022: 无效的会话 ID:访问被拒绝ORA-00023: 会话引用进程私用内存:无法分离会话O

HANA SQL

约束 注释 你可以给你的 SQL 语句添加注释来增加可读性和可维护性. SQL 语句中注释的分隔如下: l  双连字符“--”.所有在双连字符之后直到行尾的内容都被 SQL 解析器认为是注释. l  “/*”和“*/”.这种类型的注释用来注释多行内容.所有在引号符“/*”和关闭符“*/”之间 的文字都会被 SQL 解析器忽略. 标识符 标识符用来表示 SQL 语句中的名字,包括表名.视图名.同义字.列名.索引名.函数名.存储过程名.用户名.角色名等等.有两种类型的标识符:未分隔标识符和分隔标识符

Oracle 11g数据库详解(2015-02-28更新)

Oracle 11g数据库详解 整理者:高压锅 QQ:280604597 Email:[email protected] 大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的 1   简介 数据库操作主要有以下几步: 1.  启动.停止数据库 2.  连接.断开数据库 3.  创建.修改.删除数据库用户 4.  表空间 5.  新建.修改.删除表 6.  查询.插入.修改.删除表数据 7.  新建.修改.删除视图 8.  新建.修改.删除存储过程 9.  新建.修改.删除触发

24. SQL -- TSQL组成

T-SQL 组成 DML(数据操作语言Data Manipulation Language) 查询.插入.删除和修改数据库中的数据. SELECT: 从数据库表表中检索数据行和列 INSERT: 向数据库表添加新数据行 UPDATE: 更新数据库表中的数据 DELETE: 从新数据库表中删除数据行 DCL(数据控制语言Data Control Language) 用来控制存取许可.存取权限等. GRANT.REVOKE 等. COMMIT: 结束当前事务 ROLLBACK:中止当前事务 SET

Oracle错误一览表

ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 ()ORA-00021: 会话附属于其它某些进程:无法转换会话 ORA-00022: 无效的会话 ID:访问被拒绝ORA-00023: 会话引用进程私用内存:无法分离会话 ORA-00024: 单一进程模式下不允许从多个进程注册 ORA-00025: 无法分配ORA-00026: 丢失或

前端面试合集

VUE 1.什么是 vue 生命周期 2.vue生命周期的作用是什么 3.第一次页面加载会触发哪几个钩子 4.简述每个周期具体适合哪些场景 5.created和mounted的区别 6.vue获取数据在哪个周期函数 7.请详细说下你对vue生命周期的理解? vue路由面试题 mvvm 框架是什么?vue-router 是什么?它有哪些组件 active-class 是哪个组件的属性?怎么定义 vue-router 的动态路由? 怎么获取传过来的值vue-router 有哪几种导航钩子?6.$ro

走向面试之数据库基础:三、SQL进阶之变量、事务、存储过程与触发器

一.变量那点事儿 1.1 局部变量 (1)声明局部变量 DECLARE @变量名 数据类型 DECLARE @name varchar(20) DECLARE @id int (2)为变量赋值 SET @变量名 =值 --set用于普通的赋值 SELECT @变量名 = 值 --用于从表中查询数据并赋值,,可以一次给多个变量赋值 SET @name=‘张三’ SET @id = 1 SELECT @name = sName FROM student WHERE sId=@id (3)输出变量的值

变量,存储过程,触发器,事务-索引等

--SELECT TOP 3 Name,Age,Gender FROM View_Student WHERE GROUP having ORDER BY id DESC ----在最终生成用户想要的数据之后,才进行排序,如果不得不排序,那么就尽可能吧消耗减到最小 --ALTER VIEW View_Student --AS --SELECT * FROM dbo.Student DECLARE @num INT --赋值,取值 --赋值两种方式:set select SET @num=100 S