PLSQL 基础语法
01. PLSQL 语法(变量,if,loop,cursor,exception)
1. 语法
在数据库服务器上保存的打断可执行方法,供其他开发人员调用
可以有效的减少数据库端和服务端的数据交互,提高效率,降低带宽消耗
语法格式:
declare -- 定义部分,保存变量,引用型变量,记录型异常begin -- 逻辑处理部分exception -- 需要捕获异常是写上end; -- 结束
2. 定义变量
定义 | 描述 |
---|---|
constant | 常量 |
表名%rowtype | 记录型变量 |
表名.列名%type | 引用型变量 |
:= | 给变量赋予默认值 |
into | 把查询出来的数据进行赋值 |
- 实例
declare-- 定义变量i number := 1;-- 定义常量pi constant number := 2;-- 定义记录型变量/记录一行数据-- 变量名 表名%rowtype;v_emp emp%rowtype;-- 定义引用型变量-- 变量名.列明%typepname emp.ename%type;beginselect * into pemp from emp;
end;
3. if判断
语法:
/* if判断: if 条件表达式 thenelsif 条件表达式 thenelse end if; */-- 实例: declareage number := 18; beginif age = 17 thendbms_output.put_line('我是17');elsif age = 18 thendbms_output.put_line('我是18');elsedbms_output.put_line('我是??');end if; end;
4. loop循环
语法:
/* 语法一: 相当于while循环 while 条件表达式 loopend loop; */ -- 实例 declarei number := 0; beginwhile i < 10 loopi := i + 1;dbms_output.put_line(i);end loop; end;/* 语法二: loopexit when 退出循环条件end loop; */ -- 实例: declarei number := 0; beginloopi := i + 1;exit when i > 10;dbms_output.put_line(i);end loop; end;/* 语法三: 1..10: 也可以是查询出来的结果集 for 变量 in 1..10 loop;end loop */ -- 实例: declarei number := 0; beginfor i in 1..10 loopdbms_output.put_line(i);end loop; end;
5. cursor游标
是一个私有的SQL工作区,分为隐式游标和显示游标,我们通常声明的是显示游标
用来操作结果的,相当于java中的迭代器
语法:
/* 开发步骤:1. 声明游标: cursor 游标名 is 查询结果集2. 打开游标: open 游标名3. 从游标中取出数据: fetch 游标名 into 变量名游标名%found: 找到数据游标名%notfound: 没有找到数据4. 关闭游标 */declareemp_rows emp%rowtype;-- 1.cursor rows is select * from emp; begin-- 2.open rows;-- 2.1loop-- 3.fetch rows into emp_rows;-- 3.1exit when rows%notfound;dbms_output.put_line(emp_rows.ename);-- 3.2end loop;-- 4.close rows; end;
6. exception异常
类型 | 描述 |
---|---|
no_data_found | 找不到数据 |
too_many_rows | 匹配到多个字符 |
zero_divide | 零除 |
value_error | 算数或转换异常 |
timeout_on_resource | 在等待资源时发生超时 |
others | 最大的异常/相当于java中的exception |
语法:
/* yvfa: declarebeginexceptionwhen 异常类型 then处理 end; */ -- 实例: declarenum number := 1; beginnum := num/0 ; exceptionwhen zero_divide thendbms_output.put_line('除零异常'); end;-- 自定义异常: declareno_date exception; begin raise no_date;exceptionwhen no_date thendbms_output.put_line('自定义异常'); end;
7. 存储过程
将一个个PLSQL的业务处理过程存储起来复用,这些被存储取来的PLSQL程序称之为存储过程
实例:
/* 语法:create or replace procedure 存储过程名(参数名称 in 参数类型,返回值名称 in 返回值参数类型) is-- 定义变量beginend; */-- 实例一: 无参数无返回值 create or replace procedure run1 is -- 声明变量 begindbms_output.put_line('run1'); end; -- 调用 beginrun1; end;-- 实例二: 有参数无返回值 create or replace procedure run2(i_sid in student.tid%type) is -- 声明变量v_sname student.sname%type;v_sid student.tid%type; beginselect tid,sname into v_sid,v_sname from student where tid = i_sid;dbms_output.put_line(v_sid);dbms_output.put_line(v_sname); end; -- 调用 beginrun2(1); end;-- 实例三: 有参数有返回值 create or replace procedure run3(i_sid in student.tid%type,i_sname out student.sname%type) is beginselect sname into i_sname from student where tid = i_sid; end; -- 调用 declarev_sname student.sname%type; beginrun3(1,v_sname);dbms_output.put_line(v_sname); end;
PLSQL 基础语法相关推荐
- PLSQL基础语法二-流程控制,循环
2019独角兽企业重金招聘Python工程师标准>>> --流程控制 --分支语句 --练习1:字符串 declarestr varchar2(18):='b'; beginif(s ...
- 【转】oracle PLSQL基础学习
[转]oracle PLSQL基础学习 --oracle 练习: /**************************************************PL/SQL编程基础****** ...
- FPGA(2)基础语法 -- 按键控制led(alway@语句)
目录 1.module 文件名(端口) 2.声明关键字 3.always@语句 代码 1.module 文件名(端口) 注:这里最好养成习惯,只在文件名后面的括号中声明引脚变量,输入输出.关键字类型 ...
- javascript基础语法——表达式
前面的话 一般地,关于javascript基础语法,人们听得比较多的术语是操作符和语句.但是,其实还有一个术语经常使用,却很少被提到,这就是javascript表达式(expression).本文将详 ...
- Rust语言开发基础(六)基础语法
2019独角兽企业重金招聘Python工程师标准>>> 一.变量的定义和使用 其它常见的编程语言对变量的定义通常是通过声明类型和使用关键new来创建一个变量,但Rust不是,Rust ...
- python列表嵌套字典取值_Python基础语法:你不得不知的几种变量类型
(点击上方快速关注并设置为星标,一起学Python) 作者:kina_chen來源:简书 01. Python编码Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字, ...
- python赋值语句的一般格式为_Python 基础语法
Python 基础语法 Python 语言与 Perl,C 和 Java 等语言有许多相似之处.但是,也存在一些差异. 在本章中我们将来学习 Python 的基础语法,让你快速学会 Python 编程 ...
- 深入浅出CMake(二): 基础语法
在<深入浅出CMake(一):基础篇>文章中,我们已经知道了怎么依葫芦画瓢编写简单的 CMake 构建文件了,但如果应对复杂的工程的话,这还是远远不够的. CMake 是一套编译构建体系, ...
- Python基础语法学习笔记
Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...
最新文章
- NYOJ128前缀式计算
- Python3 数字转换为字符串str()函数
- CodeAbstract
- Vue保持用户登录及权限控制
- 什么不是预防计算机病毒的方法,预防计算机病毒的方法是什么
- Windows平台下的多线程编程
- Cookies和Session(三)--SessionState
- Java™ 教程(常见问题及其解决方案)
- linux查看慢日志记录,MySQL慢查询日志
- cmake导入so库_cmake编译.so库体积非常大,求解答
- cocos2d-x学习知识点记录
- 多版本并发控制MVCC和乐观锁OCC 是什么 区别
- html图片没有白边,css插入背景图片底部有白边的解决方法
- SoftMaker Office 2021中文版软件介绍-Office办公套件媲美Microsoft Office
- mysql中 符号什么意思_MySQL中的 || 符号是什么意思?
- 人脸检测卷积神经网络_卷积神经网络和计算机视觉的人脸面具检测算法
- xmanager linux 配置,配置Xmanager连接Linux
- 类的设计与实现1、设计一个图形抽象类Graph,该类中有成员变量图形类型(type),维度信息(dimension,二维或三维);成员方法计算面积(computeArea); 2、设计一个接口
- 【Ubuntu】SMBus Host controller not enabled(虚拟机进入不了图形界面)
- 多线程+socket 实现群聊服务器
热门文章
- 学习Numpy(一)
- php中浮点数四舍五入,php 浮点数四舍五入函数
- zk - zookeeper实现分布式锁代码
- 冰雪之城鸿蒙碎片,冰雪之城——土豪玩法攻略
- 电商加速进入“拼”时代
- 免费etl调度工具Taskctl-Web应用版功能框架及特性
- WannaCry 勒索病毒复现及分析,蠕虫传播机制全网源码详细解读 | 原力计划
- Arcgis基于格网的道路密度分析
- [XenDesktop5.5]+Hyper-V上的Win7+VDA无法启用Aero效果
- HotSpot 启动流程