PL/SQL基础语法

有时候我们需要对数据库中的数据进行一些稍微复杂的操作,而且这些操作都是一次性的,用完之后就不再用了。

用存储过程的话就太麻烦,而且浪费,用完了还要去删除。而单个SQL无法满足需求。这时候用一下SQL的语句块就可以了。

如果你用的是Oracle数据库,那么你就可以用PL/SQL(Procedure Language/SQL),即过程化查询语言。这是第三代语言。而我们用的SQL是结构化查询语言,属于第四代语言。

PL/SQL能够实现更加复杂的逻辑操作,像我们使用Java,C等高级语言一样。但如果是在MYSQL/SQLSERVER数据库中,那PL/SQL就无法使用(PL/SQL是属于Oracle的过程查询语言)。

如果你要在MYSQL/SQLSERVER实现复杂的逻辑查询,那你只能通过编写存储过程实现。

一、PL/SQL的结构

[declare]
  --变量声明(可以省略)
  --如:my_var varchar(200);
begin
  --SQL语句[exception]  --异常声明(可以省略)  
end;

例如:

begin
  for rec IN (select fgwwh, sid$ from t_yw_temp)
  loop
      update t_yw_gcjs_lxsq lxsq
      set lxsq.sid$ = rec.sid$
      where lxsq.fgwwh = rec.fgwwh;
      commit;
  end loop;
end;

二、PL/SQL的基本规则

1、标识符不区分大小写,所有的名称在存储时自动改成大写。

2、标识符只允许字母、数字、下划线,并且以字母开头。

3、不能使用保留字,与保留字同名必须使用双引号括起来。

4、END后需要使用分号结束。

5、字符类型和日期类型需要使用单引号括起来。

建议的写作规范:

1、命名应以“_”的连接方式,而不是用大小写混合的方式,如:p_id(表示名字为id,"p"表示它是一个传进来的参数)。

2、变量前最好加上前缀,以表示该变量的数据类型、作用范围等。

3、每个变量都应加上注释。

4、建议用3个半角空格替代TAB健进行缩进。

5、逗号后面以及操作符前后都应加空格。

三、PL/SQL的注释

-- 单行注释

/* 多行注释 */

四、变量声明

语法结构如下:

variable_name datatype [ [NOT NULL] {:= | DEFAULT} expression ];

以上语法结构最常见的组合方式有两种:

第一种,直接声明变量,不赋值,如:

v_id number;

第二种,声明变量并赋值,如:

v_id number := 22;

在给变量定义类型的时候,除了可以定义成数据库常用的类型(NUMBER, VCHAR, LONG, DATE, TIMESTAMP)之外,还可以直接将数据库中某个字段的类型作为变量的类型,如:

v_productid productinfo.productid%TYPE;  --如果需要赋值,也是在后面加上“:=”即可。

以上的变量声明是最常用的变量声明,当然还有其他更复杂的变量类型,但不常用,这里不做叙述。

五、IF条件控制语句

IF语句有三种使用方式:IF....、IF....ELSE....、IF...ELSEIF.... 三种方式。

1、IF结构结构

IF condition THEN
  statments;
END IF;

2、IF...ELSE...结构

IF condition THEN
  statments;
ELSE
  statments;
END IF;

3、IF...ELSEIF...结构

IF condition THEN
  statements;
ELSEIF
  statements;
[ELSE statements]
END IF;

六、CASE控制语句

1、简单CASE语句

语法格式:

CASE case_operand
WHEN when_operand THEN ....
WHEN when_operand THEN ....
.....
END CASE;

如:

DECLARE
   v_categoryid VARCHAR2(12);
BEGIN

   SELECT category INTO v_categoryid FROM productinfo WHERE productid = ‘001‘;

   CASE v_categoryid
   WHEN ‘001‘ THEN
      DBMS_OUTPUT.PUT_LINE("CATEGORY 001");
   WHEN ‘002‘ THEN
      DBMS_OUTPUT.PUT_LINE("CATEGORY 002");
   END CASE;

END;

2、搜索式Case语句

语法格式:

CASE
WHEN boolean_expression THEN statement;
WHEN boolean_expression THEN statement;
......
END CASE;

例子如下:

CASE
WHEN v_productprice <= 1000 THEN
  --SQL语句
WHEN v_productproce > 100 AND v_productprice <= 3000 THEN
  --SQL语句
....
ELSE
  --SQL语句
END CASE;

七、LOOP循环控制语句

LOOP语句有以下四种:

· LOOP

· WHILE...LOOP;

` FOR...LOOP;

` CURSOR FOR LOOP;

1、基本的LOOP

<<basic_loop>>
LOOP
  --SQL语句
  EXIT basic_loop WHEN ...;
END LOOP;

其中<<basic_loop>>是LOOP语句的标签。

2、WHILE...LOOP语句

WHILE boolean_expression
LOOP
  statement...
END LOOP;

3、FOR...LOOP语句

FOR index_name IN [REVERSE] lower_bound .. upper_bound
LOOP
statement...
END LOOP;

表示index_name从lower_bound增加到upper_bound,类似于for循环。

其中REVERSE表示循环方式从upper_bound降到lower_bound。

例如:

DECLARE
   v_num NUMBER(8) := 0;
BEGIN
   FOR inx IN 1..20 LOOP
  v_num := v_num + inx;
   END LOOP;
END;

其中lower_bound和upper_bound要用".."连接。

八、异常处理

定义当DML语句发生异常时,如何处理。例如:

DECLARE
   v_catgid VARCHAR2(10) := 0;
   v_bol BOOLEAN := TRUE;
BEGIN
   SELECT CATEGORYID INTO v_catgid
   FROM CATEGORYINFO

   EXCEPTION
      WHEN NO_DATA_FOUND THEN
       ....
      WHEN ......  THEN      ...      WHEN OTHERS THEN      ...
END;

Oracle中的异常可以分为三类:

①预定义异常;

②非预定义异常;

③自定义异常。

其中预定义异常是指Oracle已定义好的异常,我们可以直接调用,常用的预定义异常有:

至于非预定义异常和自定义异常这里不做介绍。        

时间: 2024-07-29 11:29:16

PL/SQL基础语法的相关文章

Oracle PL/SQL基础语法 ——Oracle Database 11g R2

一.PL/SQL代码块 DECLARE(可以不是用此块) <声明变量>; BEGIN <语句序列>; END; 在SQL Plus执行需要在代码块最后/,并且单独占一行. DBMS_OUTPUT.PUT_LINE();用于输出内容,类似于C的printf,C++的cout. 二.PL/SQL注释 行注释(一行):--. 块注释(多行):/* */.

Oracle实践--PL/SQL基础之表分区

PL/SQL基础入门之表分区 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. ---------------------------------------------

Oracle实践--PL/SQL基础之代码块

PL/SQL基础入门之代码块 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. 优点: 1.       支持SQL,可以使用:DML,DCL,游标控制和SQL运算符 2

Oracle实践--PL/SQL基础之触发器和程序包

PL/SQL基础之触发器和程序包  程序包 /* 程序包:对相关存储过程,函数,变量,游标和异常等对象的封装 有声明和主体组成 优点:1.模块化:2.更轻松的应用程序设计;3.信息隐藏;4.性能更佳 */ --程序包的声明:关键字:package is end create or replace package my_pack as procedure packageTest(v_num number); end my_pack;--也可以是 end; --程序包的主体 create or re

pl/sql 基础笔记(上)

由于公司中使用 oracle,而本人对存储过程一直也懵懵懂懂,故一周时间学习了一遍 pl/sql,在此记下笔记!!! 一.前提,pl/sql 是啥? 1.PL/SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问. 2.由于该语言集成于数据库服务器中, 所以PL/SQL代码可以对数据进行快速高效的处理. 3.PL/SQL 是 ORACLE 系统的核心语言,现在 ORACLE 的许多部件都是由 PL/SQL 写成. 4.在 PL/SQL 中只能用 SQL 语句

Oracle实践--PL/SQL基础之同义词和序列

PL/SQL基础入门之同义词和序列             PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. 同义词: /*     同义词:现有对象的一个别名:    

Oracle实践--PL/SQL基础之游标

PL/SQL基础入门之游标 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. ----------------------------------------------

Oracle实践--PL/SQL基础之视图和索引

PL/SQL基础入门之视图和索引         PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. -----------------------------------

PL/SQL 基础知识简介

1.PL/SQL代码块 PL/SQL 代码块是指令的集合,支持所有的DML,NDS,DBMS_SQL,DDL. :DML 是数据操纵语言(Data Manipulation Language)包括,Insert ,update,delete : DDL是数据定义语言(Data Definition Language ),包括,Alter,create,drop,truncate,Grant,revoke : NDS本地动态SQL(Native Dynamic SQL) 2.PL/SQL代码块结构