浅谈PL/SQL语言基础
在前面的学习中,我们大部分接触的都是SQL语言,但是,在实现复杂操作的时候,SQL语言就无能为力了,这时候就需要引入新的语言,PL/SQL语言就是对SQL语言的扩展,可以实现存储过程,函数等的创建。下面是我对PL/SQL语言的总结,和大家分享一下。
一.基本结构
1.PL/SQL是一种块结构的语言,它将一组语句放在一个块中,一次性发送给服务器,当PL/SQL引擎分析收到PL/SQL语句块中的内容,把其中的过程语句由PL/SQL引擎自身去执行,把PL/SQL语句块中的SQL语句交给服务器的SQL语句去执行。
2.PL/SQL的块都是由声明变量(可省略),程序代码(必填)和异常处理(可省略)组成。
代码结构:declare
变量声明
begin
程序体
exception
异常处理
end;
示例一
set serveroutput on;
--打开控制台输出,切记,不能在该语句后面写注释,否则报错。
declare
str varchar(20):='Hello World!';
begin
dbms_output.put_line(str);
end;
3.PL/SQL中常量和变量的声明
1>常量(使用constant关键字)
示例:declare num constant int:=1;
2>变量(参照(2)中的declare介绍)
4.特殊的变量类型
1>%type
set serveroutput on;
declare
cname bank.customername%type; --cname类型和bank表中的customername的类型一样
begin
select customername into cname from bank where customername='李四';
dbms_output.put_line(cname);
end;
2>%rowtype
set serveroutput on;
declare
recordbank bank%rowtype; --引用bank表中一行数据类型,即recordbank可以存放bank表中的一条数据
begin
select * into recordbank from bank where customername='李四';
dbms_output.put_line(recordbank.customername||'存款为'||recordbank.currentmoney);
end;
5.接收用户的输入
set serveroutput on;
declare
str varchar(20);
begin
str:=&age;
dbms_output.put_line(str);
end;
6.从查询结果中赋值(使用into关键字)
set serveroutput on;
declare
cname bank.customername%type; --cname类型和bank表中的customername的类型一样
begin
select customername into cname from bank where customername='李四';
dbms_output.put_line(cname);
end;
二.流程控制语句
PL/SQL的流程控制语句和我们常用的java等语言原理相同,除了使用时的方法略有不同,下面仅列出PL/SQL中使用方法和其他语言不同的流程控制语句。
set serveroutput on;
declare
num int :=#
begin
--判断if正确则执行then,否则执行else(elsif为嵌套判断)
if num>0 then
dbms_output.put_line('输入数字大于零');
elsif num=0 then
--注意elsif,里面少一个e
dbms_output.put_line('输入数字等于零');
else
dbms_output.put_line('输入数字小于零');
end if;
end;
set serveroutput on;
declare
num int ;
i int;
begin
--有逻辑的从数值中做出选择
num:=(case when 1=2 then 11 else 22 end);
i:=(case num when 11 then 111 when 22 then 222 else 0 end);
dbms_output.put_line('num'||num||',i为'||i);
end;
set serveroutput on;
declare
ssum int :=0;
i int :=1;
begin
loop
ssum := ssum+i;
i:=i+1;
if i>5 then
exit;
end if;
end loop;
dbms_output.put_line('1+2+3+4+5='||ssum);
end;
set serveroutput on;
declare
ssum int :=0;
i int :=1;
begin
loop
ssum := ssum+i;
i:=i+1;
exit when i>5;
end loop;
dbms_output.put_line('1+2+3+4+5='||ssum);
end;
set serveroutput on;
declare
ssum int :=0;
i int :=1;
begin
while i<=5 loop
ssum := ssum+i;
i:=i+1;
end loop;
dbms_output.put_line('1+2+3+4+5='||ssum);
end;
set serveroutput on;
declare
ssum int :=0;
begin
for i in 1..5 loop
--i不用声明定义,并且不用i:=i++;
ssum := ssum+i;
end loop;
dbms_output.put_line('1+2+3+4+5='||ssum);
end;
三.异常处理
1.格式
EXCEPTION
WHEN <异常情况名> THEN
<异常处理代码>
WHEN <异常情况名> THEN
<异常处理代码>
WHEN OTHERS THEN
<异常处理代码>
示例
set serveroutput on;
declare
recordbank bank%rowtype;
begin
select * into recordbank from bank where customername='王柳';
exception
when no_data_found then
dbms_output.put_line('没有找到该客户');
when others then
dbms_output.put_line('其他错误');
end;
2.常见异常
| 异常 | 说明 |
| CURSOR_ALREADY_OPEN | 用户试图重新打开已经打开的游标时出现 |
| INVALID_CURSOR | 在执行非法游标运算(如fetch一个尚未打开的游标)时出现 |
| NO_DATA_FOUND | 没有找到数据 |
| TOO_MANY_ROWS | 执行select语句时返回多行 |
| VALUE_ERROR | 在产生大小限制时出现,如变量中的列值超出变量的大小 |
| ZERO_DIVIDE | 以零做除数时出现 |
3.自定义异常
set serveroutput on;
declare
myException exception;
begin
update bank set customername = '王柳' where customername='李亮';
if SQL%NOTFOUND then
raise myException;
end if;
exception
when myException then
dbms_output.put_line(SQLCODE||' errer '||SQLERRM);
end;
4.重新定义系统异常
set serveroutput on;
declare
myException EXCEPTION;
begin
update bank set customername = '王柳' where customername='李亮';
if SQL%NOTFOUND then
--调用系统的异常处理,抛出异常
RAISE_APPLICATION_ERROR(-20001,'can not found any row!');
end if;
EXCEPTION
when myException then dbms_output.put_line('user errors');
when others then
dbms_output.put_line('Others '||SQLCODE||' '||SQLERRM);
end;
浅谈PL/SQL语言基础的更多相关文章
- PL/SQL语言基础
PL/SQL语言基础 进行PL/SQL编程前,要打开输出set serveroutput on 1.创建一个匿名PL/SQL块,将下列字符输出到屏幕:"My PL/SQL Block Wor ...
- Oracle Pl/SQL编程基础
Pl/SQL简介 提高应用程序的运行性能, 提供模块化的程序设计, 自定义标示符, 具有过程语言控制结构, 良好的兼容性, 处理运行错误. Pl/SQL语言基础 sql是关系数据库的基本操作语言. s ...
- 【PL/SQL编程基础】
[PL/SQL编程基础]语法: declare 声明部分,例如定义变量.常量.游标 begin 程序编写,SQL语句 exception 处理异常 end: / 正斜杠表示执行程序快范例 -- Cre ...
- PL/SQL语言的学习笔记
一.PL/SQL简介1.什么是PL/SQL程序?(PL/SQL是对SQL语言的一个扩展,从而形成的一个语言) 2.PL/SQL语言的特点(操作Orcale数据库效率最高的就是PL/SQL语言,而不是C ...
- 手撸ORM浅谈ORM框架之基础篇
好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...
- Oracle数据库编程:PL/SQL编程基础
2.PL/SQL编程基础: PL/SQL块: declare 定义部分 begin 执行部分 exception 异 ...
- oracle PL/SQL语法基础
目录 数据类型 定义变量 PL/SQL控制结构 参考资料 Oracle10g数据类型总结 PL/SQL之基础篇 数据类型 学习总结 字符类型 char.nchar.varchar.nvarchar:有 ...
- Oracle 的PL/SQL语言使用
--PL/SQL语言(procedure language 过程化语言) --1.声明类型 declare k number; m ; --Character String buffer too sm ...
- PL/SQL 之 基础
PL/SQL(Procedural Language extensions to SQL)是Oracle 对标准 SQL 语言的过程化扩展,是专门用于各种环境下对 Oracle 数据库进行访问和开发的 ...
随机推荐
- 201621123003《Java程序设计》第一周学习总结
#1. 本周学习总结 本周主要学习了Java的jdk.jvm.jre等基本概念,Java的发展史,知道Java语言的跨平台.面向对象等主要特点,简单了解了Java程序的编译和运行过程.对于学习Java ...
- Qt中QT_BEGIN_NAMESPACE和QT_END_NAMESPACE的作用
在Qt中,我们经常会看到 QT_BEGIN_NAMESPACE class QAction; class QMenu; class QPlainTextEdit; QT_END_NAMESPACE 这 ...
- [置顶]
Android 关于BottomDialogSheet 与Layout擦出爱的火花?
今天上班做那个类似于ios拍照的那种效果图 就是个垂直布局然后里面textview+分割线+textview+button 当然也可以用button+分割线+button 方法有很多,选择适合自己的就 ...
- Delphi Xe4 游戏开发的技术选型.
asphyre 是支持 FireMonkey的. 利用Firemonkey的跨平台接口.实现 win,mac,ios. 其它方案估计就得靠 FPC 了. 好处是多了输出Andriod的可能. zeng ...
- P4简介:数据平面的编程语言
15-05-29 http://p4.org/join-us/ 由两位SDN大师----来自普林斯顿的Jennifer Rexford和斯坦福的Nick McKeown---- 共同 ...
- 【MFC】MFC技巧学习 当做字典来查
MFC技巧学习 摘自:http://www.cnblogs.com/leven20061001/archive/2012/10/17/2728023.html 1."属性页的添加:创建对话框 ...
- html display和visibility在资源加载上的区别
想要把一个html里的UI组件设置为可见/不可见,可以用两个属性,display=none/block, visibility=hidden/visible, 网上的解释是display虽然可以让一个 ...
- 【ACM非算法部分】scanf()函数
scanf函数 格式说明符: %c 字符型 %d 十进制数 %i 读入十进制,八进制,十六进制数.输入的时候正常是十进制数,若输入0前缀的数将读入八进制,0x前缀读入16进制.若输 ...
- 《DSP using MATLAB》示例Example7.17
代码: M = 40; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; T1 = 0.109021; T2 = 0.59417456; Hrs = [zero ...
- 剑指offer—第二章算法之快速排序
算法:排序和查找(二分查找,归并排序,快速排序),位运算等. 查找:顺序查找,哈希查找,二叉排序树查找,哈希表. 二分查找可以解决:"旋转数组中的最小数字","数字在排序 ...