PL/SQL语言语法
一、前言
SQL全称是“结构化查询语言(Structured Query Language)”,而PL/SQL是过程语言(Procedure Language),是对SQL的扩展。PL/SQL语言比任何其他程序设计语言(C、C++、java等)操作数据库的效率要高。
二、基本语法结构
declare --定义部分:包括定义变量、游标
/* 定义游标。有游标就肯定有打开游标、循环、关闭游标
* 小技巧:定义完游标后,游标需要的变量马上在后面定义,如定义ename,sal。
*/
cursor cemp is select ename,sal from emp;
pename emp.ename%type; --定义引用型变量(即引用emp表的ename列的类型,ename是什么类型pename也跟着是什么类型)
psal number; --定义一般变量
/* 定义记录型变量(以 _rec 结尾):代表一行数据。如:select * into emp_rec from emp where empno='2';
* 使用:emp_rec.ename,emp_rec.sal
*/
emp_rec emp%rowtype;
begin
--打开游标
open cemp;
loop
fetch cemp into pename,psal; --获取一行数据
exit when cemp%notfound; --退出条件
dbms_output.put_line(pename||'的薪水是:'||psal);
end loop;
--关闭游标
close cemp;
exception
when... then...
when others... then...
end;
/
1. 定义游标
cursor 游标名 [(参数名 数据类型[,参数名 数据类型]...)] is select 语句;
如:
定义:corsor cemp(dno number) is select ename from emp where deptno=dno;
打开:open cemp(2);
2. 循环(注意退出条件)
loop循环
[<<label_name>>]
LOOP
[EXIT...WHEN...]
[IF...EXIT]
statement...
END LOOP [label_name] 【语法说明】
<<label_name>>:LOOP结构的标签,是可选项。
LOOP:LOOP循环开始标志。
statement:LOOP语句中循环执行的语句序列。
END LOOP:LOOP循环结束标志,可以添加LOOP结构的标签。
for...loop循环
[<<label_name>>]
FOR index_name IN
[ REVERSE ]
lower_bound .. upper_bound
LOOP
statement...
END LOOP [label_name]; 【语法说明】
index_name:循环计数器,是一个变量,它可以得到当前的循环指数。需要注意的是,不能为其手工赋值。
REVERSE:可选项,指定循环方式。默认的循环方式由下标(lower_bound)到上标(upper_bound)。使用该选项则从上标界到下标界。
lower_bound:循环范围的下标界。
upper_bound:循环范围的上标界。
下标和上标之间的".."不能省略。 for example:
1. for i in 1..10 loop
2. select eno into empNo from emp;
for n in empNo loop
while...loop循环
[<<label_name>>]
WHILE boolean_expression
LOOP
statement...
END LOOP [label_name]; 【语法说明】
boolean_expression:布尔表达式。
statement:语句序列,当boolean_expression为TRUE时,该语句序列可获得执行权。
3. 条件判断
if...elsif
IF 条件1 THEN
statement...
ELSIF 条件2 THEN
statement...
ELSE
statement...
END IF;
case
CASE [selector]
WHEN 表达式1 THEN 语句序列1;
WHEN 表达式2 THEN 语句序列2;
WHEN 表达式3 THEN 语句序列3;
……
[ELSE 语句序列N];
END CASE;
三、写PL/SQL思路
先把以下两个思路根据需求弄清楚再写sql,这样思路会比较清晰,程序也比较不容易出错
1. SQL语句
for example:
select ename,sal from emp;
游标 --> 循环 --> 退出条件(notfount or other)
2. 变量(初始值、如何得到需要的值)
根据需求确定需要什么变量。计算变量的值的时候,能用算术计算的就尽量用,少用sql,提高效率。如计算总工资,如果循环过程有各个职工的工资,累加即可,少用sum()。
四、属性
- 游标属性:%found、%notfound、%isopen、%rowcount:影响的行数,即当前游标执行了多少行,并不是查询数据的总行数
- 游标的限制:默认情况下,oracle只允许在同一个会话中,打开300个游标。
修改游标数据限制:
alter system set open_cursor=400 scope=both;
scope的取值:both,memory,spfile。(spfile数据库需重启,修改配置文件;memory只在当前会话生效,both包括其他2个)
PL/SQL语言语法的更多相关文章
- PL/SQL基础语法入门
先前安装了PL/SQL软件 PL/SQL全称为Procedural Language/SQL. PL/SQL也是一种程序语言,叫做过程化SQL语言,是Oracle数据库对SQL语句的扩展 打PL/SQ ...
- Oracle PL/SQL 语言(Procedural Language/SQL)
Oracle PL/SQL 语言(Procedural Language/SQL)是结合了结构化查询与 Oracle 自身过程控制为一体的强大语言,PL/SQL 不但支持更多的数据类型,拥有自身的变量 ...
- PL/SQL语言的学习笔记
一.PL/SQL简介1.什么是PL/SQL程序?(PL/SQL是对SQL语言的一个扩展,从而形成的一个语言) 2.PL/SQL语言的特点(操作Orcale数据库效率最高的就是PL/SQL语言,而不是C ...
- Oracle 的PL/SQL语言使用
--PL/SQL语言(procedure language 过程化语言) --1.声明类型 declare k number; m ; --Character String buffer too sm ...
- 浅谈PL/SQL语言基础
在前面的学习中,我们大部分接触的都是SQL语言,但是,在实现复杂操作的时候,SQL语言就无能为力了,这时候就需要引入新的语言,PL/SQL语言就是对SQL语言的扩展,可以实现存储过程,函数等的创建.下 ...
- PL/SQL基本语法
*2.PL/SQL基本语法 1)匿名块 一段不能在数据库存储的PL/SQL. 基本结构如下: DECLARE //变量的声明定义区域(可省略) BEGIN //业务处理 ...
- PL/SQL语言基础
PL/SQL语言基础 进行PL/SQL编程前,要打开输出set serveroutput on 1.创建一个匿名PL/SQL块,将下列字符输出到屏幕:"My PL/SQL Block Wor ...
- Oracle11g R2学习系列 之九 PL/SQL语言
这是个重头戏,如果精通了PL/SQL,毫不夸张的说明精通了Oracle了.PL/SQL由以下三个部分组成(Definition,Manipulation,Control): DDL:数据定义语言,Cr ...
- PL/SQL常用语法及举例
PLSQL语句 DECLARE 声明部分 BEGIN 程序编写,SQL语句 EXECPTION 处理异常 END; / 声明部分(DECLARE) SQL> set serveroutput o ...
随机推荐
- windows 查看被占用的端口信息
如何查询 1.使用命令:netstat -aon|findstr "8080" 查询被占用的端口的进程 PID 2.使用命令:tasklist | findstr "15 ...
- 串口字符串-HEX格式
串口字符串-HEX格式 C++SerialSerialPortHEX 介绍 串口通信过程中 通常涉及一个数据的模拟过程以及数据发送过程, 一般来说, 我们会发送一串指令给下位机 68 05 00 84 ...
- docker容器介绍
Docker容器 一.什么是Docker? Docker时Docker.Lnc公司开源的一个基于LXC技术之上搭建的Container容器引擎,源代码托管在Git ...
- opencv-10-图像滤波-噪声添加与均值滤波-含opencv C++ 代码实现
开始之前 再说上一篇文章中, 我们想按照噪声产生, 然后将降噪的, 但是限于篇幅, 我就放在这一篇里面了, 说起图像的噪声问题就又回到了我们上一章的内容, 把噪声当作信号处理, 实际上数字图像处理实际 ...
- 让webpack打包支持ES7的async/await语法
npm install --save-dev babel-plugin-transform-runtime npm install --save babel-runtime .babelrc配置 { ...
- Shell脚本(五)函数
总结下shell中的函数用法 #!/bin/bash function add_v1() { echo "call function add" } function add_v2( ...
- SSTI(服务器模板注入)学习
SSTI(服务器模板注入)学习 0x01 SSTI概念 SSTI看到ss两个字母就会想到服务器,常见的还有SSRF(服务器端请求伪造).SSTI就是服务器端模板注入(Server-Side Templ ...
- Vue列表实现滚动到指定位置样式改变
这个需求大概是这样子: 我做的一个聊天Demo,在搜索框搜索用户,可以滚动到指定的用户.然后成选中状态. 这是目前状态,我搜索 南宫仆射 ,想要下面的用户列表直接滚动到 南宫仆射 并改变CSS样式. ...
- 01-Taro打造hello-world应用
01-Taro打造hello-world应用 一.简介 Taro是由京东凹凸实验室出品,书写一套代码通过 Taro 的编译工具,将源代码分别编译出可以在不同端(微信 / 京东 / 百度 / 支付宝 / ...
- [hdu5389 Zero Escape]数根的性质,DP
题意:把n个数(1-9)放到A集合和B集合里面去,使得A集合里面的数的数根为a,B集合里面的数的数根为b,也可以只放在A或B任一个集合里面.求方法总数.比如A={2,4,5},则A的数根为[2+4+5 ...