博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle PL/SQL编程基础
阅读量:4877 次
发布时间:2019-06-11

本文共 4518 字,大约阅读时间需要 15 分钟。

1, PL/SQL简介: PL/SQL是ORACLE的过程化语言,包括一整套的数据类型、条件结构、循环结构和异常处理结构,PL/SQL可以执行SQL语句,SQL语句中也可以使用PL/SQL函数。

2,PL/SQL优点和特性:

        a,提高运用程序的运行性能

        b,提供模块化的程序设计功能

        c,允许定义标示符

        d,具有过程语言控制结构

        e,具备良好的兼容性

        f,处理运行错误

3,PL/SQL块:

DECLARE…定义部分-变量,常量,游标,例解BEGIN…执行部分-PL/SQL,SQL语句EXCEPTION--异常处理部分-处理运行错误END;--块结束标志 注意:declare,begin,exception后面没有分号,而end后则必须要有分号
declare    v_name varchar2(20);beginselect ename into v_name from scott.emp where empno=&empno;dbms_output.put_line('员工姓名:'||v_name);exceptionwhen no_data_found then    dbms_output.put_line('请输入正确的员工工号!');end

4,PL/SQL数据类型:

名称

类型

说明

NUMBER

数字型

能存放整数值和实数值,并且可以定义精度和取值范围

BINARY_INTEGER

数字型

可存储带符号整数,为整数计算优化性能

DEC

数字型

NUMBER的子类型,小数

DOUBLE PRECISION

数字型

NUMBER的子类型,高精度实数

INTEGER

数字型

NUMBER的子类型,整数

INT

数字型

NUMBER的子类型,整数

NUMERIC

数字型

NUMBER的子类型,与NUMBER等价

REAL

数字型

NUMBER的子类型,与NUMBER等价

SMALLINT

数字型

NUMBER的子类型,取值范围比INTEGER小

VARCHAR2

字符型

存放可变长字符串,有最大长度

CHAR

字符型

定长字符串

LONG

字符型

变长字符串,最大长度可达32,767

DATE

日期型

以数据库相同的格式存放日期值

BOOLEAN

布尔型

TRUE OR FALSE

ROWID

ROWID

存放数据库的行号

5,标量类型:a,varchar2(20):用于可定长度的字符串,最大长度32767,其值的长度不超过2000字节

      b,char(n):定义固定长度的字符串,如果不指定n的值,n默认为1

      c,number(p,s):定义固定长度的整数和浮点数,其中p用于指定数字的总位数,s用于指定小数点后的数字位数

      d,date:定义日期和时间类型,其数据长度定为7个字节长度

      e,timestamp:定义日期和时间数据,赋值方法和date类型的赋值方法一致,而且还会显示时间,上下午标志和时区

      f,boolean:定义布尔变量,其变量的值为true,false或null

6,PL/SQL控制结构:

      IF语句

1 BEGIN2   IF 1 = 2 THEN3     DBMS_OUTPUT.PUT_LINE('1=2');4   END IF;5 END;

      IF/ELSE语句

1 BEGIN2   IF 1 = 2 THEN3     DBMS_OUTPUT.PUT_LINE('1=2');4   ELSE5     DBMS_OUTPUT.PUT_LINE('1<>2');6   END IF;7 END;

      IF/ELSEIF/ELSE语句

1 BEGIN2   IF 1 > 2 THEN3     DBMS_OUTPUT.PUT_LINE('1 > 2');4   ELSIF 1 < 2 THEN5     DBMS_OUTPUT.PUT_LINE('1 < 2');6   ELSE 7     DBMS_OUTPUT.PUT_LINE('1 = 2');8   END IF;9 END;

      LOOP循环,基础LOOP循环

1 DECLARE2   V_COUNT NUMBER := 0;3 BEGIN4   LOOP5     V_COUNT := V_COUNT + 1;6     DBMS_OUTPUT.PUT_LINE('循环到:' || V_COUNT);7     EXIT WHEN V_COUNT = 10;8   END LOOP;9 END;

      LOOP循环,while__LOOP循环

1 DECLARE2   V_COUNT NUMBER := 0;3 BEGIN4   WHILE V_COUNT < 10 LOOP5     V_COUNT := V_COUNT + 1;6     DBMS_OUTPUT.PUT_LINE('循环到:' || V_COUNT);7   END LOOP;8 END;

      LOOP循环,FOR----LOOP循环

1 BEGIN2   FOR IDX IN 1 .. 10 LOOP3     DBMS_OUTPUT.PUT_LINE('循环到:' || IDX);4   END LOOP;5 END;

7,异常处理:Exception是一种PL/SQL标识符,当运行的PL/SQL块出现错误或警告,则会触发异常处理。为了提高程序的健壮性,可以在PL/SQL块中引入异常处理部分,进行捕捉异常,并根据异常出现的情况进行相应的处理。

一、异常的类型 

    ORACLE异常分为两种类型:系统异常、自定义异常。

    其中系统异常又分为:预定义异常和非预定义异常。

 

    1.预定义异常

        ORACLE定义了他们的错误编号和异常名字,常见的预定义异常处理Oracle常见的错误

   

        NO_DATA_FOUND          SELECT ... INTO ... 时,没有找到数据

        DUL_VAL_ON_INDEX       试图在一个有惟一性约束的列上存储重复值

        CURSOR_ALREADY_OPEN    试图打开一个已经打开的游标

        TOO_MANY_ROWS          SELECT ... INTO ... 时,查询的结果是多值

        ZERO_DIVIDE            零被整除

 

    2.非预定义异常

        ORACLE为它定义了错误编号,但没有定义异常名字。我们使用的时候,先声名一个异常名,

        通过伪过程PRAGMA EXCEPTION_INIT,将异常名与错误号关联起来。

 

    3.自定义异常

        程序员从我们业务角度出发,制定的一些规则和限制。

二、异常处理

    PL/SQL中,异常处理按个步骤进行:

        定义异常

        抛出异常

        捕获及处理异常

 

    a.定义异常

        exception_name EXCEPTION;

 

    b.抛出异常

        RAISE exception_name

 

    c.捕获及处理异常

        EXCEPTION

            WHEN e_name1 [OR e_name2 ... ] THEN

                statements;

            WHEN e_name3 [OR e_name4 ... ] THEN

                statements;

                ......

            WHEN OTHERS THEN

                statements;

        END;

8,游标:

(1).定义

        映射在结果集中某一行数据的具体位置,类似于C语言中的指针。即通过游标方式定位到结果集中某个特定的行,然后根据业务需求

        对该行进行相应特定的操作。

       

   (2).游标的分类

        显示游标:即用户自定义游标,专门用于处理select语句返回的多行数据

        隐式游标:系统自动定义的游标,记录集只有单行数据,用于处理select into 和DML语句

 

    (3).游标使用的一般过程:

        显示游标:声明, 打开, 读取, 关闭

        隐式游标:直接使用读取,声明、打开、关闭都是系统自动进行的

 

    (4).显示游标的过程描述

        a.声明游标

            CURSOR cursor_name IS select_statement

            如:CURSOR emp_cur IS SELECT empno,ename,job,sal FROM scott.emp;

 

        b.打开游标

            OPEN cursor_name     --打开游标则执行对应的select语句,将对应的结果集存放到游标当中

            如:OPEN emp_cur

 

        c.读取数据

            FETCH cursor_name INTO var_name1,...var_name2 ;   --提取单行数据,需要配合循环语句来使用

            FETCH cursor_name BULK COLLECT INTO collect1,collect2,...[LIMIT rows];    --提取多行数据,collect为集合变量

           

        d.关闭游标

            CLOSE cursor_name

 

    (5).显示游标的个属性

        cursor_name%ISOPEN      游标是否打开   

        cursor_name%FOUND       最近的FETCH是否提取到数据

        cursor_name%NOTFOUND       最近的FETCH是否没有提取到数据

        cursor_name%ROWCOUNT       返回到目前为止,已经从游标缓冲区中提取到数据的行数

      (6).游标FOR循环:

    游标FOR循环是为了简化游标使用过程而设计的。使用游标FOR循环检索游标时,游标的打开、数据提取、数据是否检索到的判断与游标

    的关闭都是ORACLE系统自动进行的。

格式一:            先在定义部分定义游标,然后在游标FOR循环中引用该游标                       FOR record_name IN cursor_name LOOP                statement1;                statement2;            END LOOP;         格式二:            在FOR循环中直接引用子查询,隐式定义游标             FOR record_name IN subquery LOOP                statement;            END LOOP;

 

   (7).参数游标

    参数游标是指带有参数的游标。当定义了参数游标后,使用不同的参数值多次打开游标则会生成不同的结果集。

定义参数游标:           CURSOR cursor_name (para_name1 datatype [,para_name2 datatype ...])        IS select_statement;

心得:游标太难懂了

转载于:https://www.cnblogs.com/dclcc/p/3490851.html

你可能感兴趣的文章
关于文字内容溢出用点点点(…)省略号表示
查看>>
(转)人与人
查看>>
字符串搜索
查看>>
support-v4不能查看源码
查看>>
Java学习的随笔(3)接口
查看>>
安卓(android)建立项目时失败,出现Android Manifest.xml file missing几种解决方法?(总结中)...
查看>>
Java数据结构系列之——栈(2):栈的链式存储结构及其操作
查看>>
对团队中“这是某某某的问题”引起的思考
查看>>
ueditor使用注意事项
查看>>
iOS_38_手势
查看>>
java面试题
查看>>
安装php 在阿里云yum源的环境
查看>>
TensorFlow学习笔记之三——适合入门的一些资源
查看>>
Javascript的数组通过ajax传到控制器里面。在。net中接受数组
查看>>
css设置:图片文字等不能被选择
查看>>
NodeJS初探之三——新星的力量
查看>>
Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'
查看>>
原生JavaScript第七篇
查看>>
winform图片标尺控件
查看>>
jQuery中$.ajax()方法中参数详解
查看>>