pl/sql 基础---定义并使用变量!

简介: pl/sql 基础---定义并使用变量! 在编写 pl/sql 程序时,可以定义变量和常量;在pl/sql 程序中包括有: ①标量类型 (scalar) ②复合类型 (composite) ③参照类型 (reference) ④lob (large object)   >标量(scalar)-- 常用类型 在编写 pl/sql 块时,如果要使用变量,需在定义部

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;

/

目录
相关文章
|
25天前
|
SQL Perl
PL/SQL经典练习
PL/SQL经典练习
13 0
|
25天前
|
SQL Perl
PL/SQL编程基本概念
PL/SQL编程基本概念
13 0
|
30天前
|
SQL Perl
PL/SQL Developer 注册机+汉化包+用户指南
PL/SQL Developer 注册机+汉化包+用户指南
16 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
99 1
|
1月前
|
SQL Oracle 关系型数据库
Oracle系列十一:PL/SQL
Oracle系列十一:PL/SQL
|
3月前
|
SQL 缓存 数据库
PL/SQL的性能优化
PL/SQL的性能优化
37 0
|
3月前
|
SQL Perl
PL/SQL的函数和包
PL/SQL的函数和包
27 1
|
SQL 存储 Oracle
|
8天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
51 10