zoukankan      html  css  js  c++  java
  • Oracle PL/SQL基础(PL/SQL程序结构, 变量与常量,SQL语句)

    1.PL/SQL概述

      通过SQL能够对数据库中的数据进行管理。但SQL并不能做程序员希望做的所有事情。SQL有一个先天缺陷,即对输出结果缺乏过程控制:它没有数组处理、循环结构和其他编程语言的特点。为了满足这种要求,Oracle开发了PL/SQL作为对SQL的扩展,它对数据库数据的处理有很好的控制,并且在允许运行Oracle的任何操作系统平台上均可运行PL/SQL程序。
      PL/SQL首先出现在1985年的Oracle6中。它主要在Oracle用户界面SQL*Forms上使用,用于在报表中引入复杂的逻辑;它取代了奇特的逻辑控制步进方法。它还是一种类似于ADA和C的、相当简单的结构化编程语言。用户可以用PL/SQL读取数据、完成逻辑任务、填充数据库、创建存储对象、在数据库内移动数据、甚至还可以创建和显示Web页面。到现在,PL/SQL已完全发展成为一项成熟的技术, Oracle在很多产品(也就是Oracle应用程序)中都使用了PL/SQL, Oracle还将PL/SQL的Web扩展广泛地应用在许多其他的应用程序和产品中。PL/SQL语言将变量,控制结构、过程和函数等结构化程序设计的要素引入到SQL语言中,从而可以实现复杂的业务逻辑

      PL/SQL的执行过程PL/SQL程序的编译和执行是通过PL/SQL引擎来完成的。PL/SQL引擎可以安装在数层库中或者在应用开发工具里,如Oracle Forms通常,Oracle数据库服务器端都安装有PL/SQL引擎。下面以数据库服务器端的PL/SQL引擎为例说明PL/SQL程序的执行过程,如图所示:客户端应用程序向Oracle数据库发送一个PL/SQL块的过程调用。服务器接收到应用程序的内容后,将其传递给PL/SQL引擎,PL/SQL引擎负责处理PL/SQL块中的过程化语句,而将PL/SQL块中的SQL语句传递给SQL语句执行器。

    2.PL/SQL程序结构

    (1).PL/SQL程序通常包含3个部分;

    (2).嵌套的块结构

    PL/SQL块中可包含子块.子块可位于PL/SQL块中的任何部分.子块也可是一条PL/SQL命令.

    [Declare ]
        --定义语句说明部分    (可选的)
    Begin
    --主块的语句执行部分        (必须的)
      Begin
     --子块的语句执行部分
    [ Exception ]
    --子句的异常处理语句段  (可选的)
      End;
    [ Exception ]
    --主块的异常处理语句段  (可选的)
    End ;

    (3).PL/SQL块的类型

    无名块:没有命名的PL/SQL块,嵌入在一个应用内的或者交互式发出的无名PL/SQL块.无名块可用于服务器和客户端.无名块在所有的PL/SQL环境中都使用。动态生成,只能执行一次的块,不能由其他应用程序调用
    有名块(应用的过程和函数):包括函数、存储过程、包、触发器 ,可以多次执行的PL/SQL程序,编译后放在服务器中,由应用程序或系统在特定条件下调用执行。

    3.词法单元

    (1).oracle中 =: 和 := 区别

    =:应该相当于 a = :b 表明b是个绑定变量,需要执行时进行变量绑定
    := 相当于一般编程语言中的 赋值 a := 1 即将 数字1赋值给变量 a

    (2).注释

    注释PL/SQL程序中可以采用两种注释形式:单行注释和多行注释。
    单行注释:在某一行中以“--”开始,直到该行行尾结束,可以出现在一行的任何地方。
    多行注释:以“/*”开始,以“*/”结束,中间可以跨越多行。

    (3).运算符与表达式

    PL/SQL中需要进行运算来对数据进行加工处理,要进行运算就需要有运算符。
    PL/SQL中允许使用的运算符有算术运算符关系运算符、逻辑运算符和其他运算符,。
    PL/SQL中的特殊运算符:(与其他程序语言有异的)    

    不等于操作符: ◇或!=或^=

    乘幂运算符:**

    逻辑运算符: AND逻辑与  OR逻辑或  NOT逻辑非

    赋值运算符:= IS NULL判断值是否为空 LIKE比较字符串值 IN 验证操作数在设定的一系列值中 BETWEEN 验证值是否在范围之内

    其中,算术运算符的优先级为(由高到低:乘幂→正负→乘除→加减;关系运算符的优先级相等;逻辑运算符的优先级为(由高到低):not→and→or

    由各种运算符和括号将运算对象连接起来符合PL/SQL语法规则的式子称为PL/SQL表达式。其中,运算对象可以包括常量、变量等。表达式中运算符的优先级决定了表达式

    4. 变量与常量

    (1).标识符的定义规则:

    变量必须以字母开头,后跟字母、数字、下划线、$、#等;
    变量名长度不能超过30个字符;
    标识符中不能包含加号、减号和空格;
    标识符不能是 SQL的关键字;
    标识符不区分大小写
    注意:如果包含关键字或者空格等特殊字符,需要使用“”括起来,称为引证标识符。

    (2).基本数据类型

    类型

    说明

    varchar2(长度)

    字符型 用来存放变长的字符串,最大长度4000字节。在PL/SQL中使用没有默认的长度,因此必须指定

    Number(精度,小数)

    数值型 用来存放整数和实数,可定义精度和取值范围

    date

    日期型,Oracle常用的日期型变量,date的最小单位是秒

    Char(长度)

    Oracle SQL用来存放固定长度的字符串,最大长度4000字节,默认长度为1,如果内容不够用空格替代。

    TIMESTAMP

    它包括了所有DATE数据类型的年月日时分秒的信息,而且包括了小数秒的信息。

    (3).声明变量

    DECLARE 变量名 数据类型[(长度)][:=初值][default 默认值];
    (1)PL/SQL变量可以与数据库列具有同样的类型:

    DECLARE
    v_StudentName VARCHAR2(20):=‘zhanghe’;
    v_NumberCredits NUMBER(3):=123;
    out_num number default 5;

    (2)PL/SQL变量也可以是其他类型:

    DECLARE
    v_LoopCounter BINARY_INTEGER;
    v_CurrentlyRegistered BOOLEAN;

    (4).PL/SQL中的常量分为三种

    数值常量;包括整数、实数和指数。
    字符常量:单引号括起来的字符序列。
    布尔常量:其常量有3个值,TRUE、FALSE和NULL。
    日期型常量:表示日期值。

    (5).常量的定义方式

    常量名 CONSTANT  类型:=常量值;
    如:

    PI CONSTANT number(5,6):=3.141926;

    5.PL/SQL块中的SQL语句

    由于PL/SQL执行采用早期绑定,即在编译阶段对变量进行绑定,识别程序中标识符的位在置,检查用户权限、数据库对象等信息,因此在PL/SQL中只允许出现查询语句(SELECT)、利DML语句(INSERT,UPDATE,DELETE)和事务控制语句(COMMIT,ROLLBACK,SAVEPOINT),因为它们不会修改数据库模式对象及其权限.

    例:查询ORDERDETAILS表中产品编号为1的产品的销售总价值和总数量.

    SET SERVEROUTPUT ON--用于展现查询结果
    DECLARE
      total_price number(38,3);
       total_quantity number;
    BEGIN
      SELECT  sum(unitprice*quantity), sum(quantity)
      INTO  total_price, total_quantity
      FROM orderdetails
      WHERE productid=1;
    Dbms_output.put_line(‘产品1的销售总价值为’ || total_price||’,总数量为’|| total_quantity);
    END;
  • 相关阅读:
    promise的终止调用方法:
    (五)浅谈测试用例
    (四)一个bug的生命周期
    (三)趣谈软件需求分析
    (二)软件测试分类
    (一) 软件测试实质
    【转载—“光荣之路”公众号】Bug预防体系(上千bug分析后总结的最佳实践)
    <MFC>FILE的操作
    <CAN>测试的原理
    <C++>消息循环
  • 原文地址:https://www.cnblogs.com/CX66/p/14056710.html
Copyright © 2011-2022 走看看