Oracle数据库之PL/SQL基础
介绍PL/SQL之前,先介绍一个图像化工具:Oracle SQL Developer
在oracle的开发过程中, 我们难免会使用第三方开发的软件来辅助我们书写SQL, pl/sql是一个不错的sql书写工具。
下载链接:http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html
PLSQL是程序设计语言,可以用来操作Oracle数据库!
学习PL/SQL目的:
1)操作ORACLE数据库,效率更高;
2)更好去了解后面的存储过程,存储函数,触发器。
❤1、PL/SQL简介
PL/SQL (Procedure Language/SQL)过程语言的SQL;
PL/SQL是Oracle对sql语言的过程化扩展;
--指在SQL命令语言中增加了过程处理语句(如分支、循环等),使SQL语言具有过程处理能力。
PL/SQL是面向过程的语言。
PL/SQL的提出:
但是,对于下面,无法采用命令式的语言完成,要通过程序的方式来完成:(学习PL/SQL的目的)
(数据操纵能力:SQL语言的插入、编辑、删除或者查询)
上面两个结合,使得PL/SQL面向过程,但是比过程语言简单、高效、灵活、实用。
操作数据库效率最高的语言就是PL/SQL,而不是其他编程语言。
注意,不同的数据库对SQL语言有不同的扩展,从而形成不同的编程程序语言。
❤2、PL/SQL的基础语法
PL/SQL的程序结构:
注:如果没有说明部分,declare可以不写。以begin开始,end结束
具体介绍如下:
- 基本变量类型:
注意,在PL/SQL程序中,定义基本变量,变量名在前面,类型在后面
执行结果:
- 引用型变量和纪录型变量:
--引用型变量
变量名称 变量类型 (引用emp表ename列的类型作为my_name的类型)
注:PL/SQL赋值有两种方式:1、:= 2、into(into后面的变量顺序一定是跟前面的是一一对应)
示例:
--纪录型变量
示例:
结果:
- if 语句的使用
if语句的三种形式
if 语句案例:判断用户从键盘输入的数字
分析:从键盘输入数值:accept num prompt '请输入数字'
PL/SQL中接受数字:declare pnum := #(注意:其中的num为地址值。&num表示取出该地址中的值)
结果:
- 循环语句的使用:
三种循环:
示例:
结果:
示例2:
示例3:
建议使用loop循环,在控制光标的时候比较方便。
❤3、光标
光标(游标)就是一个结果集(Result Set)
- 光标的语法:
一个具体的光标:
光标在使用之前,需要先打开光标
关闭光标
光标打开以后如何从光标这个集合当中取出每一行记录
光标的具体案例1:
结果:
光标的具体案例2:
代码程序:
PL/SQL程序:
涨工资之前先查询原先的工资:
然后执行程序:
然后再查询:
结果还是和原来一样,但是程序也并没有出错。那问题是什么?
主要是Oracle数据库是默认开启事务的,也就是说上面的PL/SQL程序会在一个事务当中来执行,而我们的查询语句也是会在一个事务当中来查询信息。既然两个事务同时访问数据库,我们就必须要考虑事务的隔离性和隔离级别的问题。
对于Oracle数据库来说,默认的事务隔离级别是read(读)commited(提交)
如果我们PL/SQL程序中如果不提交,我们就当然查询不到结果。所以,注意,写了PL/SQL程序后,如果程序当中对数据做了更改,最后一定要记住需要提交commit。
由于我们之前已经执行了PL/SQL程序(没有加commit的程序),所以为了不影响实现的效果,采用rollback把刚才的数据给回退掉。
然后再来执行下这个完整的程序
现在我们在命令行上再来查询下
- 光标的属性和光标数的限制
--光标的属性:
%found %notfound
%isopen : 判断光标是否打开
%rowcount : 影响的行数(不是总行数)
示例:
结果:
继续补充上面的程序:
执行结果:
--光标数的限制:默认情况下,oracle数据库只允许在同一个会话中,打开300个光标(我们可以通过查询Oracle初始化参数查询到这个值)
不允许无限制的打开光标,也就是光标打开之后,不关闭的话,当你光标数目打开到一定程度后,就不能再打开新的光标了。
show paramter 后面输入的查询值会在值前后自动加上% 模糊查询
如果系统比较小,光标数300可以,但是对于一个大型的系统,往往是不够用的。下面可以修改光标数的限制:
alter system set open_cursors = 400 scope = both;
scope 的取值范围:both,memory,spfile(数据库需要重启)
memory:只更改当前实例,不更改参数文件
spfile:只更改参数文件,不更改当前实例(数据库需要重启才会生效)
both: memory 跟spfile同时被更改
- 带参数的光标
语法:
带参数的光标打开光标以及定义光标是跟不带参数的光标不一样的
❤4、Oracle中的例外
例外是程序设计语言提供的一种功能,用来增强程序的健壮性和容错性。
Oracle数据库中有两种意外:系统例外,自定义例外
1)系统例外:No_data_found(没有找到数据)、
Too_many_rows(select ... into 语句匹配多个行)、
Zero_Divide(被零除,0做除数产生的)、
Value_error(算数或转换错误)、
Timeout_on_resource(在等待资源时发生超时,比较典型的场景就是分布式数据库)
-- no_data_found (没有找到数据)
异常的捕获通过“exception”模块来完成:
...
exception
when ... then ...
when others then ...
...
注意:
1. “then”之后可以跟多条处理该异常的语句;
2. “when others”代表除以上所列举的异常之外的所有其他异常;
-- too_many_rows (select ... into 语句匹配多个行)
-- zero_Divide (被零除,0做除数产生的)
Oracle数据库之PL/SQL基础的更多相关文章
- Oracle数据库之PL/SQL触发器
Oracle数据库之PL/SQL触发器 1. 介绍 触发器(trigger)是数据库提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是 ...
- Oracle数据库之PL/SQL包
Oracle数据库之PL/SQL包 1. 简介 包(PACKAGE)是一种数据对象,它是一组相关过程.函数.变量.常量和游标等PL/SQL程序设计元素的组合,作为一个完整的单元存储在数据库中,用名称来 ...
- Oracle数据库之PL/SQL过程与函数
Oracle数据库之PL/SQL过程与函数 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据 ...
- Oracle数据库之PL/SQL异常处理
Oracle数据库之PL/SQL异常处理 异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的. PL/SQL程序设计过程中,即使是写得最好的程序也可能会遇到错误或未预料 ...
- Oracle数据库之PL/SQL流程控制语句
Oracle数据库之PL/SQL流程控制语句 在任何计算机编程语言(如C,Java,C#等)都有各种流程控制语句,同样,在PL/SQL中也存在这样的流程控制结构. 几种常见的流程控制结构: 一.条件结 ...
- Oracle数据库之PL/SQL程序设计简介
PL/SQL程序设计简介 一.什么是PL/SQL? PL/SQL是 Procedure Language & Structured Query Language 的缩写. ORACLE的SQL ...
- oracle数据库之PL/SQL 块结构和组成元素
一.PL/SQL 块 (一)PL/SQL 程序由三个块组成,即声明部分.执行部分.异常处理部分 PL/SQL 块的结构如下: 1.DECLARE /* 声明部分: 在此声明 PL/SQL 用到的变量, ...
- Oracle数据库之PL/SQL程序基础设计
一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /* * 声明部分——定义常量.变量.复杂数据类型.游标.用户自定义异常 */ BEGIN /* * 执 ...
- Oracle数据库之PL/SQL游标
1. 游标概念 字面意思是游动的光标,是指向上下文区域的句柄或指针. 在PL/SQL块中执行CRUD操作时,ORACLE会在内存中为其分配上下文区.用数据库语言来描述游标就是:映射在上下文区结果集中一 ...
随机推荐
- Cinder相关命令收集
1. 重置状态 source admin-openrc.sh cinder reset-state 51108241-7ffe-44a8-acfa-4cddac8d4793
- 持续集成篇_05_SonarQube代码质量管理平台的介绍与安装
1.SonarQube的介绍 SonarQube是一个管理代码质量的开放平台. 可以从七个维度检测代码质量(为什么要用SonarQube): (1)复杂度分布(complexity):代码复杂度过高将 ...
- 洛谷OJ P1196 银河英雄传说(带权并查集)
题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...
- .NET开发问题汇总
问题一: mvc 部署到iis 提示错误未能加载文件或程序集System.Web.Http.WebHost 解决方案: Nuget程序包管理 —>程序包管理控制台,运行以下命令即可:Update ...
- mapreduce运用
测试环境:192.168.1.55 mongo 192.168.1.55:30001show dbsuse gwgps 测试目标,求出两个班的总数,人数,平均分数等.可以根据不同的业务需求,定制map ...
- PHP 错误与异常 笔记与总结(15 )使用观察者模式处理异常信息
使异常处理变得更灵活.可观察,可以使用设计模式中的观察者模式. 文件 ① 定义观察者的接口 ExceptionObserver.php: <?php /* 给观察者定义的规范 */ interf ...
- LR调用动态链接库DLL
什么是动态库? 动态库一般又叫动态链接库(DLL),是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库. 动态链接提供了一种方法 ,使进程可以 ...
- P1149 火柴棒等式
#include <bits/stdc++.h> using namespace std; const int num[] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6} ...
- Python中Unicode字符串
Python中Unicode字符串 字符串还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte ...
- [转]正则表达式相关:C# 抓取网页类(获取网页中所有信息)
using System; using System.Data; using System.Configuration; using System.Net; using System.IO; usin ...