• ORACLE PL/SQL


    (1).PL/SQL对大小写不是敏感的。
    (2).字符类型:
     CHAR:最大程度32767。
    (3).快格式:
     BEGIN
      DECLARE
      BEGIN
      EXCEPTION
      END
     END
       注:要是用了第一个BENGIN就一定要用第二个,反之亦然。
    (4)注释方法:
     单行--This is a one-line comment
     多行/*This is
           is a
           one-line comment
        */
    (5)PL/SQL可以直接支持DML语言查询,却不支持DDL命令,你通常会使用PL/SQL维护在数据库结构中的数据。但并不能维护这些结构。
    (6)DECLARE
       customer char(30);
       fiscal_year number(2) NOT NULL:='97';
       每一个变量的定义都必须以分号结束。
    (7)声明指针
       DECLARE
     cursor employee_cursor is
       select * from employees;
       指针与视图类似,通过在PROCDURE部分使用LOOP(循环)。你可以翻阅指针。
    (8)%TYPE属性
     %TYPE可以放回表中给定的变量属性。
     DECLARE
     cursor employee_cursor is
     select emp_id, emp_name from employees;
     id_num employees.emp_id%TYPE;
     name employees.emp_name%TYPE;
    (9)%ROWTYPE 属性
    变量不仅限于单一的数值,如果你所定义的变量与一个指针相关联的话,你可以使用
    %ROWTYPE 属性来声明变量与保证它与游标所在行的类型相同.在ORACLE 的词典中
    %ROWTYPE

    DECLARE
    cursor employee_cursor is
    select emp_id, emp_name from employees;
    employee_record employee_cursor%ROWTYPE;

    分析:
    在上例中定义了一个叫employee_record 的变量,%ROWTYPE 定义了这个变量的使它
    与employee_cursor 所在行的数据类型相同这个%ROWTYPE 属性定义的变量也称为集合
    变量.
    %ROWCOUNT 属性
    在PL/SQL 中%ROWCOUNT 属性可以保证在特定的SQL 语句块中的游标行数
    DECLARE
    cursor employee_cursor is
    select emp_id, emp_name from employees;
    records_processed := employee_cursor%ROWCOUNT;

    在上例中变量records_processed 将会返回PL/SQL 语句所访问的employee_cursor 的行

    警告:在定义变量的时候要小心以访止它和表的名字相冲突,例如:如果你定义的变量与
    你的PL/SQL 语句块中所访问的表的名字是相同的,那么变量的名字会优先于表的名字
    Procdure 部分
    PROCDURE 部分是一个块的主要部分,它包括条件语句和SQL
    语句
    BEGIN
    open a cursor;
    condition1;
    statement1;
    condition2;
    statement2;
    condition3;
    statement3;
    ...
    close the cursor;
    END

    指针控制命令
    现在你将学习如何在PL/SQL 的语句块中定义一个指针你需要知道如何来访问一个
    定义过的指针这一部分诠释了基本的指针控制命令DECLARE OPEN FETCH 和
    CLOSE

    条件语句
    IF condition1 THEN
    statement1;
    END IF;

    IF condition1 THEN
    statement1;
    ELSE
    statement2;
    END IF;


    IF condition1 THEN
    statement1;
    ELSIF condition2 THEN
    statement2;
    ELSE
    statement3;
    END IF;


    LOOPS 循环
    LOOP
    WHILE-LOOP
    FOR-LOOP

    BEGIN
    open employee_cursor;
    LOOP
    FETCH employee_cursor into employee_record;
    EXIT WHEN employee_cursor%NOTFOUND;
    statement1;
    ....
    END LOOP;
    close employee_cursor;
    END;


    DECLARE
    cursor payment_cursor is
    select cust_id, payment, total_due from payment_table;
    cust_id payment_table.cust_id%TYPE;
    payment payment_table.payment%TYPE;
    total_due payment_table.total_due%TYPE;
    BEGIN
    open payment_cursor;
    WHILE payment < total_due LOOP
    FETCH payment_cursor into cust_id, payment, total_due;
    EXIT WHEN payment_cursor%NOTFOUND;
    insert into underpay_table
    values (cust_id, 'STILL OWES');
    END LOOP;
    close payment_cursor;


    DECLARE
    cursor payment_cursor is
    select cust_id, payment, total_due from payment_table;
    cust_id payment_table.cust_id%TYPE;
    payment payment_table.payment%TYPE
    total_due payment_table.total_due%TYPE;
    BEGIN
    open payment_cursor;
    FOR pay_rec IN payment_cursor LOOP
    IF pay_rec.payment < pay_rec.total_due THEN
    insert into underpay_table
    values (pay_rec.cust_id, 'STILL OWES');
    END IF;
    END LOOP;
    close payment_cursor;
    END;

    EXCEPTION 部分

    激活EXCEPTION (异常):RIASE

    BEGIN
    DECLARE
    exception_name EXCEPTION;
    BEGIN
    IF condition THEN
    RAISE exception_name;
    END IF;
    EXCEPTION
    WHEN exception_name THEN
    Statement;
    END;
    END;
    异常的处理
    EXCEPTION
    WHEN exception1 THEN
    statement1;
    WHEN exception2 THEN
    statement2;
    WHEN OTHERS THEN
    statement3;


    SQL*PLUS

  • 相关阅读:
    [国家集训队]整数的lqp拆分
    来一波全套向量运算(C++)
    天哪又要搬家啦qvq
    利用输入输出流复制文件
    系统会随机给你两个日期(yyyy-MM-dd),求出两个日期的具体相差天数
    mysql中的连接操作
    java面试题集锦
    Java关于Math类的三个取整方法
    设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
    MySql5.5安装详细说明
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/1361417.html
Copyright © 2020-2023  润新知