zoukankan      html  css  js  c++  java
  • 【SQL开发】PLSQL概述

    一 PLSQL概述

    PL/SQL程序的基本单元是块(BLOCK),块就是实现一定功能的逻辑模块。一个PL/SQL程序由一个或多个块组成,也可以嵌套。一个块可以包括三部分,每个部分由一个关键字标识。

    语法结构:
    [declare]
    --声明部分,可选
    begin
    --执行部分,必须
    [exception]
    --异常处理部分,可选
    end

    块各部分的作用解释:
    DECLARE:声明部分标志
    程序的声明部分(本部分可省略)用于定义常量、变量、游标和用户自定义异常除了程序中隐含定义的变量以外,所有在程序中用到的变量均应在该部分定义。
    BEGIN:可执行部分标志
    程序的可执行部分(本部分不可省略)用于实现程序的主要功能,可以书写控制结构,也可以插入SQL语句进行数据库的访问与操作。
    EXCEPTION:异常处理部分标志
    程序的异常部分(包含在可执行部分中)用于书写程序发生错误时的处理动作代码,如果没有对相应的错误进行处理,会显示系统定义错误信息。
    END;:程序结束标志

    二 数据类型与定义常量和变量

    1 基本数据类型

    1)数值类型

    数值类型主要包括number、pls_integer和binary_integer三种基本类型,其中,number类型的变量可存储整数或浮点数,而pls_integer和binary_integer类型的变量只存储整数。

    number类型还可以通过number(p,s)的形式格式化数字,其中p表示精度,s表示刻度范围。精度是指数值中所有有效数字的个数,而刻度表示小数点右边小数位的个数。

    2)字符类型

    字符类型主要包括varchar2、char、long、nchar和nvarchar2,这些类型的变量主要用来存储字符串或字符数据。下面分别介绍:
    • varchar2:变长字符,最大可以是32767字节,数据库类型的最大程度是4000字节;
    • char:定长字符,最大可以是32767字节,数据库类型的最大程度是2000字节;
    • long:变长字符,最大可以是32767字节,数据库类型的最大程度是2G;
    • nchar和nvarchar2:这两种数据类型的长度要根据各国字符集确定,只能具体情况具体分析;

    3)日期类型

    日期类型只有一种,即date类型。

    4)布尔类型

    布尔类型也只有一种,即boolean类型,主要用于程序的流程控制和业务逻辑判断。

    2 特殊数据类型

    为了提高用户的编程效率和解决复杂的业务逻辑需求,PL/SQL语言除了可以使用Oracle规定的基本数据类型外,还提供了3中特殊的数据类型,但这3中类型仍然是建立在基本数据类型基础之上的。

    1)%type类型
    使用%type类型关键字可以声明一个与指定列名称相同的数据类型,通常紧跟在指定列名后面;
    2)record类型
    记录类型,可以存储由多个列值组成的一行数据,在声明记录类型变量之前,首先需要定义记录类型,然后才可以声明记录类型的变量,记录类型是一种结构化的数据类型,使用type语句进行定义。
    3)%rowtype类型
    %rowtype类型结合了以上两种类型的优点,它可以根据数据表中行的结构定义一种特殊的数据类型,用来存储从数据表中检索到的一行数据。

    3 定义变量和常量

    1)定义变量

    变量是指其值在程序运行过程中可以改变的数据存储结构,定义变量必须的元素就是变量名和数据类型,另外还有可选择的初始值,语法格式如下:
    <变量名> <数据类型> [(长度):=<初始值>];

    例如:v_name varchar2(100):='China';

    2)定义常量

    常量是其值在程序运行过程中不可改变的数据存储结构,定义常量必须的元素包括常量名、数据类型、常量值和constant关键字,语法格式如下:
    <常量名> constant <数据类型> :=<常量值>;

    例如:c_name constant varchar2(100):=’China‘;

    三 PL/SQL程序块举例

    1 使用常量、变量和%type
    DECLARE
      C_COURSE VARCHAR2(10) := 'OCP';
      V_ENAME  VARCHAR2(20);
      V_JOB    scott.emp.job%TYPE;
    
    BEGIN
      SELECT T.ENAME, T.JOB
        INTO V_ENAME, V_JOB
        FROM SCOTT.EMP T
       WHERE T.EMPNO = 7369;
       
       DBMS_OUTPUT.PUT_LINE('Cource is '||C_COURSE);
       DBMS_OUTPUT.PUT_LINE('Name of 7369 is '||V_ENAME);
       DBMS_OUTPUT.PUT_LINE('Job of 7369 is '||V_JOB);
    
    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error ! Please check .');
    END;
    2 使用record类型的数据类型
    DECLARE
      TYPE REC_EMP IS RECORD(
        ENAME SCOTT.EMP.ENAME%TYPE,
        JOB   VARCHAR2(9));
    
      V_EMP REC_EMP;
    
    BEGIN
      SELECT T.ENAME, T.JOB INTO V_EMP FROM SCOTT.EMP T WHERE T.EMPNO = 7369;
    
      DBMS_OUTPUT.PUT_LINE('Name of 7369 is ' || V_EMP.ENAME);
      DBMS_OUTPUT.PUT_LINE('Job of 7369 is ' || V_EMP.JOB);
    
    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error ! Please check .');
    END;
    3 使用%rowtype类型
    DECLARE
      V_EMP scott.emp%Rowtype;
    
    BEGIN
      SELECT T.* INTO V_EMP FROM SCOTT.EMP T WHERE T.EMPNO = 7369;
    
      DBMS_OUTPUT.PUT_LINE('Name of 7369 is ' || V_EMP.ENAME);
      DBMS_OUTPUT.PUT_LINE('Job of 7369 is ' || V_EMP.JOB);
    
    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error ! Please check .');
    END;


  • 相关阅读:
    beta冲刺—— Day 4
    beta冲刺—— Day 3
    beta冲刺—— Day 2
    刚下飞机——Beta阶段随笔集合
    刚下飞机——Alpha冲刺
    刚下飞机——Beta答辩博客
    刚下飞机——用户使用调查报告
    刚下飞机——Beta冲刺总结博客
    Beta冲刺(7/7)
    Beta冲刺(6/7)
  • 原文地址:https://www.cnblogs.com/alen-liu-sz/p/12975642.html
Copyright © 2011-2022 走看看