`

Oracle 学习笔记 15 PL/SQL基本语法、流程控制

阅读更多

文章来源:http://www.itnose.net/detail/6030407.html
更多文章:http://www.itnose.net/type/97.html

PL/SQL简介

       PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库

SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在

PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言 -- 百度百科。

       PL/SQL是Oracle系统的核心语言,现在Oracle的许多部件都是由PL/SQL写成。可以使用的SQL语句有:

   INSERT ,UPDATE ,DELETE ,SELECT ...INTO ... ,COMMIT , ROLLBACK ,SAVEPOINT 。

块结构

      构成PL/SQL 程序的基本单元是语句块,所有的PL/SQL程序都是由语句块构成的。由三部分组成,即声明部分,

执行部分,异常处理部分。

具体结构如下:

DECLARE

-- 声明部分,声明函数用到的,常量,变量,类型,游标,异常处理的名称等。

BEGIN           

-- 执行部分,程序的执行程序

EXCEPTION 

--异常部分,对出现的异常进行处理 

END ;

PL/SQL块可以分为三类:

1. 无名块:动态构造,只能执行一次。

2.子程序:在数据库中建立好之后,可以再其他的程序中调用他们。

3.触发器:当数据库发生操作时,会触发一些时间,自动的执行某些程序。

标示符 

1.字符长度不能超过30.

2.必须用字母开头。

3.由字母A-Z ,a-z ,0-9 ,下划线(_) , 美元符号($),井号(#)组成。

4.不能使用sql保留字和关键字。

注释

单行注释:放置在一行上的注释文本,使用符号“--” 开头,一直到该行的末尾都被注释掉。

多行注释:以符号“/*” 开始 ,以符号“*/” 结束,在这两个符号中间的语句,都被注释掉。

例:编程语言的学习,都是从helloworld开始,下面开始书写第一个pl/sql程序

SQL> set serveroutput on ;

BEGIN           
dbms_output.put_line('hello world ');
END ;

hello world 
PL/SQL procedure successfully completed

观察发现省略了 declare 和exception这两个部分,这是可以的,当没有变量声明的时候可省略declare

部分,没有异常捕获也可以省略exception部分。dbms_output.put_line()的作用和JAVA中的

system.out.println()类似,需要说明的是在执行pl/sql语句之前压先运行set serveroutput on ;

语句,负责是看不到执行结果的。

例:使用select...into ...查询emp表中员工号为7934的工资,姓名

declare
  v_sal number(20);
  v_ename varchar2(20);
BEGIN           
  select sal , ename into v_sal , v_ename from emp where empno = 7934 ; 
  dbms_output.put_line(v_ename || ',' || v_sal);
END ;

 MILLER,1300

上面定义了两个变量,v_sal 和 v_ename,分别定义了变量的类型。定义变量类型还有一种方式,就是使

用“%type”,即:v_sal  emp.sal%type ; v_ename emp.ename%type ; 语句的意思是,与表emp中列sal的数据类

型相同。借助已经定义的某个数据变量或者是数据库表中列的数据类型,来定义变量的类型。

变量类型

char:定长字符串。

varchar2:可变字符串。

number:可以存储浮点值或整数值。

date : 日期型。

boolean:布尔型。

记录类型

记录类型是把逻辑相关的数据作为一个单元存储起来。作用是存储互补相同但逻辑相关的信息。有点类似JAVA

中类的概念。

declare
  type emp_record is record(
  v_sal emp.sal%type ,
  v_ename emp.ename%type 
  );
  e_r emp_record ; --声明一个记录类型的变量
BEGIN           
  select sal , ename into e_r from emp where empno = 7934 ;
  dbms_output.put_line(e_r.v_sal || ',' || e_r.v_ename);
END ;

记录类型中变量的使用使用"."调用。如:上面中要使用v_sal变量,e_r.v_sal 。

例:定义一个与emp表中所有的列都相同的记录类型

declare
  emp_record emp%rowtype;
BEGIN           
  select * into emp_record from emp where empno = 7934 ;
  dbms_output.put_line('工资'||emp_record.sal || ',' ||'姓名'|| emp_record.ename);
END ;

工资1300,姓名MILLER
PL/SQL procedure successfully completed

记录类型中的变量要和表中所有的列相对应,虽然一行行的定义也是可以的,但是还是比较麻烦的,可以使

用%rowtype 实现上面的要求,但是如果调用相应列的值得时候,则需要使用表表中真实的列名。

运算符 

特别说明一下  := 的作用是赋值。 v_sal int := 2000 ; 定义v_sal变量并赋值。

流程控制

条件语句

① if 布尔表达式 then 

     pl/sql 和sql语句;

   end if ;

② if 布尔表达式 then 

    pl/sql 和sql语句;

  else

    其它语句;

  end if ;

③ if 布尔表达式 then 

 

     pl/sql 和sql语句;

  elsif布尔表达式 then 

     其它语句;

   elsif 布尔表达式  then 

     其它语句;

   else

     其它语句;

   end if ;

case表达式 

case 表达式 

when 值1 then 语句1; when 值2 then 语句2 ; ... else

   statment_else ;

   end case ;

循环结构 

循环结构有3种形式,分别为LOOP循坏,WHILE循环和FOR循坏。

LOOP循坏

LOOP

执行语句;

EXIT WHEN 条件语句 ;

END LOOP ;

使用LOOP循坏至少要执行一次循环语句。

例:使用LOOP循坏,求出1-10 的值。

declare
  v_i int := 1 ;
  v_sum int := 0 ;
BEGIN           
  Loop 
        v_sum := v_sum + v_i ;
        exit when v_i = 10 ;
        v_i := v_i + 1 ; 
  end loop ;
  dbms_output.put_line(v_sum);
END ;

WHILE 循坏 

先判断循坏的条件,只有满足循环条件的才能进入循坏体进行循坏操作。

while  布尔表达式  loop 

执行的语句(循坏体);

end loop ;

使用while循环时,要执行的语句可能一次也不执行,这是与Loop循环的区别。

例:使用while循坏,求1-10相加的和。

declare
  v_i int := 1 ;
  v_sum int := 0 ;
BEGIN           
  while v_i <= 10 loop
        v_sum := v_sum + v_i ;
        v_i := v_i + 1 ;
  end loop ;
  dbms_output.put_line(v_sum);
END ;

FOR循环 

for 循环变量 in[reverse] 下限...上限 loop

要执行的语句(循坏体);

end loop;

每循环一次,循环变量自动加1 ,使用reverse关键字,循环变量自动减1 ,

例:使用for-in-loop循环,求1-10的阶乘。 

declare
  v_i int := 1 ;
  v_sum int := 1 ;
BEGIN           
  for v_i in 1..10 loop
      v_sum := v_sum*v_i ;
  end loop ;
  dbms_output.put_line(v_sum);
END ;

执行过程为,首先v_i判断是否在1..10的范围内,如果在执行循环体,end loop ,之后v_i自增1,在进行范围判

断,执行循环体,知道v_i不在范围内,循环终止。

GOTO语句

goto语句表示无条件跳转到指定的标号。goto lebel_name  ;<<label>> .../*标号要使用<<>> 括起来*/

declare
  v_i int := 1 ;
  v_sum int := 1 ;
BEGIN           
  for v_i in 1..10 loop
      v_sum := v_sum*v_i ;
      if v_i = 8 then
         goto at1 ;
      end if ;
  end loop ;
  <<at1>>
  dbms_output.put_line('at');
  dbms_output.put_line(v_sum);
END ;

当v_i=8时,会跳转到<<at1>>的位置,并结束循环。

NULL语句

null语句被称为空语句,它表示不执行任何操作。

 

分享到:
评论

相关推荐

    oracle笔记pl/sql流程控制

    oracle笔记pl/sql流程控制,有具体的代码案例,流程控制的知识点笔记!

    Oracle PL/SQL语言初级教程

    PL/SQL是Oracle对标准数据库语言的扩展,Oracle公司已经将PL/SQL整合到Oracle 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本教程将以循速渐进的方式讲述PL/SQL基础语法,结构和组件、以及...

    oracle10g_pl/sql

    oracle10g pl/sql完备教程,供初学者学习与开发者参考

    oracle 9i pl/sql程序设计笔记

    oracle 9i pl/sql程序设计笔记。

    Oracle PL/SQL程序设计(第5版)(套装上下册)

    《Oracle PL/SQL程序设计(第5版)(套装上下册)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何...

    oracle数据库 sql 和pl/sql实例教程

    oracle数据库 sql 和pl/sql实例教程

    Oracle数据库SQL和PL/SQL实例教程

    Oracle数据库SQL和PL/SQL实例教程 西安电子科技大学出版社

    Oracle 12c PL/SQL程序设计终极指南

    PL/SQL本身涉及的知识点浩瀚、庞杂,初学者根本无法依靠自身能力理清头绪,学习成本极高.本书对知识点进行了体系化的梳理,化繁杂为有序,突出重点,直指核心,循序渐进,尽可能为学习者提供“捷径”,仅仅只是这...

    精通Oracle 10g SQL和PL/SQL

     本书是专门为oracle开发人员而提供的编程指南 通过学习本书 读者不仅可以掌握编写sql语句和pl/sql块的基础知识 而且还可以掌握sql高级特征 正则表达式 flashback查询 merge语句 sql:1999连接 和pl/sql高级特征 ...

    Oracle Database 12c PL/SQL开发指南 实例源代码

    Oracle Database 12c PL/SQL开发指南(第7版)书中示例的PL/SQL源代码

    oracle PL/SQL pdf学习资料

    oracle PL/SQL pdf学习资料oracle PL/SQL pdf学习资料oracle PL/SQL pdf学习资料oracle PL/SQL pdf学习资料oracle PL/SQL pdf学习资料

    Oracle PL/SQL programming

    Considered the best Oracle PL/SQL programming guide by the Oracle community, this definitive guide is precisely what you need to make the most of Oracle’s powerful procedural language. The sixth ...

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

    Oracle PL/SQL实例编程 Oracle PL/SQL实例编程 Oracle PL/SQL实例编程

    oracle笔记pl_sql基本语法记录类型01

    oracle笔记pl_sql基本语法记录类型01,有具体的代码案例!

    Oracle Database 11g PL/SQL编程实战part1

    《oracle database 11gpl/sql编程实战》通过动手练习、大量的示例以及实际的项目帮助读者掌握pl/sql。书中包含大量最佳实践,涵盖了pl/sql语言所有的最新功能和改进之处。每章末尾配有测验题,可以帮助读者进一步...

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何有效地使用它。...

    Oracle PL/SQL programming(5th Edition)

    Topics covered: How to use Oracle PL/SQL in all its manifestations through Oracle9i. Fundamentals of program structure (loops, cases, exceptions, etc.) and execution get attention, as do data types, ...

    Oracle PL SQL程序设计 上 第五版(代码示例)

    《oracle pl/sql程序设计(第5版)》基于oracle数据库11g,从pl/sql编程、pl/sql程序结构、pl/sql程序数据、pl/sql中的sql、pl/sql应用构建、高级pl/sql主题6个方面详细系统地讨论了pl/sql以及如何有效地使用它。...

    PL/SQL User's Guide and Reference (官方CHM)

    PL/SQL, Oracle's procedural extension of SQL, is an advanced fourth-generation programming language (4GL). It offers modern features such as data encapsulation, overloading, collection types, ...

Global site tag (gtag.js) - Google Analytics