--_______________________________________流程控制__________________________________________________
--1 IF (表达式) then 执行的语句 end if; (end if :结束IF) -- 判断满足一种情况的 条件
--2 IF (表达式) then 执行的语句 else 执行的语句 end if; --判断满足两种情况的 条件
--3 IF (表达式) then 执行的语句 elseif 执行的语句 elseif 执行的语句 .... end if; --判断满足多种情况的 条件
--示例1
declare
v_emp emp%rowtype; --自定义一个行类型
v_dept_avgsal number(7,2); --定义个平均工资的变量
begin
v_emp.empno:=&empno; --接受用户的输入 保存到v_emp.empno
--为v_emp 赋值
select sal,comm,deptno into v_emp.sal,v_emp.comm,v_emp.deptno from emp where empno=v_emp.empno;
--输出没有更新前的信息
DBMS_output.put_line('雇员编号;'||v_emp.empno);
Dbms_Output.put_line('雇员更新前的奖金:'|| NVL(v_emp.comm,0));
--查询但前员工编号所在部门的平均工资
select avg(sal) into v_dept_avgsal form emp where deptno=v_emp.deptno;
--判断 该雇员的奖金
if v_emp.comm is null then --判断奖金为 null
--更改该雇员的奖金为 所属部门的平均工资的0.1倍
update emp set comm=v_dept_avgsal*0.1 where empno=v_emp.empno;
else --判断奖金不为 null
if v_emp.sal<v_dept_avgsal then --判断员工的工资 < 部门的平均工资
--更改该员工的奖金 += 部门平均工资的0.1倍
update emp set comm=comm+v_dept_avgsal*0.1 where empno=v_emp.empno;
else --员工工资 > 部门的平均工资
--更改员工的奖金 += 该员工工资的0.1倍
update emp set comm=comm+v_emp.sal*0.1 where empno=v_emp.empno;
end if; --结束 内部的IF
end if; --结束 外部的IF
--查询更改后的奖金 值重新赋值给 v_emp
select comm into v_emp.comm from emp whre empno=v_emp.empno;
--输出来
Dbms_Output.put_line('雇员更新后的奖金:'||v_emp.comm);
Exception --异常
when no_data_found then
Dbms_Output.put_line('该雇员不存在!');
END;
--4 Case (表达式) when (条件表达式结果1 )then 执行语句1 when(条件表达式2) then 执行的语句 2 else 执行的语句 n end Caase; (end case 结束 Case)
--示例1
declare
v_deptno number(2):=&deptno;
begin
case v_deptno
when 10 then
update emp set comm= case when comm is null then 100 else comm*1.1 end where deptno=v_deptno;
when 20 then
update emp set comm= case when comm is null then 200 else comm*1.2 end where deptno=v_deptno;
when 30 then
update emp set comm= case when comm is null then 300 else comm*1.3 end where deptno=v_deptno;
else
DBMS_output.put_line('不存在该部门!');
end Case;
End;
--5 Case when (条件表达式1) then 执行语句1 when (条件表达式2) then 执行语句2 else 执行语句n end case;
--示例1
declare
v_empno number(4):=&empno;
v_sal number(7,2);
begin
select sal into v_sal from emp where empno=v_empno;
case
when v_sal<2000 then
DBMS_output.put_line('一级工资');
when v_sal>=2000 and v_sal<3000 then
DBMS_output.put_line('二级工资');
when v_sal>=3000 and v_sal<4000 then
DBMS_output.put_line('三级工资');
when v_sal>=4000 and v_sal<5000 then
DBMS_output.put_line('四级工资');
else
DBMS_output.put_line('五级工资');
END CASE;
Exception
when no_data_found then
DBMS_output.put_line('输入的员工的编号不正确!');
END;
--__________________________________________循环控制_______________________________________________
--1. LOOP 语句段; exit [when 条件表达式] end Loop; ===>至少执行一次 相当于 do{} while(条件表达式);
--示例1
create table rnd_temp_table --创建表
(
id number(4) primary key; -- 定义Id
value varchar2(10) not null
)
declare
type Rnd_varray_type id varray(4) of varchar2(20); --定义一个长度为4的 varrray 的数据类型
-- 生命一个 varray 类型的变量 并使用构造函数赋值
v_rnd_varray Rnd_varray_type:=Rnd_varray_type('dalias','chicago','boston','newyork');
v_loop number(2):=1; --循环控制变量 (还可以是 其他数据类型)
v_index number(1); --随机数的下标
begin
LOOP
if v_loop=6 then --当 满足条件是 退出
exit;
end if;
v_index:=floor(dbms_random.value(1,5)); -- 使用 函数 产生 1<=n<5 (1,2,3,4) 的随机数 对应 v_rnd_varray 中的下标
insert into rnd_temp_table value(v_loop,v_rnd_varray(v_index)); --向表中添加一条数据
v_loop:=v_loop+1; --循环控制变量++;
END loop;
END;
--2. while 条件表达式 LOOP 执行语句 end LOOP ;(只有条件表达式 为 true时候 就 运行)
--示例1
select ID 编号,shopname 商品名称,stock 库存量,day_salse_volulme 日销售量,max_stock 最大库存量,min_stock 最小库存量 from tb_stock; --创建一张tb_stock表用于 while循环掩饰
declare
v_stock tb_stock%rowtype; --定义一个行类型
v_n number(4):=0; --保存所需的天数
begin
v_stock.Id=&Id; --接受用户的输入
select stock,day_salse_colume,min_stock into v_stock.stock,v_stock.day_sales_volume,v_stock.min_stock from tb_stock where id=v_stock.Id;
while v_stock.stock>v_stock.min_stock
Loop
v_stock.stock:=v_stock.stock-v_stock.day_salse_colume;
v_n=v_n+1;
end Loop;
DBMS_output.put_line('商品编号:'||v_stock.ID);
DBMS_outpyt.pyt_line('采购期限:'||v_n);
Exception
when no_data_found then
DBMS_output.put_line('请输入正确的商品编号!');
END;
--for 循环变量 IN [reverse] 初始值表达式 ... 终值表达式 LOOP 执行语句 END LOOP;
-- 示例1
declare
type Dept_table_type is table of dept%rowtype index by binary_integer; --定义一个行类型
v_dept_table Dept_table_type; --定义一个行类型的变量
begin
--赋值
select deptno,dname into v_dept_table(0).deptno, v_dept_table(0).dname from dept where deptno=10;
select deptno,dname into v_dept_tabel(1).deptno, v_dept_table(1).dname from dept where deptno=20;
select deptno,dname into v_dept_table(2).deptno, v_dept_table(2).dname from dept where deptno+30;
--输出
DBMS_output.put_line('部门编号 部门名称');
for i in 0 ...v_dept_table.count-1 --循环遍历 rowType 的变量
loop
DBMS_output.put_line(v_dept_table(i).deptno||' '||v_dept_table(i).dname);
END LOOP; --结束循环
END;
分享到:
相关推荐
5、高效性:通过学习资源中的循环控制方法,能够显著提高PL/SQL程序的运行效率和逻辑清晰度。 6、灵活性:丰富的控制策略使您能够根据不同业务需求灵活调整循环行为。 7、实用性强:所有示例均基于实际业务场景,...
Oracle PL/SQL 结构控制语句是 PL/SQL 语言中的一种基本结构,用于控制程序的逻辑流程。结构控制语句可以分为两种:分支结构和循环结构。在本篇文章中,我们将详细介绍 Oracle PL/SQL 结构控制语句的使用方法和示例...
在给定的代码片段中,我们首先看到了一个简单的PL/SQL循环示例,它使用了基本的循环控制结构。这里,`i`被初始化为1,并在循环中递增,直到`i`等于10为止。每次循环,都会使用`dbms_output.put_line`函数输出`i`的...
通过循环结构,可以有效地控制程序的流程,并且能够简化复杂的逻辑处理。本文将对提供的Oracle循环示例进行详细解析,并结合实际应用场景深入探讨其工作原理。 #### 二、代码分析 ##### 1. 声明部分 ```sql ...
4. **流程控制**:在PL/SQL中,流程控制包括条件语句(如IF-THEN-ELSIF-ELSE,CASE语句)和循环结构(如WHILE,FOR)。这些结构用于根据条件执行不同的代码块或重复执行某些任务。 5. **异常处理**:Oracle中的异常...
2. 使用`BEGIN-END`块编写PL/SQL逻辑,包括控制结构(如IF-THEN-ELSE,CASE,FOR循环)和异常处理(如`BEGIN-EXCEPTION-END`块)。 3. 如何在程序包中定义全局变量,以及如何在子程序之间共享这些变量。 4. 创建程序...
综合上述,这个例子展示了如何使用Kettle工具从Oracle数据库中进行循环分页查询,将数据转化为TXT格式,然后通过FTP上传到远程服务器的整个流程,涉及数据的抽取、转换和加载,以及作业的管理和文件的处理。...
2. **流程控制**:PL/SQL支持IF-THEN-ELSE、CASE语句进行条件判断,以及WHILE、FOR循环进行迭代操作。理解如何有效地使用这些控制结构,可以编写出逻辑清晰的程序。 3. **集合操作**:Oracle 12c引入了新的集合处理...
Oracle采购应付循环是Oracle E-Business Suite中的一个关键模块,主要负责管理企业的采购流程和应付账款处理。在Release 11i版本中,这个模块提供了全面的业务流程自动化,帮助用户有效地管理供应商关系、采购订单、...
CREATE PROCEDURE 语句是用来创建 Oracle 存储过程的语句,变量声明是用来声明变量的语句,控制语句是用来控制流程的语句,循环语句是用来循环执行的语句。 关于 Oracle 存储过程的若干问题备忘 在学习 Oracle ...
- **特性**:PL/SQL是对SQL的一种扩展,它支持多种数据类型,例如大对象类型和集合类型,并且可以在其中使用条件语句和循环等控制结构。 - **应用**:它可以用来创建存储过程、触发器和程序包,从而为SQL语句的执行...
在Oracle数据库中,同义词(Synonyms)和视图(Views)是两种非常重要的对象,它们都提供了数据访问和管理的便捷方式。下面将详细解释这两种概念以及它们在实际应用中的作用。 **同义词** 同义词是Oracle数据库提供...
PLSQL提供了多种流程控制结构,如IF-THEN-ELSE、CASE语句用于条件判断,WHILE和FOR循环用于迭代,GOTO语句进行无条件跳转,以及LOOP结构用于自定义循环。 四、SQL操作 PLSQL可以直接嵌入SQL语句,进行数据查询、...
4. PL/SQL:Oracle的Procedural Language/SQL是SQL的一个扩展,允许编写包含控制结构的程序块,如循环、条件语句和异常处理。 - `DECLARE`:声明变量、游标、记录类型等。 - `BEGIN`/`END`:定义PL/SQL程序块的...
PL/SQL提供了一系列流程控制语句,包括条件判断(IF-THEN-ELSIF-ELSE)、循环(WHILE、FOR)、CASE语句等,这些语句使开发者能够根据特定条件执行不同的代码块。 六、PL/SQL游标 游标是用于遍历查询结果集的一种...
* 流程控制语句包括条件控制语句和循环控制语句 * PL/SQL是Oracle数据库的过程语言 * Oracle数据库的逻辑结构是指数据库的组织和存储方式 重要概念 * 数据查询语言(DQL) * 数据定义语言(DDL) * 数据操纵语言...
综合这三个主题,Oracle数据库开发者可以通过学习和熟练运用存储过程、函数和PL/SQL,提升数据库应用程序的性能和可维护性。了解并掌握游标管理,可以帮助开发者更加高效地处理大数据量的情况。这些知识对于任何涉及...
在实际应用中,Oracle SQL和PL/SQL通常结合使用,SQL负责数据的CRUD操作,而PL/SQL则负责更复杂的业务逻辑和流程控制。对于数据库管理员和开发者来说,掌握这两门语言是高效管理和开发Oracle数据库的关键。 文件...
PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库提供的一种过程化编程语言,它结合了SQL的查询功能和传统编程语言的控制结构,使得数据库管理和应用程序开发更为高效和灵活。...