初识PL/SQL
2016-03-23 21:58
447 查看
什么是PL/SQL?
PL/SQL是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。PL/SQL程序结构:
declare 说明部分(变量说明、光标声明、例外说明) begin 语句序列(DML语句) exception 例外处理语句 end;
PL/SQL变量的声明
基本变量类型:采用oracle基本数据类型声明的变量就是基本类型变量。例:
set serveroutput on declare pnum number := 1; begin dbms_output.put_line(pnum); end;
引用变量类型 :指引用已存在的变量的类型或者某个表字段的类型来做为自己的变量类型。
使用引用变量类型的优点:
定义变量时不必查看表中各个字段的类型。
当源类型改变时,使用%type定义的变量类型也会跟着改变。
例:
set serveroutput on --打开oracle自带的输出方法dbms_output declare pnum number := 1; pnum2 pnum%type := 2; --引用变量pnum的类型 pemp_name employee.emp_name%type; --引用员工表的员工姓名字段的类型 begin dbms_output.put_line(pnum2); pemp_name := '员工姓名'; dbms_output.put_line(pemp_name); end;
记录型变量:记录型变量可以存储多个字段类型组成一行;分为两种:
record:存储自定义字段的所有类型。
%rowtype:存储某个表中一行所有字段的类型。
例:
set serveroutput on; declare --声明record类型 type r_type is record( r_id number(10,0), r_name varchar2(40) ); remp r_type; prow employee%rowtype; begin select * into prow from employee where emp_id = 1; dbms_output.put_line('员工id: '||prow.emp_id); dbms_output.put_line('员工姓名: '||prow.emp_name); select emp_id, emp_name into remp from employee where emp_id = 2; dbms_output.put_line('员工id: '||remp.r_id); dbms_output.put_line('员工姓名: '||remp.r_name); end;
流程控制语句
条件结构
if - then语句if 条件 then 语句块 end if;
if - then - else语句
if 条件 then 语句块 else 语句块 end if;
if - then - elsif
if 条件 then 语句块 elsif then 语句块 end if;
case语句
case 变量 when value then 语句块 when value then 语句块 when value then 语句块 ... [else 语句块] end case;
例:
set serveroutput on accept num prompt "请输入一个数字"; declare pnum number := # begin case pnum when 1 then dbms_output.put_line(1); when 2 then dbms_output.put_line(2); when 3 then dbms_output.put_line(3); when 4 then dbms_output.put_line(4); else dbms_output.put_line(pnum); end case; end;
循环结构
while loop循环:循环开始前先判断条件是否为true,当条件为true时才会执行循环;每循环一次后会判断条件是否继续满足;不满足则退出循环;while 执行循环条件 loop 语句块; end loop;
例:
set serveroutput on declare pnum number := 1; begin while pnum < 10 loop dbms_output.put_line(pnum); pnum := pnum + 1; end loop; end;
loop循环:使用exit关键字来退出循环;也可以用【exit when】的方式声明退出循环的条件;
loop exit when 退出循环条件; 语句块; end loop;
例:
set serveroutput on declare pnum number := 1; begin loop exit when pnum > 10; dbms_output.put_line(pnum); pnum := pnum + 1; end loop; end;
for loop循环:清楚的知道循环的次数,并且确定了循环的范围。
for i in [reverse] min_number..max_number loop 语句块; end loop;
例:
set serveroutput on begin for i in 0..30 loop dbms_output.put_line(pnum); end loop; end;
ps. 循环一开始就会将min_number复制给i,并且每循环一次都会在原来的基础上加1,直到循环到i等于max_number为止;使用reverse关键字可以让流程倒过来。
相关文章推荐
- SQLServer中char、varchar、nchar、nvarchar的区别:
- mysql查询某字段出现次数大于n的所有数据信息,还有对列出前三位
- 连接远端oracle时的一个小问题(ORA-01031)
- Oracle数据库的备份方法
- 数据库分页查询方法
- Oracle之数据库备份
- Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
- 17.Python笔记之memcached&redis
- oracle 表名是变量,查询结果集为空转为0
- Oracle忘记密码,用户被锁定该怎么办
- 详解 Redis 应用场景及应用实例
- oracle函数索引
- 数据库连接信息写在properties文件
- oracle数据库问题
- SQLServer的字段类型
- mysql集群:1045-Access denied for user 'root'@'localhost'(using password:YES)
- java开发中JDBC连接数据库代码和步骤
- Oracle学习之简单查询语句
- MySQL与Oracle 差异比较之三函数
- Oracle exp自动备份部分表(表的数量不定期有更新)