SQL-PL/SQL基础

SQL的4GL,对流程控制的支持不够,Oracle的PL/SQL是3GL。加入了流程控制、变量等支持能够在数据库层面上进行程序的设计。

  • PL/SQL的特点
    1.支持事务控制和SQL.
    2.数据类型在SQL的基础上进行了扩展。
    3.PL/SQL可存储在Oracle数据库上。
    4.能够对PL/SQL进行权限控制。

  • PL/SQL的优势
    1.能够提高横向的运行性能。
    2.能够使程序模块化。
    3.能够採用逻辑控制语句来控制程序的结构。
    4.利用运行时的错误信息,做日志记录。
    5.良好的移植性。

  • PL/SQL的结构
    pl/sql的基本单位是块。分为三部分:声明部分,运行部分和异常处理部分。
    以declare作为開始标记。运行部分用begin作为标志,异常处理部分以exception作为标志。当中运行部分是必须有的。

[declare]
....
begin
    ...
[exception]
    ...
end;

比如:
仅仅包括运行体

begin
    dbms.output.put_lin('运行体...');
end;

注意,在使用dbms_output之前要打开控制器输出开关:set serveroutput on;

包括声明和运行体两部分:

declare
     v_result number(8,2);
begin
     v_result = 100 / 6;
     dbms_output.put_line('结果是:'||v_result);
end;

包括声明、运行体和异常处理三部分

declare
     v_ename varchar2(20);
begin
     select ename into v_ename from emp where empno=7369;
     dbms_output.put_line('姓名:'||v_ename);
exception
     when no_data_found then
          dbms_output.put_line('没有该员工');
     when too_many_rows_exeption then
          dbms_output.put_line('数据过多');
end
  • PL/SQL中变量的使用
    1.声明变量的语法结构
variable_name datatype[ [not null] {:=|default} expression];

2.常量声明

constant_name constant datatype
[not null]
{:=default} expression;

常量的datatype有下面三种:
1)标量类型:单一类型,不存在组合
2)复合类型:由几种单一类型组成
3)引用类型:使用其它数据项的引用

标量类型:
数值
number(pression,scade)
binary_integer
pls_integer
simple_integer

字符
char
varchar2
nvarchar
long

布尔类型
true/false/null

日期类型
date/datestamp

复合类型(先定义后声明变量)
记录类型声明语法

type type_name is recode
(
     field_name datatype
     [ [not null] {:=|default} expression]
     [,field_name datatype
       [not null]
       {:=|default} expression
     ]
);

VARRAY变长数组:它是一个存储有序元素的集合。适合较少的数据使用。

声明语法:

type type_name is {varray} (size_limit) of element_type [not null]
  • PL/SQL中的结构控制语句

1.IF条件语句

IF condition THEN
     statement;
END IF;

IF condition THEN
    statement;
ELSE
    statement;
ENDF IF;

IF condition THEN
     statement;
ELSE IF condition THEN
     statement;
ELSE
     statement;
END IF;

2.CASE语句
①简单case

[<<label_name>>]

CASE case_operate
WHEN condition THEN
     statement;
[WHEN condition THEN
     statement;]
[ELSE 
     statement;]     

END CASE[<<label_name>>]

②搜索case

[<<label_name>>]
CASE
  WHEN boolean_exp THEN statement;
  [WHEN boolean_exp THEN statement;]
  ...
  [ELSE statement;]

END CASE[<<label_name>>]
  • LOOP循环控制语句
    1.基本LOOP
[<<label_name>>]
LOOP
    statement;
END LOOP [<<label_name>>];

基本loop语句通常和exit连用。否则会出现死循环

[<<label_name>>]
loop
     ....
     exit when ...
     | if ... exit;

2.WHILE..LOOP

[<<label_name>>]
when boolean_exp
loop
     statement;
end loop[<<label_name>>]

3.FOR…LOOP

[<<label_name>>]
for index_name in 
[REVERSE]  //反向
lower_bound, upper_bound
loop
    statement;
end loop[<<label_name>>]
原文地址:https://www.cnblogs.com/zsychanpin/p/7389503.html