PL/SQL编程(一)

1   PL SQL概念

PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。

PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,

所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,

通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。

2    开发工具

(1) SQL Plus: Oracle公司的工具

(2) PL/SQL Developer: 一个独立的集成开发环境(IDE)

3    PL/SQL 编程分类

1 过程(存储过程)

2 函数

3 触发器

4 包

5 其它

4    注释

单行注释:-要注释的内容

多行注释:/*要注释的内容*/

5    标识符规范(仅供参考)

变量:用v作为前缀

常量:用c作为前缀

游标:用cursor为后缀

异常:用e作为前缀

6    PL/SQL块结构

声明(定义)部分:使用关键字 declare 定义变量、游标等等

执行部分:以 begin 关键字开始

异常控制部分: 捕获执行中产生的错误

结束部分:以end关键字结尾

例1:

SQL>set serveroutput on --打开输出选项

begin

dbms_output.putline(‘Hello PL/SQL !‘);

end;

例2

SQL>declare

v_ename varchar2(5);    --定义一个字符串变量

begin

select ename into v_ename from emp where empno = &no;

dbms_output.put_line(‘姓名:‘ || v_ename);

end;

说明:& 表示要从控制台输入的变量

例3

SQL>declare  v_ename varchar2(5);    --定义一个字符串变量

begin

select ename into v_ename from emp where empno = &no;

dbms_output.put_line(‘姓名:‘ || v_ename);

--下面是异常处理

exception

when no_data_found then

dbms_output.put_line(‘出现错误!‘);

end;

注意:no_data_found 表示一种异常,即如果用户输入的参数"&no" 查不出数据

7    创建存储过程

SQL>create procedure sp_proName1(spName varchar2,newSalary number) is

begin

update emp set sal =newSalary where ename = spName

end;

8    执行存储过程

语法:exec 存储过程名称(参数);

SQL>exec sp_proName1(‘OBAMA‘,10000);

9    创建函数

语法:create function 函数名称(参数) return 返回值;

10    调用函数(SQL Plus)

    语法:(1) var 变量1 类型;                        // 定义变量用来保存调用函数后返回的结果

(2) call 函数名称(参数) into:变量1;         // 使用call关键字调用函数,并将函数返回的结果保存在变量1中

(3) print 变量1;                            // 显示结果

11    包的创建

包:函数和存储过程的组合

语法: create package 包名称 is procedure 存储过程名称(参数);

function 函数名称(参数) return 变量;

end;

12    创建包体(Package Body)

语法:create package body 包体名称 is

...            //存储过程创建过程

...            //函数创建过程

end;

13 调用包的函数和存储过程

调用存储过程

语法:call 包名.存储过程名称(参数);

调用函数

语法:call 包名.函数名称(参数);

注意: call关键字也可以换成 exec

14    触发器

触发器是指隐含执行的存储过程。当定义触发器时必须指定触发的事件和触发的操作。

使用create trigger 来创建触发器

15    游标

        (暂略)

16    if语句的使用

SQL> create or replace procedure Name1(spName varchar2) is

v_salary emp.sal%type;

begin

select sal into v_salary from emp where ename = spName;

if v_salary < 3000 then

update emp set sal=sal * 1.2 where ename = spName;

end if;

end;

17    if...then...else语句

SQL> create or replace procedure Name1(spName varchar2) is

v_salary emp.sal%type;

begin

select sal into v_salary from emp where ename = spName;

if v_salary < 3000 then

update emp set sal=sal * 1.2 where ename = spName;

else

update emp set sal=sal * 1.05 where ename = spName;

end if;

end;

18    使用loop循环

SQL> create or replace procedure Name1(spName varchar2) is

v_num :=1;

begin

loop

insert into users values (v_num,spname);

exit whrn v_num=10;

v_num := v_num + 1;

end loop;

end;

注意:在这里“:=”表示赋值的意思

19    使用 while 循环  

 SQL>
create or replace procedure Name1(spName varchar2) is

v_num :=1;

begin

while v_num <10 loop

insert into users values (v_num,spname);

v_num := v_num + 1;

end loop;

end;

PL/SQL编程(一)

时间: 2024-08-05 23:40:35

PL/SQL编程(一)的相关文章

pl/sql编程基础

PL/SQL 1.过程.函数.触发器是pl/sql编写的 2.过程.函数.触发器是存放在oracle数据库中的 3.pl/sql是非常强大的过程化语言 4.过程.函数.触发器可以在java程序中调用 pl/sql编写能节省一点时间就是提高了性能(量大),java直接调用数据库存放的过程,解析时间就节省下来了,提高了性能 模块化的设计思想----->存储过程 网络传输(java程序中编写的sql语言),直接调用数据库的过程节省了传输量 提高安全性(存储过程避免了数据库信息的泄漏) 缺点: 移植性不

ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE PL/SQL编程之八:把触发器说透 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的.   本篇主要内容如下: 6.1 引言 6.2 创建函数 6.3 存储过程 6.3.1 创建过程 6.3.2 调用存储过程 6.3.3 AUTHID 6.3.4 

[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)                [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]

[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)

原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) 得到了大家的强力支持与建议,万分感谢.接下来介绍下一篇:oracle pl/sql异常处理部分,还望大家一定

【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人品牌. 本是成书的,但后来做其他事了,就无偿的贡献出来,被读者夸其目前为止最“实在.经典”的写ORACLE PL/SQL编程的文章-! 觉得对你有帮助,请留言与猛点推荐,谢谢. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) 本篇主要内容如下:第一章 PL/S

[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)

原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的. 本篇主要内容如下: 4.1 游标概念 4.1.1 处理显式游标 4.1.2 处理

[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ——通过知识共享树立个人品牌. 继上五篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不

[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)

原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下) ——通过知识共享树立个人品牌. 继上六篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程之四:把游标说透(

[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) ——通过知识共享树立个人品牌.   继上七篇:            [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)            [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之

ORACLE PL/SQL编程之八(一): 把触发器说透

本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INSTEAD OF)触发器 8.2.3 创建系统事件触发器 8.2.4 系统触发器事件属性 8.2.5 使用触发器谓词 8.2.6 重新编译触发器 8.3 删除和使能触发器 8.4 触发器和数据字典 8.5   数据库触发器的应用举例 触发器是许多关系数据库系统都提供的一项技术.在O