Oracle 学习笔记8 —— PL/SQL 定义变量
来源:互联网 发布:ubuntu 16.04 xampp 编辑:程序博客网 时间:2024/05/16 18:49
1、声明变量
可以使用下面两种语法声明变量:
和其他语言相似,变量名必须满足如下条件:
标量量变量所使用的数据类型包括字符、数字、日期和布尔类型等。
%type 关键字的含义是声明一个与指定列名称相同的数据类型。如果emp表ename字段类型为varchar2(64),那么变量var_name的数据类型也是varchar2(64)。
上边的例子从emp表查询出数据,赋值给三个变量,同时打印变量值。同时,定义的变量只可以存储一个值,所有加上了条件,只返回一条记录。如果返回的是多条记录,则会产生错误。
使用%type 关键字定义变量的好处很明显:首先,不需要去查看表中列的类型,就可以定义合适长度,大小的变量;其次,具有较好的扩展性,如果表结构有变更,%type会自动调整,不需要我们手动修改。缺点是必须查看数据字典去确定变量类型,对性能会产生影响。
3、复合变量
标量标量只能存储一个值,如果要存储多个值,则需要复合变量。对于复合变量,用户可以根据需要定义结构,也可以使用系统自动决定的变量结构。
自定义记录类型
自定义记录类型的语法如下:
type 为自定义记录类型的关键字,record_name 为数据类型名,field_name为记录数据类型中的字段名,data_type为该字段的数据类型。
%ROWTYPE类型
%rowtype的用法和 %type类似。
可以使用下面两种语法声明变量:
variable_name data_type [ [ not null] := default_value_expression];variable_name data_type [ [ not null] default_value_expression];
和其他语言相似,变量名必须满足如下条件:
- 长度不能超过30个字符,并且中间不能有空格
- 由字母、0到9的数字、下划线"_"、美元符号"$" 以及"#"号组成
- 必须有字母开头
- 不能使用PL/SQL或SQL中的关键字,如:begin, end。
标量量变量所使用的数据类型包括字符、数字、日期和布尔类型等。
not null 表示变量必须是非空的,需要指定初始值。当变量被创建后,可以以表达式的方式对其赋初始值。在声明变量时,也可以使用default关键字指定变量的默认值。如果变量未赋值,则使用默认值。
declare out_date data; out_text varchar2(100); out_num number(10); out_boolean boolean;
2、 %TYPE 类型变量
在声明变量时,除了可以使用Oracle规定的数据类型,还可以使用%type关键字定义变量类型。
declare var_name emp.ename%TYPE
%type 关键字的含义是声明一个与指定列名称相同的数据类型。如果emp表ename字段类型为varchar2(64),那么变量var_name的数据类型也是varchar2(64)。
SQL> set serveroutput onSQL> declare 2 var_no emp.empno%type; 3 var_name emp.ename%type; 4 var_sal emp.sal%type; 5 begin 6 select empno, ename, sal 7 into var_no, var_name, var_sal 8 from emp 9 where empno='7369'; 10 11 dbms_output.put_line(var_no || ' | ' || var_name || ' | ' || var_sal); 12 end; 13 /7369 | SMITH | 800PL/SQL 过程已成功完成。
上边的例子从emp表查询出数据,赋值给三个变量,同时打印变量值。同时,定义的变量只可以存储一个值,所有加上了条件,只返回一条记录。如果返回的是多条记录,则会产生错误。
使用%type 关键字定义变量的好处很明显:首先,不需要去查看表中列的类型,就可以定义合适长度,大小的变量;其次,具有较好的扩展性,如果表结构有变更,%type会自动调整,不需要我们手动修改。缺点是必须查看数据字典去确定变量类型,对性能会产生影响。
3、复合变量
标量标量只能存储一个值,如果要存储多个值,则需要复合变量。对于复合变量,用户可以根据需要定义结构,也可以使用系统自动决定的变量结构。
自定义记录类型
自定义记录类型的语法如下:
type record_name is record ( field_name data_type [not null] [:= default_value], …… field_name data_type [not null] [:= default_value] );
type 为自定义记录类型的关键字,record_name 为数据类型名,field_name为记录数据类型中的字段名,data_type为该字段的数据类型。
SQL> set serveroutput onSQL> declare 2 type employee_type is record ( 3 var_no number, 4 var_name varchar2(20), 5 var_sal number); 6 employee employee_type; 7 begin 8 select empno, ename, sal 9 into employee 10 from emp 11 where empno='7369'; 12 13 dbms_output.put(employee.var_no); 14 dbms_output.put(' | ' || employee.var_name); 15 dbms_output.put_line(' | ' || employee.var_sal); 16 end; 17 /7369 | SMITH | 800PL/SQL 过程已成功完成。
%ROWTYPE类型
%rowtype的用法和 %type类似。
SQL> set serveroutput onSQL> declare 2 row_employee emp%rowtype; 3 begin 4 select * 5 into row_employee 6 from emp 7 where empno = '7499'; 8 9 dbms_output.put(row_employee.empno); 10 dbms_output.put(' | ' || row_employee.ename); 11 dbms_output.put(' | ' || row_employee.job); 12 dbms_output.put_line(' | ' || row_employee.sal); 13 end; 14 /7499 | ALLEN | SALESMAN | 1600PL/SQL 过程已成功完成。
- Oracle 学习笔记8 —— PL/SQL 定义变量
- Oracle数据库PL/SQL学习笔记——函数定义
- PL/SQL学习笔记#01 -- 变量定义
- Oracle定义PL/SQL变量
- ORACLE定义PL/SQL变量
- Oracle笔记 六、PL/SQL简单语句块、变量定义
- Oracle笔记 六、PL/SQL简单语句块、变量定义
- Oracle笔记 六、PL/SQL简单语句块、变量定义
- Oracle笔记 六、PL/SQL简单语句块、变量定义
- Oracle笔记 六、PL/SQL简单语句块、变量定义
- Oracle笔记 六、PL/SQL简单语句块、变量定义
- Oracle数据库PL/SQL学习笔记三——复合数据的定义
- Oracle学习笔记——PL/SQL编程基础
- Oracle学习笔记——PL/SQL块
- Oracle学习笔记——PL/SQL编程基础
- Oracle PL/SQL学习笔记
- oracle学习笔记 ---- PL/SQL
- Oracle--PL/SQL学习笔记
- 效率,效率,不能忍了!!
- VIM 文件浏览插件 — NERDTree
- 验证年龄字段是否为数字
- 实现计算算式字符串的2种方式(方式2)
- QT的安装
- Oracle 学习笔记8 —— PL/SQL 定义变量
- 和环境合作
- 界面布局-TableLayout
- 不要过于诚实与人交往
- Java中的过滤器[有实例]
- Combination Sum II
- 去掉字符串的左右空格
- 强化System.Convert.ChangeType, 使其能够转换枚举ENUM和可空类型Nullable
- 表单元素与普通类的对应属性