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;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值