zoukankan      html  css  js  c++  java
  • oracle PL/SQL(procedure language/SQL)程序设计

    PL/SQL(procedure language/SQL)语言是Oracle对SQL语言的过程化扩充,是一个完整的编程语言。
    PL/SQL实现了过程化语句(如分支、循环等)与SQL语句的无缝连接,将过程化语言的数据处理能力与SQL语言的访问数据库的能力有机地结合在一起。
    PL/SQL语言在Oracle系统中是核心的编程语言,它应用于很多方面,如存储过程、触发器、包、函数和Web应用等。
    PL/SQL语言编写的不是客户端程序而是服务器端的程序


    PL/SQL字符集

    合法字符

        所有大小写字母
      数字0~9。
      符号:( ) +-* /〈〉=!~;:.‘@ % “# $ ^ & _ | { } ? [ ]。
      其中一些字符用于编程,另一些用作算术运算操作符(除法、加法、幂等)及关系运算符(等于和不等于)。
    算术运算符

    运算符意义
    +  加法
    - 减法
    *  乘法
    /  除法
    ** 幂
    || 连接
    关系运算符

    下面列出了PL/SQL中常用的关系运算符。
    运算符意义
    <> 不等于
    != 不等于
    ^= 不等于
    <  小于
    >  大于
    =  等于
    >= 大于等于
    <= 小于等于

    其他符号(非常重要,不要小瞧)

    PL/SQL为支持编程,还使用其他符号。下面列出了常用的符号。
    ( )  列表分隔('Jones','Roy','Abramson')
    ;      语句结束Procedure_name(arg1,arg2);
    .      项分隔(Select * from account.table_name;)
    ’   字符串界定符if var1='SANDRA‘
    :=  赋值Rec_read:=rec_read+1;
    ||     并置Full_name:='Nahtan'||''||'Yebba‘
    --  注释符—This is a comment
    /*与*/ 注释定界符/*This,too,is a comment*/


    PL/SQL块结构

    例如:

    DECLARE
       v_n NUMBER(20);
    BEGIN
       v_n:=65/0;
    EXCEPTION
       WHEN ZERO_DIVIDE THEN
       dbms_output.put_line('divided by zero');
    END;


    “匿名”(anonymous)块通常是动态生成,它只能被执行一次。
    子程序”(subprogram)是存储在数据库内部的过程、包、触发器和函数,通过显式调用可以执行该子程序。
    “函数”(function)除了必须返回一个值外,它与存储过程(procedure)相似。
    “触发器”(trigger)是存储在数据库内部的带名块。当触发事件出现时,触发器便被显式地执行。


    PL/SQL变量 变量类型
    Scalar 标量型
    Composite 复合型
    Reference 引用型
    LOB (large objects)  大对象型
    非PL/SQL变量
    链接变量

    声明PL/SQL变量
    identifier [CONSTANT] datatype [NOT NULL]   
            [:= | DEFAULT expr];
    Declare
      v_hiredate        DATE;        
      v_deptno            NUMBER(2) NOT NULL := 10;
      v_location        VARCHAR2(13) := 'Atlanta';
      c_    comm            CONSTANT NUMBER := 1400;
    在同一PL/SQL块中不能有两个相同的变量名。
    在同一PL/SQL块中变量名不能和表的列名相同。
    显然赋值操作符:
    := 赋值操作符


    基本标量数据类型
     VARCHAR2 (maximum_length)
    NUMBER [(precision, scale)]
    DATE
    CHAR [(maximum_length)]
    LONG
    LONG RAW
    BOOLEAN
    BINARY_INTEGER


    (1)Varchar2为可变长的字母数字数据类型。在PL/SQL中,varchar2的最大长度为32767字节。如  vc_field varchar2(10):='STARTVALUE';
    (2)number类型数据可用来表示所有的数值数据,说明格式为:
     num_field number(precision,scale);
       其中,precision可以有1~38个数字位,而scale(-84~127)表示在precision位数字中小数点后的数字位数,下面的定义:
       num_fieldnumber(12,2);
       表示num_field是一个整数部分最多10位、小数部分最多2位的变量。
    (3)DATE 此数据类型用于保存固定长度的日期值,date变量的说明为:
          date_field date;
    在缺省时,Oracle以DD-MON-YY格式显示日期。因此,2004年9月9日显示为09-SEP-04。
    PL/SQL中编程处理日期必须使用这种格式。是否可以说用户必须用数据库缺省的日期格式,除非用户用TO_CHAR或TO_DATE。
    提示:Oracle中还有DD-MON-RR的日期格式,用来表示4位年份以确保Oracle不会省去两位纪元数。
    (4)BOOLEAN
    Boolean变量只有三种值TRUE、FALSE和NULL。
    Boolean变量一般和逻辑操作符AND, OR, 和 NOT一起使用。



    Examples

    v_job                VARCHAR2(9) DEFAULT ‘CLERK';
    v_count            BINARY_INTEGER := 0;
    v_total_sal        NUMBER(9,2) := 0;
    v_orderdate        DATE := SYSDATE + 7;
    c_tax_rate        CONSTANT NUMBER(3,2) := 8.25;定义常量时必须同时为它赋值,否则会出现错误。
    v_valid            BOOLEAN NOT NULL := TRUE;



    %TYPE属性

    声明一个变量根据下述条件来声明:
    数据库中定义的列
    先前已经声明的变量
    使用%TYPE属性的前缀:
    数据库的表和列名
    先前声明的变量名

    用%TYPE属性声明变量

    examples:

    ...
      v_ename                    emp.ename%TYPE;
      v_balance                    NUMBER(7,2);
          v_min_balance            v_balance%TYPE := 10;
    ...        
    这种定义方法有以下好处:
    在不清楚EMP表的列定义细节的情况下,也可以保证两者定义一致。
    如果改变数据库中EMP表的ename列定义,不需要修改PL/SQL程序中V_ENAME变量定义。
    也就是说上述 的v-ename 和 v-min_balance的 PL/SQL的数据类型和 emp.ename,v-balance的数据 一样。


     

    %ROWTYPE属性:声明一个与数据库表的行具有相同类型的记录变量


     

  • 相关阅读:
    springboot之热部署
    在动态sql的使用where时,if标签判断中,如果实体类中的某一个属性是String类型,那么就可以这样来判断连接语句:
    对集合进行判空的操作
    配置logback日志管理的时候
    SpringBoot序列化时间类型的问题
    Cannot determine embedded database driver class for database type NONE
    idea的基础设置
    使用navicat创建数据库
    LESS
    数据库链接池--简单的理解
  • 原文地址:https://www.cnblogs.com/pacoson/p/3523165.html
Copyright © 2011-2022 走看看