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;

/

时间: 2024-10-27 09:38:07

pl/sql 基础---定义并使用变量!的相关文章

PL/SQL块定义部分之一标量类型

定义部分主要定义变量和常量,语法如下: DECLARE virableName [CONSTANT] dataType [NOT NULL][:=|default exp or value]; 在给变量或者常量命名时应该遵循以下原则: 1.变量名只能字母开头,其它位可以包含_.$.#和数字 2.长度1-30 3.不区分大小写 4.不能是系统关键字 CONSTANT关键字表示定义常量,常量定义时必须给出初始值,而且值不能再更改. dataType处是数据类型,要注意此处的数据类型是PL/SQL数据

PL/SQL基础:阶层查询

ORACLE 10g新增了阶层查询操作符PRIOR,CONNECT_BY_ROOT ■PRIOR 阶层查询的CONNECY BY condition的条件式需要用到PRIOR来指定父节点,作为运算符,PRIOR和加(+)减(-)运算的优先级相同. ■阶层查询 语法:START WITH condition CONNECT BY NOCYCLE condition START WITH 指定阶层的根 CONNECT BY 指定阶层的父/子关系 NOCYCLE 存在CONNECT BY LOOP的纪

[转贴]Oracle PL/SQL语言基础

oracle|sql语言 [转贴]Oracle PL/SQL语言基础 Oracle PL/SQL语言基础   PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序.    PL/SQL的优点    从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有

Oracle PL/SQL语言基础

oracle|sql语言 Oracle PL/SQL语言基础  2002-8-23   Oracle PL/SQL语言基础 PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序. PL/SQL的优点 从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独

PL/SQL --> 语言基础

--===================== -- PL/SQL --> 语言基础 --=====================       PL/SQL是过程化的SQL语言,是ORACLE对SQL语言的扩展,在普通SQL语句的基础上增加了编程语言的特点.使得该语言不仅具有过程编程语 言的特征,如循环.条件分支等.同时也具有对象编程语言的特征,如重载.继承等.     一.PL/SQL程序语言的组成     主要由块组成         一个块由三个基本部分组成:声明.执行体.异常处理   

Oracle PL/SQL语言入门基础_oracle

正在看的ORACLE教程是:Oracle PL/SQL语言入门基础.PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序. PL/SQL的优点 从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL

oracel中sql语句和pl/sql语句使用绑定变量

关于绑定变量的用法: 之前的文章介绍了绑定变量对于系统的重要性,这里对绑定变量的使用做进一步的分析和说明. 1)在sql语句中如何带入bind value SQL> variable x number; SQL> exec :x:=100; PL/SQL procedure successfully completed. SQL> select * from t where id=:x; no rows selected SQL> exec :x:=101; SQL> sel

PL/SQL 游标变量

    游标变量与游标相似,有其共性,也有其不同点.就其共性来说两者都是指向多行查询的结果集中的当前行.都要经历声明,打开,检索与关闭的过程.所不同的是游标与游标变量类似于常量与变量.游标是静态的,而游标变量是动态的,因为游标变量并不与某个特定的查询相绑定.所以,游标变量可以打开任何类型兼容的查询.其次可以将游标变量作为参数传递给本地和存储子程序.本文主要描述游标变量的使用.   一.什么是游标变量    显示游标用于命名一个工作区域,其中保存多行查询的信息,而且该游标始终指向工作区域的内容.而

Oracle数据库之PL/SQL程序基础设计

一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /* * 声明部分--定义常量.变量.复杂数据类型.游标.用户自定义异常 */ BEGIN /* * 执行部分--PL/SQL语句和SQL语句 */ EXCEPTION /* * 异常处理部分--处理运行异常 */ END; /*块结束标记 */ 要实现PL/SQL程序设计,先介绍如下的基本内容: 二.标识符 PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同: 标识符名第一个字符必须为