PL/SQL结构学习

PL/SQL结构分为三块:declare、begin、exception。其中begin必不可少。

块一:

declare的作用是申明变量,包括变量的名称及其相关属性和是否定义初始值。

其相关属性包括数据类型,长度。 其初始值定义时可以用:=也可以用default,当用constant对数据类型进行修饰之后,必须赋予初始值。

其次,对于变量的类型也可以定义为记录型:%rowtype ;也可以定义成与某个字段类型相同,如%type。

实例:

1.%type

declare
V_ename emp.ename%type ;
begin
  select ename into V_ename from emp where empno = 7788 ;
  dbms_output.put_line(‘员工姓名为:‘||V_ename) ;
end ;
/

2.%rowtype

declare
V_empRecord emp%rowtype ;
begin
  select * into V_empRecord from emp where empno = 7788 ;
  dbms_output.put_line(‘员工姓名:‘||V_empRecord.ename) ;
  dbms_output.put_line(‘员工职位:‘||V_empRecord.job) ;
  dbms_output.put_line(‘部门编号:‘||V_empRecord.deptno) ;
  dbms_output.put_line(‘薪水:‘||V_empRecord.sal) ;
  end ;
  /

块二:

begin的作用是程序控制,它的内容包含SQL语句和逻辑语句。如,条件分支结构,循环结构。

条件分支结构:

结构,

1)if 条件 then

    statement1 ;

  end if ;

2)if 条件 then

    statement1 ;

  else

    statement2 ;

  end if ;

3)if 条件 then

    statement1 ;

  elsif

    statement2 ;

  else

    statement3 ;

  end if ;

实例:

1. 
declare
V_empno emp.empno%type:=7788 ;
V_sal emp.sal%type ;
begin
 select sal into V_sal from emp where V_empno = empno ;
 if V_sal < 1500 then
 update emp set sal = sal + 100 where empno = V_empno ;
 end if ;
 end ;
  /

循环结构:

结构,

1)基本循环,

LOOP

  语句序列

  EXIT WHEN 布尔型表达式(为真) ;

END LOOP ;

实例:

1.
--向部门表中插入10条数据,部门编号从41到50
declare
    V_counter binary_integer:=41 ; --pl/sql整型数据类型 binary_integer                            
    begin
      LOOP
      insert into dept(deptno,dname) values(V_counter,‘loop‘) ;--语句序列
      V_counter:=V_counter + 1 ;
      EXIT WHEN V_counter > 50 ;--布尔表达式(为真)
      END LOOP ;
      commit ;
      end ;
      /

2)WHILE_LOOP循环,

WHILE 条件 LOOP

  语句序列

END LOOP ;

实例:

1.
--向部门表中插入10条数据,部门编号从51到60
declare
V_counter binary_integer:=51 ;
begin
  WHILE V_counter <= 60 LOOP  --条件
  insert into dept(deptno,dname) values (V_counter,‘while loop‘) ; --语句序列
  V_counter := V_counter + 1 ;
END LOOP ;
commit ;
end;
/

3)数值for_LOOP循环,

FOR 计数器 IN 低界...高界 LOOP

  语句序列

END LOOP ;

实例:

--向部门表中插入5条数据,部门编号从61到65
declare
  V_counter binary_integer ;
begin
  FOR V_counter IN 61..65  LOOP  --FOR 计数器 IN [REVERES]低界..高界  LOOP
  insert into dept(deptno,dname) values (V_counter,‘for loop‘) ;--语句序列
END LOOP ;
commit ;
end ;
/

块三:异常处理exception

结构,

exception

  WHEN first_exception THEN <code to handle first exception>

  WHEN second_exception THEN <code to handle second exception>

  WHEN others THEN <code to handle others exception>

实例:

--EXCEPTION 实例
declare
V_job emp.job%type := ‘ANALYST‘ ;
V_sal emp.sal%type ;
begin
  select sal into V_sal from emp where job = V_job ;
  if V_sal <= 1500 then  --condition
 update emp set sal = sal + 100 WHERE job = V_job ;  --statement1
  end if ;
exception
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.put_line(‘数据库中没有编码为‘||V_job||‘的员工‘) ;
  WHEN TOO_MANY_ROWS THEN
    DBMS_OUTPUT.put_line(‘程序运行错误!请使用游标‘) ; 
  WHEN OTHERS THEN
    DBMS_OUTPUT.put_line(‘发生其它错误!‘) ;
end ;
/ --由于有多个记录的job是‘ANALYST’,因此在执行程序的过程中无法给未指明的记录进行更新因而报错。如果没有异常处理,程序将无法执行而停止。而异常处理使得程序执行完毕,不影响之后的程序。

时间: 2024-10-24 16:16:02

PL/SQL结构学习的相关文章

oracle pl/sql 实战学习 -避免误用

这几天看了下 oracle pl/sql 实战 这本书,出于对sql语句性能的研究,先研究下游标对代码的影响. 1.逐行处理 程序声明了一个游标c1,然后用游标for循环隐式地打开了这个游标,对从游标c1取出的每一行,程序查询customers表,并把first_name和last_name的值填充到变量,随后插入一行数据到top_sales_customers表. 问题1: 代码清单1-1的编程方法很有问题.即使在循环中调用的SQL语句是高度优化的,程序的执行还是会消耗大量时间.假设查询cus

PL/SQL结构

无名块:未命名的程序块 命名块:指过程,函数,包和触发器 定义部分:用于定义变量,常量,游标,触发器,复合数据类型 执行部分:用于实现应用模块功能,包含了要执行的PL/SQL语句和SQL语句 异常处理部分:用于处理执行部分可能出现的运行错误 [DECLARE ...  --定义部分] BEGIN ...  --执行部分 [EXCEPTION ...  --异常处理部分] END; ------------------------------------- DECLARE a NUMBER; BE

Oracle PL\SQL 基础学习三

一. PL/SQL 与 SQL的交互 1. 使用select语句.into是必须的, 查询只能返回一条或0条数据 declare       v_fname employees.first_name%TYPE;  --更正规的写法       --v_fname varchar2(25);    begin       select first_name into v_fname       from employees where employee_id=200;       DBMS_OUT

PL/SQL个人学习笔记(二)

IF条件 declare cursor s is select version from city_server t; s_ city_server.version%type; begin open s; fetch s into s_; if s_>2 then DBMS_OUTPUT.put_line(s_); end if; close s; end; LOOP循环 declare cursor s is select version from city_server t; s_ city

PL/SQL个人学习笔记

资料1 -- Created on 2014/8/20 declare -- Local variables here i integer; begin i := 12; -- Test statements here DBMS_OUTPUT.put_line(i); end; 资料2 declare cursor s is select * from city_app.city_server; s_ s%rowtype; begin open s; fetch s into s_; DBMS_

PL/SQL语句学习之使用while、loop和for三种循环打印数字的1-10

--使用while循环打印数字的1-10 --set serveroutput on declare --定义循环变量赋初值为1 pnum number := 1; begin while pnum<=10 loop --循环体 dbms_output.put_line(pnum); --使得该变量+1 --pnum++;是错误的写法,oracle不支持这种写法 pnum := pnum+1; end loop; end; --/ --使用loop循环输出1-10 --注意loop循环和whil

【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人品牌. 本是成书的,但后来做其他事了,就无偿的贡献出来,被读者夸其目前为止最“实在.经典”的写ORACLE PL/SQL编程的文章-! 觉得对你有帮助,请留言与猛点推荐,谢谢. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) 本篇主要内容如下:第一章 PL/S

ORACLE PL/SQL编程详解

ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问.由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理.除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点.本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的

[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)                [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]