`
toreking
  • 浏览: 36678 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Oracle PL/SQL

 
阅读更多

( )PL/SQL

    PL/SQL 是过程语言 (Procedural Language) 与结构化查询语言 (SQL) 结合而成的编程语言

    PL/SQL 分为三个部分,声明部分、可执行部分和异常处理部分

    [DECLARE

    declarations]

    BEGIN

        executable statements

    [EXCEPTION

    handlers]

END;

  • 常用命令

 

set serviceout on/off;-- 显示设置

set auto on/off;-- 提交自动设置

 

1. 变量和常量

    在声明部分声明,使用前必须先声明;

    声明时必须指定类型;

       给变量赋值有两种方式: [:=] [select into]

       定义常量: [ 常量变量名 ] CONSTANT [ 数据类型 ] := []

      

       1.1 数字数据类型

           常用的 NUMBER decimal float/integer/real

       1.2 字符数据类型

           char(<2000)/varchar2(<4000)/long(<2G)/raw(<2000)/long raw(<2G)

       1.3 用于存储大文本、图像、视频等非结构化数据

           LOB <4G

       1.4 属性类型

  •    %TYPE 表示引用或数据库列的数据类型

 

  •    record 定义记录类型变量,将多个基本数据类型捆绑在一起

 

              SQL> declare

              2      type rectype is record (

              3          dnnm scott.dept.dname%type ,

              4          locc scott.dept.loc%type

              5      );

              6      rec rectype;

              7  begin

              8       select dname,loc into rec from dept where deptno = &no;

              9      dbms_output.put_line(rec.dnnm);

             10      dbms_output.put_line(rec.locc);

             11  end;

             12  /

 

you

  •    %ROWTYPE 表示表中一行的记录类型

 

SQL> declare

  2      arow emp%rowtype;

  3  begin

  4       select * into arow from emp where emp.empno = &no;

  5      dbms_output.put_line(arow.empno||arow.ename);

  6  end;

   7  /

        1.5 定义表类型变量

           表类型变量和数据表是有区别的,这里的表类型类似数组,定义表类型变量的语句如下:

           ---------------------------------------------------------

           type [myTableType] is table of [varchar2(4)] index by binary_integer;

           mytable myTableType;

           ---------------------------------------------------------

            1.5.1 一维表

           SQL> declare

             2      type tabletype is table of varchar2(8) index by binary_integer ;

             3 

             4      table1 tabletype;

             5  begin

             6       table1(1):=' 成都 ';

             7       table1(2):=' 长沙 ';

             8       table1(3):=' 武汉 ';

             9       table1(4):=' 西安 ';

            10       table1(5):=' 北京 ';

            11       dbms_output.put_line(table1.count);

            12       dbms_output.put_line(table1.first);

            13       dbms_output.put_line(table1.last);

            14       dbms_output.put_line(table1.prior(2));

            15       dbms_output.put_line(table1.next(2));

            16  end;

            17   /

           * 可以对表使用 count,first,last,prior,next ,如上。都会返回数字。

             

           1.5.2 多维表

declare
       type tabletype is table of dept%rowtype index by binary_integer ;
   
       table1 tabletype;
      num number := 1;
begin
     while num > 0 loop
         num := &n;
         select * into table1(num) from dept where dept.deptno = num;
         dbms_output.put_line(table1(num).deptno||table1(num).dname);
     end loop ;
end ;

 

 

2. 控制结构

    2.1 条件控制

       if 语句根据条件执行一系列语句,有三种形式: if-then if-then-else if-then-elseif

      

       SQL> declare

         2     sall number;

         3  begin

         4     select nvl(sal,0)+nvl(comm,0) into sall from emp where empno = &no;

         5     if sall < 1000 then

         6         dbms_output.put_line(' 那么低的工资,饿死你 ');

         7     end if;

         8     if sall >= 1000 and sall < 1500 then

         9         dbms_output.put_line(' 温饱,继续努力 ');

        10     end if;

        11     if sall >= 1500 then

        12         dbms_output.put_line(' 有钱人儿 ');

        13     end if;

        14  end;

        15  /

 

温饱,继续努力

      

    2.2 循环控制

       PL/SQL 4 中循环结构

       2.2.1 while..loop..end loop

           SQL> declare

             2     i integer := 0;

             3    begin

             4       while i < 5 loop -- 循环条件

             5         insert into dept(deptno,dname) values (i,'you');

             6         i:=i+1;

             7       end loop;        -- 结束循环

             8  end;

             9  /

      

2.2.2 loop..exit..end loop

    SQL> declare

      2      i integer:=21;

      3  begin

      4      loop

      5         insert into dept(deptno,dname) values(i,'java');

      6         i:=i-2;

      7         if i < 15 then

      8            exit;

      9         end if;

10       end loop;

     11  end;

     12  /

2.2.3 loop..exit when..end loop

           SQL> declare

             2      i integer:=9;

             3  begin

             4      loop

             5          insert into dept(deptno,dname) values(i,'ermao');

             6          dbms_output.put_line(i);

             7          i:=i-1;

             8          exit when i=5;

             9      end loop;

            10  end;

            11  /

       2.2.4 for..in..loop..end

           SQL> declare

             2      i integer:=1;

             3  begin

             4      for i in 1..9 loop – 包括 1 9

             5      insert into dept(deptno,dname) values(i,'ermao');

             6      end loop;

             7  end;

             8  /

 

3. 游标

    游标式从数据表中提取出来的数据以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向首记录,利用 fetch 语句可以移动指针,从而对游标中的数据进行各种操作,然后将结果写回到数据表中。

  •    游标的分类:隐式游标、显示游标, REF 游标

 

  •    游标的属性有:

 

           –        %FOUND – SQL 语句影响了一行或多行时为 TRUE

           –        %NOTFOUND – SQL 语句没有影响任何行时为 TRUE

           –        %ROWCOUNT – SQL 语句影响的行数

           –        %ISOPEN  - 游标是否打开,始终为 FALSE

 

    3.1 隐式游标

1) PL/SQL 中使用 DML 语句时自动创建隐式游标

2) 隐式游标自动声明、打开和关闭,其名为 SQL

3) 通过检查隐式游标的属性可以获得最近执行的 DML 语句的信息

 

只有在 DML 语句影响一行,或多行时,才返回 True

 

SQL> set serveroutput on;

SQL> declare

  2 

  3  begin

  4      delete from dept where deptno = 2;

  5      if sql%found then

  6          dbms_output.put_line(' 成功删除 ');

  7      else if sql%notfound then

  8         dbms_output.put_line(' 查无此条 ');

  9      else

  10         dbms_output.put_line(' 异常 ');

  11      end if;

  12      end if;

  13  end;

  14  /

 

成功删除

    3.2 显式游标

显式游标在 PL/SQL 块的声明部分定义查询,该查询可以返回多行

  •    操作过程:打开游标—— > 提取行—— > 给变量—— > 关闭游标

 

  •    定义方法: cousor [ 游标名 ] is select 语句 ; ==>cousor 是定义游标的关键词

 

  •    打开游标 open [ 游标名 ]

 

  •    提取游标中的数据: fetch [ 游标名 ] into [ 变量名 1, 变量名 2,... 记录型变量名 record]

 

  •    关闭游标: close [ 游标名 ]

 

SQL> declare

  2      cursor cur_getdname

  3      is select dept.dname from dept;

  4 

  5      deptname scott.dept.dname%type;

  6  begin

  7      open cur_getdname;

  8      loop

  9          fetch cur_getdname into deptname;

10          if cur_getdname%notfound then

11          exit;                                               

12          end if;

13          dbms_output.put_line(deptname);

14      end loop;

15      close cur_getdname;

16  end;

17  /

 

过程(procedure)

1.过程的语法结构:

create or replace procedure [过程名] as

        ...声明语句段;

begin

        ...执行语句段;

exception

        ... 异常处理;

end;

例如:

 

create procedure pro_sel
    as
        cursor cur_sel is select * from emp;
        arow scott.emp%rowtype;
begin
    open cur_sel;
    loop 
        fetch cur_sel into arow;
        exit when cur_sel%notfound ;
        dbms_output.put_line(arow.ename);
    end loop;
    close cur_sel;
end;

 
begin 
   pro_sel;
end;

 

 

分享到:
评论

相关推荐

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

    ### Oracle PL/SQL程序设计(第5版)(上下册)知识点概述 #### 一、PL/SQL编程基础 - **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL...

    Oracle PL/SQL实例精解 数据库建立代码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据库操作能力和PL/SQL的结构化编程特性,使得数据库开发者能够创建复杂的应用程序和数据库逻辑。在"Oracle PL/SQL实例精解 数据库建立代码"中,我们将深入探讨...

    Oracle PL/SQL实战(待续)

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

    oracle pl/sql从入门到精通 配套源代码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作功能与PL/SQL的程序设计特性,广泛应用于Oracle数据库的开发和管理。这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了...

    Oracle PL/SQL 实例精解(第4版涵盖Oracle 11g)+源码脚本

    Oracle PL/SQL是一种强大的编程语言,它将关系数据库的强大功能与结构化编程的优点结合在一起,是Oracle数据库系统中不可或缺的一部分。在"Oracle PL/SQL 实例精解(第4版涵盖Oracle 11g)+源码脚本"中,读者可以深入...

    ORACLE PL/SQL从入门到精通

    ORACLE 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

    Oracle PL/SQL 是Oracle数据库系统中的过程化语言,它结合了SQL查询功能和高级编程特性,使得开发者可以创建复杂的数据库应用程序。在Oracle 11g R2版本中,PL/SQL与SQL Developer一起使用,提供了丰富的开发环境来...

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

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

    Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发

    《Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发》是一本深入探讨Oracle数据库中的PL/SQL编程的专业书籍。PL/SQL是Oracle数据库特有的编程语言,它结合了SQL的查询能力与过程式编程语言的功能,使得数据库...

    Oracle PL/SQL programming(5th Edition)

    ### Oracle PL/SQL Programming知识点概览 #### 一、书籍基本信息 - **书名**:Oracle PL/SQL Programming(第五版) - **作者**:Steven Feuerstein 和 Bill Pribyl - **出版日期**:2009年10月1日 - **出版社**:...

    oracle pl/sql实例精讲student数据库模式数据和表脚本

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据库操作能力和Procedural Language的编程结构,用于在Oracle数据库环境中创建复杂的应用程序。在"Oracle PL/SQL实例精讲student数据库模式"中,我们将深入探讨...

    Oracle PL/SQL学习官方教材

    Oracle PL/SQL是一种强大的编程语言,它将SQL与过程编程语言的特性相结合,为数据库开发提供了丰富的功能。在Oracle数据库环境中,PL/SQL是开发高效、可靠和可维护的数据库应用程序的关键工具。以下是对"Oracle PL/...

    《精通Oracle PL/SQL》源码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作能力和PL(过程化语言)的程序设计特性,是Oracle数据库系统中的核心组件之一。《精通Oracle PL/SQL》这本书深入探讨了这个语言的...

    Oracle PL/SQL by Example(4th Edition)

    《Oracle PL/SQL by Example(4th Edition)》是一本专为Oracle数据库用户设计的PL/SQL编程指南,尤其适合那些希望通过实践学习这一强大的过程式语言的开发者。本书的第四版详细介绍了Oracle PL/SQL的各种核心概念和...

    Oracle PL/SQL best practice

    Oracle PL/SQL最佳实践 Oracle PL/SQL是一种强大的编程语言,用于在Oracle数据库环境中构建复杂的业务逻辑和数据处理任务。Steven Feuerstein,被誉为Oracle PL/SQL语言的大师,分享了他在这一领域的关键最佳实践和...

    Oracle PL/SQL语言初级教程

    Oracle PL/SQL 语言是Oracle数据库系统中的一种高级编程语言,它是SQL的扩展,专为数据库管理和应用程序开发设计。PL/SQL集成了SQL的查询、操纵、定义和控制功能,并添加了过程化编程元素,使其成为数据库管理和开发...

    Oracle PL/SQL编程及最佳实践

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

Global site tag (gtag.js) - Google Analytics