pl/sql 基础---定义并使用变量!
来源:互联网 发布:淘宝闲鱼可靠吗 编辑:程序博客网 时间:2024/05/16 14:17
pl/sql 基础---定义并使用变量!
在编写 pl/sql 程序时,可以定义变量和常量;在pl/sql 程序中包括有:
①标量类型 (scalar)
②复合类型 (composite)
③参照类型 (reference)
④lob (large object)
>标量(scalar)-- 常用类型
在编写 pl/sql 块时,如果要使用变量,需在定义部分定义变量。
pl/sql 中定义变量和常量的语法如下:
标量定义的案例:
①定义一个变长字符串
v_ename varchar2(10);
②定义一个小数范围 -9999.99~9999.99
v_sal number(6,2);
③定义一个小数并给一个初始值为 5.4:= 是 pl/sql 的赋值号
v_sal2 number(6,2):=5.4
④定义一个日期类型的数据
v_hiredate date;
⑤定义一个布尔变量,不能为空,初始值为 false
v_valid boolean not null default false;
>标量:使用标量
在定义好变量后,就可以使用这些变量。这里需要说明的是 pl/sql 块为变量赋值不同于其他的编程语言,需要在等号前加冒号 (:=)
例子:输入员工号,显示雇员姓名,工资,个人所得税(税率为0.03)。
----------------------------------------------
declare
c_tax_rate number(3,2):=0.03;
---用户名
v_ename varchar2(5); ///万一有用户名大于5个字符就会报错了
v_sal number(7,2);
v_tax_sal number(7,2);
begin
---执行
select ename,sal into v_ename,v_sal from emp where empno=&no;
---计算所得税
v_tax_sal:=v_sal*c_tax_rate;
---输出
dbms_output.put_line('姓名是: '||v_ename||' 工资: '||v_sal||' 交税:'||v_tax_sal);
end;
>标量(scalar):使用%type类型
对于上面的 pl/sql 块有一个问题:
就是如果员工姓名超过了5字符的话,就会有错误,为了降低 pl/sql 程序的维护工作量,可以使用 %type 属性定义变量,这样它会按照数据库列来确定你定义的变量的类型和长度。
标识符名 表名.列名%type;
----------------------------------------------
declare
c_tax_rate number(3,2):=0.03;
---用户名
v_ename emp.ename%type; //v_ename,类型是和表emp.ename下面的字段的类型大小一样!
v_sal emp.sal%type;
v_tax_sal number(7,2);
begin
---执行
select ename,sal into v_ename,v_sal from emp where empno=&no;
---计算所得税
v_tax_sal:=v_sal*c_tax_rate;
---输出
dbms_output.put_line('姓名是: '||v_ename||' 工资: '||v_sal||' 交税:'||v_tax_sal);
end;
复合变量(composite)---介绍 []
用于存放多个值的变量。主要包括:
① pl/sql 记录
② pl/sql 表
③ 嵌套表 nested table ///③④再研究!
④ 变长数组 varray ///动态表
》复合类型--pl/sql 记录
类似于高级语言中的结构体,需要注意的是,当引用 pl/sql 记录成员时,必须要加记录变量作为前缀(记录变量.记录成员)如下:
pl/sql 记录实例:
declare
----定义一个 pl/sql 记录类型 emp_record_type [类似于自己定义了一个数据类型,或像一个类,这个类型含三个数据 name, salary, tittle !就是这一个类型,就存放三个数据,便于管理]
type emp_record_type is record(
name emp.ename%type,
salary emp.sal%type,
title emp.job%type);
----定义了一个 sp_record 变量,这个变量的类型是 emp_record_type
sp_record emp_record_type; ---等价: v_name varchar2(45);
begin
select ename,sal,job into sp_record ///一次取出三个数据,扔进sp_record
from emp where empno=7788;
dbms_output.put_line('员工名:'||sp_record.name||’ 工资是:’sp_record.salary);
///用 sp_record.name取!类似面向对象!而不是C的 sp_record->name
end;
/
》复合类型-pl/sql表
相当于高级语言中的数组,但是需要注意的是在高级语言中数组的下标不能为负数,而pl/sql是可以为负数的,并且表元素的下标没有限制,实例如下:
declare
-----定义了一个 pl/sql表类型 sp_table_type,该类型是用于存放 emp.ename%type
-----index by binary_integer 表示下标是整数
type sp_table_type is table of emp.ename%type index by binary_integer;
-----定义了一个 sp_table 变量,这个变量的类型是 sp_table_type
///注意,PL/SQL的习惯是变量写在前面,类型在后面
sp_table sp_table_type;
begin
select ename into sp_table(0) from emp where empno=7788; //没有where,需要参照变量!
dbms_output.put_line('员工名:'||sp_table(0));
end;
/
说明:
sp_table_type 是 pl/sql 表类型
emp.ename%type 指定了表的元素的类型和长度
sp_table 为pl/sql表变量
sp_table(0) 则表示下标为0的元素
问题:能否将 pl/sql记录作为 pl/sql表的类型?
参照变量---介绍
参照变量是指用于存放数值指针的变量。通过使用参照变量,可以使得应用程序共享相同对象,从而降低占用的空间。在编写pl/sql程序时,可以使用游标变量(ref cursor)和对象类型变量 (ref obj_type) 两种参照变量类型。
参照变量--ref cursor游标变量
使用游标时,当定义游标时不需要指定相应的 select 语句,但是当使用游标时(open时)需要指定 select 语句,这样一个游标就与一个 select 语句结合了。实例如下:
①请使用 pl/sql 编写一个块,可以输入部门号,并显示该部门所有员工姓名和他的工资。
②在①基础上,如果某个员工的工资低于200元,就增加100元。
①:::::::::::
declare
---定义游标类型 sp_emp_cursor
type sp_emp_cursor is ref cursor;
---定义一个游标变量
test_cursor sp_emp_cursor;
---定义变量
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
---执行
---把 test_cursor 和一个 select 结合
open test_cursor for select ename,sal from emp where deptno=&no;
---循环取出
loop
fetch test_cursor into v_ename,v_sal;
---判断是否 test_cursor 为空
exit when test_cursor%notfound;
dbms_output.put_line('名字:'||v_ename||'工资:'||v_sal);
end loop;
end;
/
- pl/sql 基础---定义并使用变量!
- pl/sql之定义并使用变量,复合类型
- pl/sql之定义并使用变量,复合类型
- oracle PL\SQl基础 变量的使用
- PL/SQL变量定义规则
- Oracle定义PL/SQL变量
- ORACLE定义PL/SQL变量
- PL/SQL编程整理2 -- 定义或使用变量
- PL/SQL变量使用
- 定义并使用变量
- PL/SQL基础使用
- PL/SQL学习笔记#01 -- 变量定义
- pl/sql 关于变量定义的问题
- PL/SQL简单语句块,变量定义
- sql 定义变量,使用变量
- PL/SQL基础与使用
- PL/SQL的函数定义和使用
- PL/SQL函数的定义与使用
- 更改系统的服务前要做点什么?
- JavaScript 注入攻击
- 中国软件业人力成本10倍于美国
- 软件公司的两种管理方式
- POJ2262 Goldbach's Conjecture
- pl/sql 基础---定义并使用变量!
- myeclipse+8.6各个版本注册码
- jquery form的ajaxSubmit引发的命案
- iphone开发NSString字符串常用方法
- Windows/Ubuntu 在Eclipse中配置NDK自动编译环境builders
- 负数的左移与右移
- mysql cursor 游标
- 今日win7的oracle11g客户端通过tns远程登录linux的rac失败
- 1的数目