以下是小编帮大家整理的PL/SQL流程控制数据库教程,本文共8篇,欢迎大家收藏分享。本文原稿由网友“周絮周翊然Tz”提供。
篇1:PL/SQL流程控制数据库教程
PL/SQL程序中的流程控制语句借鉴了许多高级语言的流程控制思想,但又有自己的特点,
PL/SQL流程控制数据库教程
。条件控制
下面通过实例介绍条件控制语句的使用。
1. if..then..end if条件控制
采用if..then..end if条件控制的语法结构如图9.15所示。
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序判断两个整数变量的大小。 执行结果如图9.16所示。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
set serveroutput on
declare
number1 integer:=90;
number2 integer:=60;
begin
if number1>=number2 then
dbms_output.put_line('number1大于等于number2');
end if;
end;
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【配套程序位置】:第9章\\ conditioncontrol1.sql。
2. if..then..else..end if条件控制
采用if..then..else..end if条件控制的语法结构如图9.17所示。
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序判断两个整数变量的大小,输出不同的结果。执行结果如图9.18所示。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
set serveroutput on
declare
number1 integer:=80;
number2 integer:=90;
begin
if number1>=number2 then
dbms_output.put_line('number1大于等于number2');
else
dbms_output.put_line('number1小于number2');
end if;
end;
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【配套程序位置】:第9章\\ conditioncontrol2.sql。
3. if嵌套条件控制
采用if嵌套条件控制的语法结构如图9.19所示。
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序判断两个整数变量的大小,输出不同的结果。
执行结果如图9.20所示。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
set serveroutput on
declare
number1 integer:=80;
number2 integer:=90;
begin
if number1<=number2 then
if number1=number2 then
dbms_output.put_line('number1等于number2');
else
dbms_output.put_line('number1小于number2');
end if;
else
dbms_output.put_line('number1大于number2');
end if;
end;
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【配套程序位置】:第9章\\ conditioncontrol3.sql。
循环控制
循环结构是按照一定逻辑条件执行一组命令,PL/SQL中有4种基本循环结构,在它们基础上又可以演变出许多嵌套循环控制,这里介绍最基本的循环控制语句。
1. loop..exit..end loop循环控制
采用loop..exit..end loop循环控制的语法结构如图9.21所示。
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序将number1变量每次加1,一直到等于number2为止,统计输出循环次数。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
set serveroutput on
declare
number1 integer:=80;
number2 integer:=90;
i integer:=0;
begin
loop
number1:=number1+1;
if number1=number2 then
exit;
else
i:=i+1;
end if;
end loop;
dbms_output.put_line('共循环次数:'||to_char(i));
end;
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
执行结果如图9.22所示,
【配套程序位置】:第9章\\loopcontrol1.sql。
2. loop..exit..when..end loop循环控制
采用loop..exit..when..end loop循环控制的语法结构与图9.21所示结构类似。
exit when实际上就相当于
if 条件 then
exit;
end if;
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序将number1变量每次加1,一直到等于number2为止,统计输出循环次数。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
set serveroutput on
declare
number1 integer:=80;
number2 integer:=90;
i integer:=0;
begin
loop
number1:=number1+1;
i:=i+1;
exit when number1=number2;
end loop;
dbms_output.put_line('共循环次数:'||to_char(i));
end;
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
执行结果如图9.23所示。
【配套程序位置】:第9章\\loopcontrol2.sql。
when循环控制结束条件比采用if的条件控制结束循环次数多1次。
3. while..loop..end loop循环控制
采用loop..exit..when..end loop循环控制的语法如下。
while 条件 loop
执行语句段;
end loop;
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序将number1变量每次加1,一直到等于number2为止,统计输出循环次数。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
set serveroutput on
declare
number1 integer:=80;
number2 integer:=90;
i integer:=0;
begin
while number1 number1:=number1+1; i:=i+1; end loop; dbms_output.put_line('共循环次数:'||to_char(i)); end; DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 执行结果如图9.24所示。 【配套程序位置】:第9章\\whilecontrol.sql。 4. for..in..loop..end循环控制 采用for..in..loop..end循环控制的语法如下。 for 循环变量 in [reverse] 循环下界..循环上界 loop 循环处理语句段; end loop; 在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序通过循环变量I来控制number1增加次数,输出结果。执行结果如图9.25所示。 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD set serveroutput on declare number1 integer:=80; number2 integer:=90; i integer:=0; begin for i in 1..10 loop number1:=number1+1; end loop; dbms_output.put_line('number1的值:'||to_char(number1)); end; DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 【配套程序位置】:第9章\\forcontrol.sql。
篇2:PL/SQL过程数据库教程
要想利用PL/SQL程序完成比较完整的数据库任务,需要进一步学习一些高级设计要素的内容,前面编写执行的PL/SQL程序,共同的特点是没有名称,只能存储为文件,然后通过执行文件的方式执行,因此称为无名块。与此对应的是在PL/SQL中也引入了高级程序设计的一些概念,其中最重要的就是过程。
过程就是高级程序设计语言中的模块的概念,将一些内部联系的命令组成一个个过程,通过参数在过程之间传递数据是模块化设计思想的重要内容。
创建过程
1. 过程的语法结构
完整的过程结构如下:
create or replace procedure 过程名 as
声明语句段;
begin
执行语句段;
exception
异常处理语句段;
end;
2. 过程的特点
过程是有名称的程序块,as关键词代替了无名块的declare。
3. 创建过程实例
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序将创建名为tempprocedure的过程,create是创建过程的标识符,replace表示若同名过程存在将覆盖原过程。该过程定义了一个变量,其类型和testtable数据表中的currentdate字段类型相同,都是日期型,将数据表中的recordnumber字段为88的currentdate字段内容送入变量中,然后输出结果。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
set serveroutput on
create or replace procedure tempuser.tempprocedure as
tempdate tempuser.testtable.currentdate%type;
begin
select currentdate
into tempdate
from testtable
where recordnumber=88;
dbms_output.put_line(to_char(tempdate));
end;
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【配套程序位置】:第9章\\ createprocedure.sql。
执行结果如图9.41所示。
查询过程
登录【企业管理器】,在【管理目标导航树】里选择【网络】/【数据库】/【myoracle.mynet】/【方案】/【过程】/【TEMPUSER】选项,出现如图9.42所示的创建好的过程。
修改过程
(1)在【SQLPlus Worksheet】的【菜单栏】选择【文件】/【打开】菜单命令,将创建过程的createprocedure.sql文件调出进行修改,修改完毕后重新执行创建过程。
(2)在【企业管理器】里选中要修改的过程,用鼠标右键单击,在出现的快捷菜单里选择【查看/编辑详细资料】选项,如图9.43所示。
(3)出现如图9.44所示的编辑过程的【一般信息】选项卡。在【文本编辑区】可以编辑该过程,单击“确定”按钮将更新该过程,单击“编译”按钮将编译该过程的 PL/SQL 源代码,使该过程可以在数据库中存储和执行。
执行过程
要执行创建的过程,必须通过主程序来调用过程。
在【SQLPlus Worksheet】中执行下列PL/SQL程序,执行结果如图9.45所示。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
set serveroutput on
begin
tempprocedure;
end;
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【配套程序位置】:第9章\\ executeprocedure.sql,
在Oracle中,创建好的过程可以被任何程序调用。
带参数的过程
前面介绍的过程没有参数,主程序和过程没有数据的传递,下面介绍带参数的过程的设计和使用。
1. 参数类型
在PL/SQL过程中,可以有3种类型的参数。
in参数:读入参数,主程序向过程传递参数值。
out参数:读出参数,过程向主程序传递参数值。
in out 参数:双向参数,过程与主程序双向交流数据。
2. 定义带参数的过程
在下面的PL/SQL程序代码中,将创建三个调用参数。
tempdeptno:类型为in,与scott.dept.deptno的类型一致,为数值型。
tempdname:类型为out,与scott.dept.dname的类型一致,为字符型。
temploc:类型为in out,与scott.dept.loc类型一致,为字符型。
创建两个过程内参数。
loc1:与scott.dept.loc的类型一致,为字符型。
dname1:与scott.dept.dname的类型一致,为字符型。
该带参数的过程的功能是从数据表scott.dept中寻找deptno字段等于tempdeptno调用参数值的dname和loc字段,和其他字符组合,送给两个出口参数。
以system用户名、sysdba身份登录【SQLPlus Worksheet】,执行下列PL/SQL程序,执行结果如图9.46所示。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
Set serveroutput on
create or replace procedure scott.tempprocedure(
tempdeptno in scott.dept.deptno%type,
tempdname out scott.dept.dname%type,
temploc in out scott.dept.loc%type)as
loc1 scott.dept.loc%type;
dname1 scott.dept.dname%type;
begin
select loc into loc1
from scott.dept
where deptno=tempdeptno;
select dname into dname1
from scott.dept
where deptno=tempdeptno;
temploc:='地址:'||loc1;
tempdname:='姓名'||dname1;
end;
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【配套程序位置】:第9章\\ createscottprocedure.sql。
调用参数分割用“,”号。
3. 使用带参数的过程
在主程序中的实际参数和过程中的形式参数的传递有很多种办法,这里推荐读者采用一一对应的办法,按对应的位置传递参数。要求实际参数和形式参数在数据类型和位置排列上做到完全一致。
在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序调用带参数的过程scott.tempprocedure,实际参数为(10,’’,’’)
执行结果如图9.47所示。
【配套程序位置】:第9章\\ executescottprocedure.sql。
读者可以尝试改变参数值,然后测试过程执行结果。
篇3:PL/SQL Developer数据库教程
PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等,
PL/SQL Developer数据库教程
。PL/SQL Developer功能十分全面,大大缩短了程序员的开发周期。强大的PL/SQL编辑器,完善的Debugger调试器(需要Oracle 7.3.4或以上版本)询问创建SQL视窗命令视窗报告视窗项目浏览器过程优化HTML手册Non-PL/SQL目标模板目录比较用户目标输出用户目标工具lug-In扩展Multi-threaded IDE简单的安装(本软件由allroundautomations中国区总代理www.softwarecn.com 授权发布),这是一个第三方的开发软件,非常好用,对于刚入门的oracle初学者来说,是个不错的选择,前一段时间做oracle数据转换,一直用的是这个东东,鼎立推荐!
下载地址:www.newhua.com/soft/4902.htm
篇4:PL/SQL流程控制语句
,
跟在IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT退出循环。
例:使用循环语句打印 1 - 100.(三种方式)
1). LOOP ... EXIT WHEN ... END LOOP
declare--初始化条件v_i number(3) := 1;beginloop--循环体dbms_output.put_line(v_i);--循环条件exit when v_i = 100;--迭代条件v_i := v_i + 1;end loop;end;
2). WHILE ... LOOP ... END LOOP
declare--初始化条件v_i number(3) := 1;begin--循环条件while v_i <= 100 loop--循环体dbms_output.put_line(v_i);--迭代条件v_i := v_i + 1;end loop;end;
3).
beginfor i in 1 .. 100 loopdbms_output.put_line(i);end loop;end;
例: 综合使用 if, while 语句, 打印 1 - 100 之间的所有素数
(素数: 有且仅用两个正约数的整数, 2, 3, 5, 7, 11, 13, ...).
declarev_i int := 2;v_j int := 2;v_flag boolean := false;beginwhile v_i < 100 loopv_j := 2;while v_j ④标号和GOTO PL/SQL中GOTO语句是无条件跳转到指定的标号去的意思。语法如下: GOTO label; . . . . . . < 例:打印1——100的自然数,当打印到50时,跳出循环,输出“打印结束” (方法一) beginfor i in 1..100 loopdbms_output.put_line(i);if(i = 50) thengoto label;end if;end loop;<
- 全检索的应用数据库教程2023-04-20
- 右外连接数据库教程2022-12-11
- sql数据库备份和恢复常用操作2025-06-03
- 解决Oracle被锁定的妙招数据库教程2023-09-24
- 远程管理sqlserver的注册方法数据库教程2022-12-25
- 逻辑备份与恢复实战数据库教程2023-02-10
- oracle8i在redhat7.1~7.3下的安装数据库教程2024-04-19
- 说一说 Oracle库的Hang数据库教程2023-03-15
- 浅析SQL Server数据库的性能优化性能调优2025-07-26
- 如何获得当前数据库的SCN值数据库教程2023-08-03