初识PL/SQL

来源:互联网 发布:mysql空闲连接 编辑:程序博客网 时间:2024/06/05 08:08

什么是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变量的声明

  1. 基本变量类型:采用oracle基本数据类型声明的变量就是基本类型变量。
    例:
set serveroutput ondeclare  pnum number := 1;begin  dbms_output.put_line(pnum);end;
  1. 引用变量类型 :指引用已存在的变量的类型或者某个表字段的类型来做为自己的变量类型。
    使用引用变量类型的优点:

    1. 定义变量时不必查看表中各个字段的类型。
    2. 当源类型改变时,使用%type定义的变量类型也会跟着改变。

    例:

set serveroutput on --打开oracle自带的输出方法dbms_outputdeclare  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;
  1. 记录型变量:记录型变量可以存储多个字段类型组成一行;分为两种:
  2. record:存储自定义字段的所有类型。
  3. %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;

流程控制语句

条件结构

  1. if - then语句
if 条件 then    语句块end if;
  1. if - then - else语句
if 条件 then     语句块else     语句块end if;
  1. if - then - elsif
if 条件 then     语句块elsif then    语句块end if;
  1. case语句
case 变量    when value then 语句块    when value then 语句块    when value then 语句块    ...    [else 语句块]end case;

例:

set serveroutput onaccept 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;

循环结构

  1. while loop循环:循环开始前先判断条件是否为true,当条件为true时才会执行循环;每循环一次后会判断条件是否继续满足;不满足则退出循环;
while 执行循环条件 loop    语句块;end loop;

例:

set serveroutput ondeclare  pnum number := 1;begin  while pnum < 10 loop    dbms_output.put_line(pnum);    pnum := pnum + 1;  end loop;end;
  1. loop循环:使用exit关键字来退出循环;也可以用【exit when】的方式声明退出循环的条件;
loop    exit when 退出循环条件;    语句块;end loop;

例:

set serveroutput ondeclare  pnum number := 1;begin  loop     exit when pnum > 10;    dbms_output.put_line(pnum);    pnum := pnum + 1;  end loop;end;
  1. for loop循环:清楚的知道循环的次数,并且确定了循环的范围。
for i in [reverse] min_number..max_number loop    语句块;end loop;

例:

set serveroutput onbegin  for i in 0..30 loop    dbms_output.put_line(pnum);  end loop;end;

ps. 循环一开始就会将min_number复制给i,并且每循环一次都会在原来的基础上加1,直到循环到i等于max_number为止;使用reverse关键字可以让流程倒过来。

1 0