在前面的学习中,我们大部分接触的都是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中使用方法和其他语言不同的流程控制语句。

1.条件控制语句
  (1)使用if
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;
  (2)使用case
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;
2.循环控制语句
  (1)循环控制,用判断语句执行exit
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;
  (2)循环控制,当when为真时执行exit

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;
  (3)循环控制,当while为真时循环
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;
  (4)已知循环次数的循环
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语言基础的更多相关文章

  1. PL/SQL语言基础

    PL/SQL语言基础 进行PL/SQL编程前,要打开输出set serveroutput on 1.创建一个匿名PL/SQL块,将下列字符输出到屏幕:"My PL/SQL Block Wor ...

  2. Oracle Pl/SQL编程基础

    Pl/SQL简介 提高应用程序的运行性能, 提供模块化的程序设计, 自定义标示符, 具有过程语言控制结构, 良好的兼容性, 处理运行错误. Pl/SQL语言基础 sql是关系数据库的基本操作语言. s ...

  3. 【PL/SQL编程基础】

    [PL/SQL编程基础]语法: declare 声明部分,例如定义变量.常量.游标 begin 程序编写,SQL语句 exception 处理异常 end: / 正斜杠表示执行程序快范例 -- Cre ...

  4. PL/SQL语言的学习笔记

    一.PL/SQL简介1.什么是PL/SQL程序?(PL/SQL是对SQL语言的一个扩展,从而形成的一个语言) 2.PL/SQL语言的特点(操作Orcale数据库效率最高的就是PL/SQL语言,而不是C ...

  5. 手撸ORM浅谈ORM框架之基础篇

    好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...

  6. Oracle数据库编程:PL/SQL编程基础

    2.PL/SQL编程基础: PL/SQL块:        declare        定义部分        begin        执行部分        exception        异 ...

  7. oracle PL/SQL语法基础

    目录 数据类型 定义变量 PL/SQL控制结构 参考资料 Oracle10g数据类型总结 PL/SQL之基础篇 数据类型 学习总结 字符类型 char.nchar.varchar.nvarchar:有 ...

  8. Oracle 的PL/SQL语言使用

    --PL/SQL语言(procedure language 过程化语言) --1.声明类型 declare k number; m ; --Character String buffer too sm ...

  9. PL/SQL 之 基础

    PL/SQL(Procedural Language extensions to SQL)是Oracle 对标准 SQL 语言的过程化扩展,是专门用于各种环境下对 Oracle 数据库进行访问和开发的 ...

随机推荐

  1. 微信小程序入门四: 导航栏样式、tabBar导航栏

    实例内容 导航栏样式设置 tabBar导航栏 实例一:导航栏样式设置 小程序的导航栏样式在app.json中定义. 这里设置导航,背景黑色,文字白色,文字内容测试小程序 app.json内容: { & ...

  2. tomcat8启动慢原因及解决办法

    tomcat8在linux下安装使用一段时间后启动非常慢,6分钟左右. 原因是一个随机数生成参数导致的. 处理如下: 修改catalina.sh .配置JRE使用非阻塞的Entropy Source ...

  3. git 生成公钥与私钥

    一. 第1步:创建SSH Key.在windows下查看[c盘->用户->自己的用户名->.ssh]下是否有id_rsa.id_rsa.pub文件,如果没有需要手动生成.打开git ...

  4. Bootstrap和IE何时能相亲相爱啊~

    公司新项目,嘚瑟了一下,用了用Bootstrap... ... 发现了一个小坑(也许只是对我而言)... ... 使用了2.x的Jquery,在chrome等高版本浏览器一切顺利... ... 然,3 ...

  5. 高级C/C++编译技术之读书笔记(五)之动态库版本控制

    最近有幸阅读了<高级C/C++编译技术>深受启发,该书深入浅出地讲解了构建过程(编译.链接)中的各种细节,从多个角度展示了程序与库文件或代码的集成方法,提出了面向代码复用和系统集成的软件架 ...

  6. 用JQuery写出登录弹出框

    类似百度的登录弹出框,可用jquery的fadeIn(),hide(),show(),slideDown()等动画函数实现,一下为html5 代码: <!DOCTYPE html> < ...

  7. 【spring源码学习】springMVC之映射,拦截器解析,请求数据注入解析,DispatcherServlet执行过程

    [一]springMVC之url和bean映射原理和源码解析 映射基本过程 (1)springMVC配置映射,需要在xml配置文件中配置<mvc:annotation-driven >  ...

  8. ORACLE 11G负载均衡测试

    Oracle 11g R2中,引入了SCAN(Single Client Access Name)的特性.该特性的好处在于,在数据库与客户端之间,添加了一层虚拟的服务层,就是所谓的SCAN IP以及S ...

  9. (转)Android代码混淆-添加了Gson遇到的问题

    折腾了好久.....郁闷 -_- 1.首先,project.properties里的配置文件变了,之前的项目一直都是在project.properties这个文件中添加一行proguard.confi ...

  10. (转)Socket开发时,Available为0,实际还有数据的问题

    本文转载自:http://blog.csdn.net/youbl/article/details/11067369 这段时间处理Socket通讯,比如文件传输,通常代码如下:string filena ...