`

PL/SQL编程简介(转)

阅读更多

Oracle在数据库中引入了一种过程化编程语言,称为PL/SQL(Procedural Language/SQL).PL/SQL构建与SQL之上,可以用来编写包含SQL语句程序。其中包含这类语言的标准编程结构如下:

  • 块结构
  • 变量和类型
  • 条件逻辑
  • 循环
  • 游标,其中保存着查询返回的结果
  • 过程
  • 函数
  • 包,可以用来将过程和函数组合到一个单元中

      通常,PL/SQL用于向数据库中加入业务逻辑。这种集中化的代码可以由任何能够访问数据库的程序调用,其中就包括C程序和Java程序。

 

     块结构

     PL/SQL程序可划分成称为块的结构,每一个块包含有PL/SQL和SQL语句。典型的PL/SQL代码包含如下的结构:

    

    

Sql代码 复制代码
  1. [DECLARE  
  2.   
  3.      declaration_statements        
  4.   
  5.     ]   
  6.   
  7.     BEGIN  
  8.   
  9.          executable_statements   
  10.   
  11.      [EXCEPTION   
  12.   
  13.          exception_handing_statements   
  14.   
  15.      ]   
  16.   
  17.     END;  
 [DECLARE

      declaration_statements     

     ]

     BEGIN

          executable_statements

      [EXCEPTION

          exception_handing_statements

      ]

     END;

 

 

声明和异常块是可选的,上述语法中的解释如下:

  •  declaration_statements   包含在声明块中,它负责声明该块其他部分将会使用的变量。这个变量对这个块来说是局部变量,也就是说不能从块的外部来访问这些变量。声明块总是放在块的开始位置。
  • executable_statements    是块中实际可执行的语句。
  • exception_handing_statements 中的语句负责处理可执行语句中可能发生的任何错误。

每一条语句都有分号结尾,整个块由关键字END标志结束。先看一个简单的例子:

 

Sql代码 复制代码
  1. -- Created on 2010-5-20 by ADMINISTRATOR    
  2. declare    
  3.   -- Local variables here   
  4.     width INTEGER;   
  5.     height INTEGER:=2;   
  6.     area INTEGER;   
  7.   i integer;   
  8. begin  
  9.   -- Test statements here   
  10.   area:=6;   
  11.     width:=area/height;   
  12.     DBMS_OUTPUT.put_line('width='||width);   
  13.     EXCEPTION   
  14.          WHEN ZERO_DIVIDE THEN  
  15.      DBMS_OUTPUT.put_line('Division by zero');   
  16. end;  
-- Created on 2010-5-20 by ADMINISTRATOR 
declare 
  -- Local variables here
	width INTEGER;
	height INTEGER:=2;
	area INTEGER;
  i integer;
begin
  -- Test statements here
  area:=6;
	width:=area/height;
	DBMS_OUTPUT.put_line('width='||width);
	EXCEPTION
		 WHEN ZERO_DIVIDE THEN
     DBMS_OUTPUT.put_line('Division by zero');
end;

 

   变量和类型

   变量声明中包含名称和类型,还可以通过%TYPE关键字定义变量类型,这个关键字告诉PL/SQL使用与表中指定列相同的类型。下面这个例子用%TYPE声明了一个变量,这个变量类型与product表中price列类型相同。

  

Sql代码 复制代码
  1. product_price  product.price%TYPE  
product_price  product.price%TYPE

 

  条件逻辑

  在PL/SQL中,IF、THEN、ELSE、ELSIF和ENDIF等关键字用于执行条件逻辑。下面的语法说明了条件逻辑的用法:

  

Sql代码 复制代码
  1. IF condition1 THEN  
  2.  statement1   
  3. ELSIF condition2 THEN  
  4.  statement2   
  5. ELSE  
  6.  statement3   
  7. END IF;  
IF condition1 THEN
 statement1
ELSIF condition2 THEN
 statement2
ELSE
 statement3
END IF;

 

   循环

   PL/SQL中包含三种循环:

   简单循环:直到显式结束循环前一直运行。

   WHILE循环:直到某个特定条件出现之前一直运行。

   FOR循环:运行预先确定的次数。

  

   简单循环

  

Sql代码 复制代码
  1. LOOP   
  2.   
  3.  statements   
  4.   
  5.  END LOOP;  
  LOOP

   statements

   END LOOP;

 

  要结束简单循环,可以使用EXIT或者EXIT WHEN语句。EXIT语句立即结束循环,EXIT WHEN语句在指定条件出现时结束循环。  举个简单例子:

Sql代码 复制代码
  1. LOOP   
  2.       counter:=counter+1;   
  3.       EXIT WHEN counter=5;   
  4. END LOOP;  
LOOP
      counter:=counter+1;
      EXIT WHEN counter=5;
END LOOP;

 

   WHILE循环

  

     WHILE循环在某个特定条件出现之前一直运行。

     举个例子:

    

Sql代码 复制代码
  1. counter=0;   
  2. WHILE counter<6 LOOP   
  3.       counter:=counter+1;   
  4. END LOOP;  
counter=0;
WHILE counter<6 LOOP
      counter:=counter+1;
END LOOP;

 

 

   FOR循环

   FOR循环会运行预先确定的次数,可通过给循环变量指定上限和下限来确定循环运行的次数,然后,循环变量在每次循环中递增或递减。语法如下:

   

  

Sql代码 复制代码
  1. FOR loop_variable IN [REVERSE] lower_bound ..upper_bound LOOP   
  2.     statements   
  3. END LOOP;  
FOR loop_variable IN [REVERSE] lower_bound ..upper_bound LOOP
    statements
END LOOP;

    如果使用了REVERSE则loop_variable每次减少1。

   

    游标

    当SELECT语句从数据库中返回的记录多余一条时,就可以使用游标。使用游标需要遵循以下5个步骤:

    (1)声明一些变量,用于保存SELECT语句返回的列值。

    (2)声明游标,并指定SELECT语句。

    (3)打开游标。

    (4)从游标中获取记录。

    (5)关闭游标。

  

Java代码 复制代码
  1. declare   
  2.   v_username amc_base_user.user_name%TYPE;   
  3.   CURSOR v_user_cursor IS   
  4.     SELECT user_name FROM amc_base_user;   
  5. begin   
  6.   OPEN v_user_cursor;   
  7.   LOOP   
  8.     FETCH v_user_cursor   
  9.       INTO v_username;   
  10.     EXIT WHEN v_user_cursor%NOTFOUND;   
  11.     DBMS_OUTPUT.put_line(v_username);   
  12.   END LOOP;   
  13.   CLOSE v_user_cursor;   
  14. end;  
declare
  v_username amc_base_user.user_name%TYPE;
  CURSOR v_user_cursor IS
    SELECT user_name FROM amc_base_user;
begin
  OPEN v_user_cursor;
  LOOP
    FETCH v_user_cursor
      INTO v_username;
    EXIT WHEN v_user_cursor%NOTFOUND;
    DBMS_OUTPUT.put_line(v_username);
  END LOOP;
  CLOSE v_user_cursor;
end;

 

注意:

     1 声明完游标后此时游标并未打开,只有OPEN的时候才打开。

     2 为了确定循环是否结束,可以使用布尔变量%NOTFOUND。当FETCH语句到达游标的最后一条记录时,这个变量为真。

     3 游标使用完之后要及时关闭掉。

 

利用FOR循环的功能,可以增强在游标中访问记录的能力。当使用FOR循环时,可以不显式地打开和关闭游标----FOR循环会自动执行这些操作。

 

Sql代码 复制代码
  1. declare  
  2.   v_username amc_base_user.user_name%TYPE;   
  3.   CURSOR v_user_cursor IS  
  4.     SELECT user_name FROM amc_base_user;   
  5. begin  
  6.       FOR v_u IN v_user_cursor LOOP   
  7.     DBMS_OUTPUT.put_line(v_u.user_name);   
  8.   END LOOP;   
  9. end;  
declare
  v_username amc_base_user.user_name%TYPE;
  CURSOR v_user_cursor IS
    SELECT user_name FROM amc_base_user;
begin
	  FOR v_u IN v_user_cursor LOOP
    DBMS_OUTPUT.put_line(v_u.user_name);
  END LOOP;
end;
分享到:
评论

相关推荐

    PL/SQL编程基础知识

    ### PL/SQL编程基础知识 #### 一、PL/SQL简介 PL/SQL(Procedural Language for SQL)是一种过程化语言,它结合了SQL的数据操纵功能和过程化语言的控制结构,使用户能够灵活地控制数据操作流程。作为Oracle数据库...

    PL/SQL编程(电子版)

    【PL/SQL编程】是Oracle数据库中用于数据库管理和应用程序开发的一种高级过程语言,它结合了SQL查询语言的威力和高级编程语言的灵活性。本章详细介绍了PL/SQL的基础知识,帮助初学者快速掌握该语言。 **4.1 PL/SQL...

    第16章Pl/sql编程基础

    pl/sql编程基础教程,内容丰富,适合初学者学习。

    oracle pl/sql 实例精解(中文原书第4版)

    本书是一本逐步分解的,详尽的pl/sql编程教程,使用真实场景的试验、范例和练习来介绍读者所需的pl/sql编程技能,涵盖oracle 11g的最新特性。作者的写作手法源自于在哥伦比亚大学教授pl/sql编程技术的经验,深度...

    PL/SQL基础编程,实例自写

    ### PL/SQL基础编程知识点详解 #### 一、PL/SQL概述 PL/SQL,全称为Procedural Language for SQL,是Oracle数据库特有的高级程序设计语言。它结合了SQL的数据处理能力和传统编程语言的控制结构,使开发者能够在...

    pl/sql最新中文手册

    这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册可能涵盖的一些核心知识点: 1. **PL/SQL基础**:手册可能会从基础开始,介绍PL/SQL的基本...

    oracle10g_pl/sql

    Oracle 10g PL/SQL 是Oracle数据库系统中用于创建和管理存储过程、函数、触发器等数据库对象的编程语言。本教程旨在为初学者提供一个全面的学习平台,同时也为经验丰富的开发者提供参考资料。PL/SQL是Oracle特有的...

    一个对数据库的操作工具PL/SQLpl/sqL工具

    1. **编程能力**:PL/SQL允许编写包含控制结构(如循环、条件语句)和异常处理的程序块,这些块可以存储在数据库中并按需调用,提高了数据库应用的灵活性和复杂性。 2. **数据处理**:通过PL/SQL,用户可以直接对...

    PL/SQL编程教程

    PL/SQL编程教程电子书,全册,完整版。。。。

    Oracle PL/SQL编程及最佳实践

    Oracle PL/SQL 编程及最佳实践 Oracle PL/SQL 是一种高级编程语言,用于开发 Oracle 数据库中的存储过程、函数和触发器。PL/SQL language 提供了强大的编程能力,可以实现复杂的业务逻辑,并且与 Oracle 数据库紧密...

    Oracle资料学习PL/SQL必备

    "Oracle资料学习PL/SQL必备"这个主题涵盖了对Oracle数据库系统以及PL/SQL编程语言的学习资源,特别是针对那些希望深入理解并掌握PL/SQL的初学者或专业人士。PL/SQL的基础部分是了解和使用Oracle数据库的关键,它包括...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    Oracle PL/SQL是一种强大的编程语言,它将数据库管理和应用程序逻辑紧密结合起来,是Oracle数据库系统中的核心组件之一。这本书“Oracle PL/SQL实例编程”显然旨在深入讲解如何利用PL/SQL进行实际开发工作,通过实例...

    oracle实验三PL/SQL编程

    Oracle PL/SQL编程是Oracle数据库管理系统中的重要组成部分,它是一种过程化语言,允许开发者编写复杂的数据库应用程序。在本次实验中,我们将重点学习PL/SQL的基本语法、控制结构、复合数据类型以及异常处理技术。 ...

    pl/sql编程简介

    pl/sal编程简介,介绍了pl/sql编程所用的基本语法,循环,条件,异常处理,自定义异常等等

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...

    pl/sql developer11.0

    PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库系统中用于数据库编程的一种扩展SQL语言。它结合了SQL的查询能力与过程化编程元素,使得开发者能够创建复杂的业务逻辑和数据库应用程序。PL/...

    oracle pl/sql编程

    ### Oracle PL/SQL编程知识点详解 #### 一、SQL与PL/SQL概述 - **SQL简介**:SQL(Structured Query Language)即结构化查询语言,是数据库管理领域中最广泛使用的标准化语言之一。由IBM最初提出并发展起来,后被...

    ORACLE PL/SQL从入门到精通

    循环语句是PL/SQL编程中用来重复执行一组语句的结构,包括loop、while、for三种形式,它们各自有不同的使用场景和语法。 分支条件语句在PL/SQL中用来根据不同的条件执行不同的代码分支,主要包括CASE表达式和if-...

    精通pl/sql

    《精通PL/SQL》这本书是针对Oracle数据库系统中PL/SQL编程语言的深度解析与实践指南,主要面向希望提升在Oracle环境下使用PL/SQL技能的专业人士。PL/SQL,全称为Procedural Language/Structured Query Language,是...

    精通oracle10g PL/SQL编程

    本书《精通Oracle10g PL/SQL编程》为读者提供了一个系统性的学习路径,从基础知识到高级应用,从具体技巧到最佳实践,涵盖了PL/SQL编程的方方面面。通过本书的学习,读者将能够有效地提高Oracle数据库编程的效率和...

Global site tag (gtag.js) - Google Analytics