您的位置:首页 > 数据库 > Oracle

Oracle读书笔记-PL/SQL基础

2016-06-19 12:37 381 查看

Oracle读书笔记-PL/SQL基础

PL/SQL概述

PL/SQL是Oracle对标准SQL规范的扩展,全面支持SQL的数据操作、事物控制等。

PL/SQL基本语法

1、PL/SQL语句

PL/SQL中可以使用的SQL语句有:

INSERT、UPDATE、DELETE、SELECT INTO、COMMIT、ROLLBACK 和 SAVEPOINT

在编写PL/SQL语句时应当遵循如下规则:

* 语句可以写成多行,如sql语句一样

* 各个关键字、字段名称等通过空格分隔

* 每条语句必须以分号结束

2、PL/SQL命名规则

* 变量名长度不能超过30个字符

* 第一个字符必须为字母

* 不区分大小写

* 不能含有SQL关键

变量种类命名规范例子
程序变量以v_作为前缀v_name
程序常量以c_作为前缀c_name
游标变量以_cursor作为后缀emp_cursor
异常标识以e_作为前缀e_too_many
表类型以_table_type作为后缀emp_table_type
表变量以_table作为后缀emp_table
记录变量以_record作为后缀emp_record
SQL*Plus替代变量以p_作为前缀p_emp
绑定变量以g_作为前缀g_emp
3、注释

* 单行注释
--注释内容


* 多行注释
/*注释内容*/


4、基本语言块

PL/SQL的基本单位为“块”,所有的PL/SQL程序都是由一个或多个PL/SQL块构成的,这些块可以相互进行嵌套。一个基本的块有三部分组成。

[DECLARE
... --声明部分]
BEGIN
... --执行部分
[EXCEPTION
... --异常处理部分]
END;
/ --用于在命令窗口中执行以上内容,在sql窗口中可不用


例子:

declare
i integer;  --定义变量i,类型为integer
begin
SELECT COUNT(*) INTO i FROM TEST_TREE; --要执行的sql
DBMS_OUTPUT.put_line(i);  --输出语句
end;


结构说明:

* 声明部分(DECLARE):主要用于声明变量、常量、数据类型、游标、异常处理名词以及局部子程序定义等。包含了变量和常量的数据类型和初始值。

* 执行部分(BEGIN):执行部分是PL/SQL块的功能实现部分。这部分通过变量赋值、流程控制、数据查询、数据操纵、数据定义、事务控制、游标处理等实现块的功能。

* 异常处理部分(EXCEPTION):在这一部分中处理异常或错误

* /: PL/SQL程序块需要使用正斜线(/)结尾,才能被执行。(根据环境的不同可用可不用)

* 可以在一个块的执行部分或异常处理部分嵌套其它的PL/SQL块

* 每一条语句必须以分号结尾

5、变量与常量

变量声明及初始化

variable_name data_type [ [ NOT NULL ] { := | DEFAULT } value ] ;


* variable_name 变量名

* data_type 变量数据类型

* := | DEFAULT := 为赋值操作(:=中间不能有空格) DEFAULT 为设置默认值

* NOT NULL 指定变量不允许为空,在变量声明时需指定一个不为空的初始值,且在程序其它部分不允许修改其值为NULL

常量声明及初始化

constant_name CONSTANT data_type { := | DEFAULT }  value ;


6、复合数据类型

常用的复合数据类型主要有三种:%TYPE类型、自定义记录类型和%ROWTYPE类型

* %TYPE类型

* 记录类型

* %ROWTYPE类型

表结构

SQL> desc test_tree;
Name         Type         Nullable Default Comments
------------ ------------ -------- ------- --------
DEPT_ID      NUMBER
DEPT_NAME    VARCHAR2(20)
PARE_DEPT_ID NUMBER       Y


%TYPE :定义一个变量使其数据类型与已定义的某个数据变量的类型相同或者与数据库表的某个列的数据类型相同

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2  v_id test_tree.dept_id%TYPE;
3  BEGIN
4       SELECT test_tree.dept_id INTO v_id FROM test_tree WHERE test_tree.dept_id=2;
5       DBMS_OUTPUT.put_line('部门ID:'||v_id);
6  END;
7  /

部门ID:2

PL/SQL procedure successfully completed


记录类型(以后补充)

ab1d
%ROWTYPE :根据数据表中行的结构定义数据类型,并存储数据表中检索到的一行数据

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2      row_record test_tree%ROWTYPE;
3  BEGIN
4      SELECT * INTO row_record FROM test_tree WHERE test_tree.dept_id=2;
5      DBMS_OUTPUT.put_line('DEPT_ID:'||row_record.dept_id);
6      DBMS_OUTPUT.put_line('DEPT_NAME:'||row_record.dept_name);
7      DBMS_OUTPUT.put_line('PARE_DEPT_ID:'||row_record.pare_dept_id);
8  END;
9  /

DEPT_ID:2
DEPT_NAME:一级节点02
PARE_DEPT_ID:0

PL/SQL procedure successfully completed


流程控制

1、条件分支语句

IF condition THEN
statements1;
ELSEIF condition THEN
statements2;
ELSE
statements3;
END IF;


CASE search_expression   --待求值的表达式
WHEN expression1 THEN result1;  --expression1与表达式的结果进行比较
WHEN expression2 THEN result2;  --若值匹配则执行对应的result2后退出case
[ ELSE default_result ; ] --若前面无匹配的值则使用此处定义的默认值
END CASE;


CASE
WHEN condition1 THEN result1;
WHEN condition2 THEN result2;
[ELSE default_result;]
END CASE;


2、循环控制语句

无条件循环

LOOP
statements --statements至少会被执行一次
EXIT [ WHEN condition] --当condition=true时退出循环
END LOOP;


WHILE循环

WHILE condition LOOP --只有condition=true时才执行statements
statements
END LOOP;


FOR循环

FOR loop_variable IN [REVERSE] lower_bound...upper_bound LOOP
statements
END LOOP;


loop_variable 循环变量

REVERSE 指定每次循环中循环变量递减,默认递增

lower_bound 指定循环的起始值

upper_bound 指定循环的终止值

本文内容为《Oracle 从基础到应用》读书笔记
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: