- 浏览: 547504 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (740)
- css (4)
- jquery (8)
- javascript (23)
- html (0)
- uml (0)
- 设计模式 (1)
- 开发工具 (14)
- json (4)
- struts 1.x (3)
- spring (3)
- hibernate (6)
- struts 2.x (17)
- JFreechart (0)
- j2se (48)
- jsp (9)
- flex (22)
- 找工作 (1)
- 技术杂谈 (18)
- 网络编程 (5)
- io流 (1)
- ORACLE (15)
- 报表 (3)
- extjs (11)
- jpbm (2)
- swing (5)
- jspereports (3)
- sql (1)
- linux (15)
- ps (1)
- storm (4)
- hbase (8)
- li (0)
- python (1)
- hive (3)
- 机器学习 (1)
- hdfs (1)
- elasticsearch (1)
- hadoop 2.2 (5)
- hadoop (1)
最新评论
-
Tristan_S:
这个有点意思
ASM -
starryskydog:
程序修改detail band部分的样式 如内容字体大小 ...
使用jasperReport实现动态表头 -
samwong:
Good, so usefule
使用YUI Compressor压缩CSS/JS -
gc715409742:
能够告诉我怎么在web项目中使用YUI Compressor? ...
使用YUI Compressor压缩CSS/JS -
JsonTeye:
您好! 我看你的代码,我现在也在做动态报表,实现功能由用户自己 ...
使用jasperreport动态生成pdf,excel,html
oracle PL/SQL的基本构成,结构控制语句,分支结构,选择结构,loop循环结构
分支结构
分支结构是最基本的程序结构,分支结构由IF语句实现。
使用IF语句,根据条件可以改变程序的逻辑流程。IF语句有如下的形式:
IF 条件1 THEN
语句序列1;
[ELSIF 条件2 THEN
语句序列2;
ELSE
语句序列n;]
END IF;
其中:
条件部分是一个逻辑表达式,值只能是真(TRUE)、假(FALSE)或空(NULL)。
语句序列为多条可执行的语句。
根据具体情况,分支结构可以有以下几种形式:
IF-THEN-END IF
IF-THEN-ELSE-END IF
IF-THEN-ELSIF-ELSE-END IF
1.IF-THEN-END IF形式
这是最简单的IF结构,练习如下:
【训练1】 如果温度大于30℃,则显示“温度偏高”。
输入并执行以下程序:
执行结果为:
说明:该程序中使用了布尔变量,初值为false,表示温度低于30℃。表达式v_temprature >30返回值为布尔型,赋给逻辑变量V_result。如果变量v_temprature的值大于30,则返回值为真,否则为假。V_result值为真就会执行IF到 END IF之间的输出语句,否则没有输出结果。
试修改温度的初值为25℃,重新执行,观察结果。
2.IF-THEN-ELSE-END IF形式
这种形式的练习如下:
【训练2】 根据性别,显示尊称。
输入并执行以下程序:
执行结果为:
说明:该程序根据性别显示尊称和问候,无论性别的值为何,总会有显示结果输出。如果V_sex的值不是‘男’和‘女’,那么输出结果会是什么?
【练习1】对以上程序进行补充修改,在ELSE部分嵌入一个IF结构,如果V_sex的值不是'女',则显示“朋友你好”。
3.IF-THEN-ELSIF-ELSE-END IF形式
这种形式的练习如下:
【训练3】 根据雇员工资分级显示税金。
输入并运行以下程序:
执行结果为:
说明:该程序根据工资计算7788号雇员应缴税金,不同工资级别的税率不同。
选择结构
CASE语句适用于分情况的多分支处理,可有以下三种用法。
1.基本CASE结构
语句的语法如下:
CASE 选择变量名
WHEN 表达式1 THEN
语句序列1
WHEN 表达式2 THEN
语句序列2
WHEN 表达式n THEN
语句序列n
ELSE
语句序列n+1
END CASE;
在整个结构中,选择变量的值同表达式的值进行顺序匹配,如果相等,则执行相应的语句序列,如果不等,则执行ELSE部分的语句序列。
以下是一个使用CASE选择结构的练习。
【训练1】 使用CASE结构实现职务转换。
输入并执行程序:
执行结果:
说明:以上实例检索雇员7788的职务,通过CASE结构转换成中文输出。
【练习1】将雇员号修改成其他已知雇员号,重新执行。
2.表达式结构CASE语句
在Oracle中,CASE结构还能以赋值表达式的形式出现,它根据选择变量的值求得不同的结果。
它的基本结构如下:
变量=CASE 选择变量名
WHEN 表达式1 THEN 值1
WHEN 表达式2 THEN 值2
WHEN 表达式n THEN 值n
ELSE值n+1
END;
【训练2】 使用CASE的表达式结构。
执行结果为:
说明:该CASE表达式通过判断变量v_grade的值,对变量V_result赋予不同的值。
3.搜索CASE结构
Oracle还提供了一种搜索CASE结构,它没有选择变量,直接判断条件表达式的值,根据条件表达式决定转向。
CASE
WHEN 条件表达式1 THEN
语句序列1
WHEN 条件表达式2 THEN
语句序列2
WHEN 条件表达式n THEN
语句序列n
ELSE
语句序列n+1
END CASE;
【训练3】 使用CASE的搜索结构。
执行结果为:
说明:此结构类似于IF-THEN-ELSIF-ELSE-END IF结构。本训练判断7788雇员的工资等级。
循环结构
循环结构是最重要的程序控制结构,用来控制反复执行一段程序。比如我们要进行累加,则可以通过适当的循环程序实现。PL/SQL循环结构可划分为以下3种:
* 基本LOOP循环。
* FOR LOOP循环。
* WHILE LOOP循环。
1.基本LOOP循环
基本循环的结构如下:
LOOP --循环起始标识
语句1;
语句2;
EXIT [WHEN 条件];
END LOOP; --循环结束标识
该循环的作用是反复执行LOOP与END LOOP之间的语句。
EXIT用于在循环过程中退出循环,WHEN用于定义EXIT的退出条件。如果没有WHEN条件,遇到EXIT语句则无条件退出循环。
【训练1】 求:12+32+52+...+152 的值。
输入并执行以下程序:
输出结果为:
说明:基本循环一定要使用EXIT退出,否则就会成为死循环。
【练习1】求1*2*3*4*...*10的值。
2.FOR LOOP循环
FOR循环是固定次数循环,格式如下:
FOR 控制变量 in [REVERSE] 下限..上限
LOOP
语句1;
语句2;
END LOOP;
循环控制变量是隐含定义的,不需要声明。
下限和上限用于指明循环次数。正常情况下循环控制变量的取值由下限到上限递增,REVERSE关键字表示循环控制变量的取值由上限到下限递减。
以下是FOR循环结构的练习。
【训练2】 用FOR循环输出图形。
输出结果为:
说明:该程序在循环中使用了循环控制变量I,该变量隐含定义。在每次循环中根据循环控制变量I的值,使用RPAD函数控制显示相应个数的“*”。
【练习2】为以上程序增加REVERSE关键字,观察执行结果。
【训练3】 输出一个空心三角形。
输出结果为:
说明:该实例采用循环和IF结构相结合,对第1行和第9行(I=1 OR I=9)执行同样的输出语句,其他行执行另外的输出语句。
【练习3】修改程序,输出一个实心三角形。
3.WHILE LOOP循环
WHILE循环是有条件循环,其格式如下:
WHILE 条件
LOOP
语句1;
语句2;
END LOOP;
当条件满足时,执行循环体;当条件不满足时,则结束循环。如果第一次判断条件为假,则不执行循环体。
以下是WHILE循环结构的练习。
【训练3】 使用WHILE 循环向emp表连续插入5个记录。
步骤1:执行下面的程序:
输出结果为:
步骤2:显示插入的记录:
输出结果为:
步骤3:删除插入的记录:
输出结果为:
说明:该练习使用WHILE循环向emp表插入5个新记录(雇员编号根据循环变量生成),并通过查询语句显示新插入的记录,然后删除。
4.多重循环
循环可以嵌套,以下是一个二重循环的练习。
【训练4】 使用二重循环求1!+2!+...+10!的值。
步骤1:第1种算法:
输出结果为:
步骤2:第2种算法:
输出结果为:
说明:第1种算法的程序内循环使用WHILE循环求阶层,外循环使用FOR循环求总和。第2种算法是简化的算法,根据是:n!=n*(n?1)!。
分支结构是最基本的程序结构,分支结构由IF语句实现。
使用IF语句,根据条件可以改变程序的逻辑流程。IF语句有如下的形式:
IF 条件1 THEN
语句序列1;
[ELSIF 条件2 THEN
语句序列2;
ELSE
语句序列n;]
END IF;
其中:
条件部分是一个逻辑表达式,值只能是真(TRUE)、假(FALSE)或空(NULL)。
语句序列为多条可执行的语句。
根据具体情况,分支结构可以有以下几种形式:
IF-THEN-END IF
IF-THEN-ELSE-END IF
IF-THEN-ELSIF-ELSE-END IF
1.IF-THEN-END IF形式
这是最简单的IF结构,练习如下:
【训练1】 如果温度大于30℃,则显示“温度偏高”。
输入并执行以下程序:
- SET SERVEROUTPUT ON
- DECLARE
- V_temprature NUMBER(5):=32;
- V_result BOOLEAN:=false;
- BEGIN
- V_result:= v_temprature >30;
- IF V_result THEN
- DBMS_OUTPUT.PUT_LINE('温度'|| V_temprature ||'度,偏高');
- END IF;
- END;
SET SERVEROUTPUT ON DECLARE V_temprature NUMBER(5):=32; V_result BOOLEAN:=false; BEGIN V_result:= v_temprature >30; IF V_result THEN DBMS_OUTPUT.PUT_LINE('温度'|| V_temprature ||'度,偏高'); END IF; END;
执行结果为:
温度32度,偏高 PL/SQL过程已成功完成。
说明:该程序中使用了布尔变量,初值为false,表示温度低于30℃。表达式v_temprature >30返回值为布尔型,赋给逻辑变量V_result。如果变量v_temprature的值大于30,则返回值为真,否则为假。V_result值为真就会执行IF到 END IF之间的输出语句,否则没有输出结果。
试修改温度的初值为25℃,重新执行,观察结果。
2.IF-THEN-ELSE-END IF形式
这种形式的练习如下:
【训练2】 根据性别,显示尊称。
输入并执行以下程序:
- SET SERVEROUTPUT ON
- DECLARE
- v_sex VARCHAR2(2);
- v_titil VARCHAR2(10);
- BEGIN
- v_sex:='男';
- IF v_sex ='男' THEN
- v_titil:='先生';
- ELSE
- v_titil:='女士';
- END IF;
- DBMS_OUTPUT.PUT_LINE(v_titil||'您好!');
- END;
SET SERVEROUTPUT ON DECLARE v_sex VARCHAR2(2); v_titil VARCHAR2(10); BEGIN v_sex:='男'; IF v_sex ='男' THEN v_titil:='先生'; ELSE v_titil:='女士'; END IF; DBMS_OUTPUT.PUT_LINE(v_titil||'您好!'); END;
执行结果为:
先生您好! PL/SQL 过程已成功完成。
说明:该程序根据性别显示尊称和问候,无论性别的值为何,总会有显示结果输出。如果V_sex的值不是‘男’和‘女’,那么输出结果会是什么?
【练习1】对以上程序进行补充修改,在ELSE部分嵌入一个IF结构,如果V_sex的值不是'女',则显示“朋友你好”。
3.IF-THEN-ELSIF-ELSE-END IF形式
这种形式的练习如下:
【训练3】 根据雇员工资分级显示税金。
输入并运行以下程序:
- SET SERVEROUTPUT ON
- DECLARE
- v_sal NUMBER(5);
- v_tax NUMBER(5,2);
- BEGIN
- SELECT sal INTO v_sal
- FROM emp
- WHERE empno=7788;
- IF v_sal >=3000 THEN
- V_tax:= v_sal*0.08;--税率8%
- ELSIF v_sal>=1500 THEN
- V_tax:= v_sal*0.06; --税率6%
- ELSE
- V_tax:= v_sal*0.04; --税率4%
- END IF;
- DBMS_OUTPUT.PUT_LINE('应缴税金:'||V_tax);
- END;
SET SERVEROUTPUT ON DECLARE v_sal NUMBER(5); v_tax NUMBER(5,2); BEGIN SELECT sal INTO v_sal FROM emp WHERE empno=7788; IF v_sal >=3000 THEN V_tax:= v_sal*0.08;--税率8% ELSIF v_sal>=1500 THEN V_tax:= v_sal*0.06; --税率6% ELSE V_tax:= v_sal*0.04; --税率4% END IF; DBMS_OUTPUT.PUT_LINE('应缴税金:'||V_tax); END;
执行结果为:
应缴税金:240 PL/SQL 过程已成功完成。
说明:该程序根据工资计算7788号雇员应缴税金,不同工资级别的税率不同。
选择结构
CASE语句适用于分情况的多分支处理,可有以下三种用法。
1.基本CASE结构
语句的语法如下:
CASE 选择变量名
WHEN 表达式1 THEN
语句序列1
WHEN 表达式2 THEN
语句序列2
WHEN 表达式n THEN
语句序列n
ELSE
语句序列n+1
END CASE;
在整个结构中,选择变量的值同表达式的值进行顺序匹配,如果相等,则执行相应的语句序列,如果不等,则执行ELSE部分的语句序列。
以下是一个使用CASE选择结构的练习。
【训练1】 使用CASE结构实现职务转换。
输入并执行程序:
- SET SERVEROUTPUT ON
- DECLARE
- v_job VARCHAR2(10);
- BEGIN
- SELECT job INTO v_job
- FROM emp
- WHERE empno=7788;
- CASE v_job
- WHEN 'PRESIDENT' THEN
- DBMS_OUTPUT.PUT_LINE('雇员职务:总裁');
- WHEN 'MANAGER' THEN
- DBMS_OUTPUT.PUT_LINE('雇员职务:经理');
- WHEN 'SALESMAN' THEN
- DBMS_OUTPUT.PUT_LINE('雇员职务:推销员');
- WHEN 'ANALYST' THEN
- DBMS_OUTPUT.PUT_LINE('雇员职务:系统分析员');
- WHEN 'CLERK' THEN
- DBMS_OUTPUT.PUT_LINE('雇员职务:职员');
- ELSE
- DBMS_OUTPUT.PUT_LINE('雇员职务:未知');
- END CASE;
- END;
SET SERVEROUTPUT ON DECLARE v_job VARCHAR2(10); BEGIN SELECT job INTO v_job FROM emp WHERE empno=7788; CASE v_job WHEN 'PRESIDENT' THEN DBMS_OUTPUT.PUT_LINE('雇员职务:总裁'); WHEN 'MANAGER' THEN DBMS_OUTPUT.PUT_LINE('雇员职务:经理'); WHEN 'SALESMAN' THEN DBMS_OUTPUT.PUT_LINE('雇员职务:推销员'); WHEN 'ANALYST' THEN DBMS_OUTPUT.PUT_LINE('雇员职务:系统分析员'); WHEN 'CLERK' THEN DBMS_OUTPUT.PUT_LINE('雇员职务:职员'); ELSE DBMS_OUTPUT.PUT_LINE('雇员职务:未知'); END CASE; END;
执行结果:
雇员职务:系统分析员 PL/SQL 过程已成功完成。
说明:以上实例检索雇员7788的职务,通过CASE结构转换成中文输出。
【练习1】将雇员号修改成其他已知雇员号,重新执行。
2.表达式结构CASE语句
在Oracle中,CASE结构还能以赋值表达式的形式出现,它根据选择变量的值求得不同的结果。
它的基本结构如下:
变量=CASE 选择变量名
WHEN 表达式1 THEN 值1
WHEN 表达式2 THEN 值2
WHEN 表达式n THEN 值n
ELSE值n+1
END;
【训练2】 使用CASE的表达式结构。
- SET SERVEROUTPUT ON
- DECLARE
- v_grade VARCHAR2(10);
- v_result VARCHAR2(10);
- BEGIN
- v_grade:='B';
- v_result:=CASE v_grade
- WHEN 'A' THEN '优'
- WHEN 'B' THEN '良'
- WHEN 'C' THEN '中'
- WHEN 'D' THEN '差'
- ELSE '未知'
- END;
- DBMS_OUTPUT.PUT_LINE('评价等级:'||V_result);
- END;
SET SERVEROUTPUT ON DECLARE v_grade VARCHAR2(10); v_result VARCHAR2(10); BEGIN v_grade:='B'; v_result:=CASE v_grade WHEN 'A' THEN '优' WHEN 'B' THEN '良' WHEN 'C' THEN '中' WHEN 'D' THEN '差' ELSE '未知' END; DBMS_OUTPUT.PUT_LINE('评价等级:'||V_result); END;
执行结果为:
评价等级:良 PL/SQL 过程已成功完成。
说明:该CASE表达式通过判断变量v_grade的值,对变量V_result赋予不同的值。
3.搜索CASE结构
Oracle还提供了一种搜索CASE结构,它没有选择变量,直接判断条件表达式的值,根据条件表达式决定转向。
CASE
WHEN 条件表达式1 THEN
语句序列1
WHEN 条件表达式2 THEN
语句序列2
WHEN 条件表达式n THEN
语句序列n
ELSE
语句序列n+1
END CASE;
【训练3】 使用CASE的搜索结构。
- SET SERVEROUTPUT ON
- DECLARE
- v_sal NUMBER(5);
- BEGIN
- SELECT sal INTO v_sal FROM emp
- WHERE empno=7788;
- CASE
- WHEN v_sal>=3000 THEN
- DBMS_OUTPUT.PUT_LINE('工资等级:高');
- WHEN v_sal>=1500 THEN
- DBMS_OUTPUT.PUT_LINE('工资等级:中');
- ELSE
- DBMS_OUTPUT.PUT_LINE('工资等级:低');
- END CASE;
- END;
SET SERVEROUTPUT ON DECLARE v_sal NUMBER(5); BEGIN SELECT sal INTO v_sal FROM emp WHERE empno=7788; CASE WHEN v_sal>=3000 THEN DBMS_OUTPUT.PUT_LINE('工资等级:高'); WHEN v_sal>=1500 THEN DBMS_OUTPUT.PUT_LINE('工资等级:中'); ELSE DBMS_OUTPUT.PUT_LINE('工资等级:低'); END CASE; END;
执行结果为:
工资等级:高 PL/SQL 过程已成功完成。
说明:此结构类似于IF-THEN-ELSIF-ELSE-END IF结构。本训练判断7788雇员的工资等级。
循环结构
循环结构是最重要的程序控制结构,用来控制反复执行一段程序。比如我们要进行累加,则可以通过适当的循环程序实现。PL/SQL循环结构可划分为以下3种:
* 基本LOOP循环。
* FOR LOOP循环。
* WHILE LOOP循环。
1.基本LOOP循环
基本循环的结构如下:
LOOP --循环起始标识
语句1;
语句2;
EXIT [WHEN 条件];
END LOOP; --循环结束标识
该循环的作用是反复执行LOOP与END LOOP之间的语句。
EXIT用于在循环过程中退出循环,WHEN用于定义EXIT的退出条件。如果没有WHEN条件,遇到EXIT语句则无条件退出循环。
【训练1】 求:12+32+52+...+152 的值。
输入并执行以下程序:
- SET SERVEROUTPUT ON
- DECLARE
- v_total NUMBER(5):=0;
- v_count NUMBER(5):=1;
- BEGIN
- LOOP
- v_total:=v_total+v_count**2;
- EXIT WHEN v_count=15;--条件退出
- v_count:=v_count+2;
- END LOOP;
- DBMS_OUTPUT.PUT_LINE(v_total);
- END;
SET SERVEROUTPUT ON DECLARE v_total NUMBER(5):=0; v_count NUMBER(5):=1; BEGIN LOOP v_total:=v_total+v_count**2; EXIT WHEN v_count=15;--条件退出 v_count:=v_count+2; END LOOP; DBMS_OUTPUT.PUT_LINE(v_total); END;
输出结果为:
680 PL/SQL 过程已成功完成。
说明:基本循环一定要使用EXIT退出,否则就会成为死循环。
【练习1】求1*2*3*4*...*10的值。
2.FOR LOOP循环
FOR循环是固定次数循环,格式如下:
FOR 控制变量 in [REVERSE] 下限..上限
LOOP
语句1;
语句2;
END LOOP;
循环控制变量是隐含定义的,不需要声明。
下限和上限用于指明循环次数。正常情况下循环控制变量的取值由下限到上限递增,REVERSE关键字表示循环控制变量的取值由上限到下限递减。
以下是FOR循环结构的练习。
【训练2】 用FOR循环输出图形。
- SET SERVEROUTPUT ON
- BEGIN
- FOR I IN 1..8
- LOOP
- DBMS_OUTPUT.PUT_LINE(to_char(i)||rpad('*',I,'*'));
- END LOOP;
- END;
SET SERVEROUTPUT ON BEGIN FOR I IN 1..8 LOOP DBMS_OUTPUT.PUT_LINE(to_char(i)||rpad('*',I,'*')); END LOOP; END;
输出结果为:
1* 2** 3*** 4**** 5***** 6****** 7******* 8******** PL/SQL 过程已成功完成。
说明:该程序在循环中使用了循环控制变量I,该变量隐含定义。在每次循环中根据循环控制变量I的值,使用RPAD函数控制显示相应个数的“*”。
【练习2】为以上程序增加REVERSE关键字,观察执行结果。
【训练3】 输出一个空心三角形。
- BEGIN
- FOR I IN 1..9
- LOOP
- IF I=1 OR I=9 THEN
- DBMS_OUTPUT.PUT_LINE(to_char(I)||rpad(' ',12-I,' ')||rpad('*',2*i-1,'*'));
- ELSE
- DBMS_OUTPUT.PUT_LINE(to_char(I)||rpad(' ',12-I,' ')||'*'||rpad(' ',I*2-3,' ')||'*');
- END IF;
- END LOOP;
- END;
BEGIN FOR I IN 1..9 LOOP IF I=1 OR I=9 THEN DBMS_OUTPUT.PUT_LINE(to_char(I)||rpad(' ',12-I,' ')||rpad('*',2*i-1,'*')); ELSE DBMS_OUTPUT.PUT_LINE(to_char(I)||rpad(' ',12-I,' ')||'*'||rpad(' ',I*2-3,' ')||'*'); END IF; END LOOP; END;
输出结果为:
1 * 2 * * 3 * * 4 * * 5 * * 6 * * 7 * * 8 * * 9 ***************** PL/SQL 过程已成功完成。
说明:该实例采用循环和IF结构相结合,对第1行和第9行(I=1 OR I=9)执行同样的输出语句,其他行执行另外的输出语句。
【练习3】修改程序,输出一个实心三角形。
3.WHILE LOOP循环
WHILE循环是有条件循环,其格式如下:
WHILE 条件
LOOP
语句1;
语句2;
END LOOP;
当条件满足时,执行循环体;当条件不满足时,则结束循环。如果第一次判断条件为假,则不执行循环体。
以下是WHILE循环结构的练习。
【训练3】 使用WHILE 循环向emp表连续插入5个记录。
步骤1:执行下面的程序:
- SET SERVEROUTPUT ON
- DECLARE
- v_count NUMBER(2) := 1;
- BEGIN
- WHILE v_count <6 LOOP
- INSERT INTO emp(empno, ename)
- VALUES (5000+v_count, '临时');
- v_count := v_count + 1;
- END LOOP;
- COMMIT;
- END;
SET SERVEROUTPUT ON DECLARE v_count NUMBER(2) := 1; BEGIN WHILE v_count <6 LOOP INSERT INTO emp(empno, ename) VALUES (5000+v_count, '临时'); v_count := v_count + 1; END LOOP; COMMIT; END;
输出结果为:
PL/SQL 过程已成功完成。
步骤2:显示插入的记录:
SELECT empno,ename FROM emp WHERE ename='临时';
输出结果为:
EMPNO ENAME ------------------ ---------- 5001 临时 5002 临时 5003 临时 5004 临时 5005 临时 已选择5行。
步骤3:删除插入的记录:
DELETE FROM emp WHERE ename='临时'; COMMIT;
输出结果为:
已删除5行。 提交完成。
说明:该练习使用WHILE循环向emp表插入5个新记录(雇员编号根据循环变量生成),并通过查询语句显示新插入的记录,然后删除。
4.多重循环
循环可以嵌套,以下是一个二重循环的练习。
【训练4】 使用二重循环求1!+2!+...+10!的值。
步骤1:第1种算法:
- SET SERVEROUTPUT ON
- DECLARE
- v_total NUMBER(8):=0;
- v_ni NUMBER(8):=0;
- J NUMBER(5);
- BEGIN
- FOR I IN 1..10
- LOOP
- J:=1;
- v_ni:=1;
- WHILE J<=I
- LOOP
- v_ni:= v_ni*J;
- J:=J+1;
- END LOOP;--内循环求n!
- v_total:=v_total+v_ni;
- END LOOP;--外循环求总和
- DBMS_OUTPUT.PUT_LINE(v_total);
- END;
SET SERVEROUTPUT ON DECLARE v_total NUMBER(8):=0; v_ni NUMBER(8):=0; J NUMBER(5); BEGIN FOR I IN 1..10 LOOP J:=1; v_ni:=1; WHILE J<=I LOOP v_ni:= v_ni*J; J:=J+1; END LOOP;--内循环求n! v_total:=v_total+v_ni; END LOOP;--外循环求总和 DBMS_OUTPUT.PUT_LINE(v_total); END;
输出结果为:
4037913 PL/SQL 过程已成功完成。
步骤2:第2种算法:
- SET SERVEROUTPUT ON
- DECLARE
- v_total NUMBER(8):=0;
- v_ni NUMBER(8):=1;
- BEGIN
- FOR I IN 1..10
- LOOP
- v_ni:= v_ni*I; --求n!
- v_total:= v_total+v_ni;
- END LOOP; --循环求总和
- DBMS_OUTPUT.PUT_LINE(v_total);
- END;
SET SERVEROUTPUT ON DECLARE v_total NUMBER(8):=0; v_ni NUMBER(8):=1; BEGIN FOR I IN 1..10 LOOP v_ni:= v_ni*I; --求n! v_total:= v_total+v_ni; END LOOP; --循环求总和 DBMS_OUTPUT.PUT_LINE(v_total); END;
输出结果为:
409114 PL/SQL 过程已成功完成。
说明:第1种算法的程序内循环使用WHILE循环求阶层,外循环使用FOR循环求总和。第2种算法是简化的算法,根据是:n!=n*(n?1)!。
发表评论
-
高级SQL优化
2012-12-08 23:31 850高级SQL优化(一) ... -
oracle PL/SQL的基本构成,块结构和基本语法要求,数据类型,变量定义,运算符和函数
2011-10-08 01:45 1065oracle PL/SQL的基本构成,块结构和基本语法要求, ... -
oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包
2011-10-08 01:42 1062oracle 创建,删除存储过 ... -
oracle 触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发器
2011-10-08 01:39 988oracle 触发器的种类和触发事件,DML触发器,DDL事 ... -
oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常
2011-10-08 01:31 838oracle 隐式游标,显示游标,游标循环,动态SELE ... -
触发器、内置程序包
2011-10-07 10:19 952触发器、内置程序包 1、技术目标 应用触发器 ... -
子程序、程序包
2011-10-07 10:18 1191子程序、程序包 1、技术目标 创建并使用子程序 ... -
游标的使用
2011-10-07 10:16 1388游标 1、技术目标 游标的使用 2、什么是游标 ... -
PL/SQL 的使用
2011-10-07 10:15 2138使用PL/SQL 1、技术目标 理解 PL/SQL ... -
同义词、序列、视图、索引
2011-10-07 10:12 1761同义词、序列、视图、 ... -
什么是Oracle归档模式
2011-10-06 23:31 875查看oracle数据库是否为归档模式 [1] 1.se ... -
什么是冷备份和热备份,有什么区别?
2011-10-06 23:19 962对于oracle数据库只有物 ... -
Oracle数据导入导出
2011-10-06 23:17 678Oracle数据导入导出imp/exp就相当于oracle ... -
ORACLE闪回技术
2011-10-06 23:17 7831 .误删了一部分数据 (delete) 想回恢复数据,ora ...
相关推荐
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...
3. **控制结构**:包括条件语句(如IF-THEN-ELSE)、循环(如WHILE、FOR、LOOP)以及分支结构(如CASE),允许编写复杂的业务逻辑。 4. **变量和常量**:PL/SQL支持各种数据类型,如NUMBER、VARCHAR2、DATE等,以及...
PL/SQL还支持多种SQL语句,如DML(数据操纵语言)的INSERT、UPDATE、DELETE、SELECT INTO,以及事务控制语句COMMIT、ROLLBACK和SAVEPOINT。不过,DDL(数据定义语言)如CREATE TABLE等需要以动态SQL的方式在PL/SQL中...
PL/SQL的出现弥补了这一点,它不仅允许开发者在Oracle数据库中执行SQL语句,还能够编写出具有高级程序控制结构的程序块,从而能够在数据库服务器上执行复杂的逻辑处理。 PL/SQL的特点包括适合于客户端/服务器环境...
3. **PL/SQL控制结构**:涵盖循环、分支、条件判断等控制流程的语法和示例。 4. **游标**:讲解如何使用游标处理结果集,并进行遍历和操作。 5. **过程和函数**:描述如何定义、调用和使用PL/SQL中的过程和函数。 ...
PL/SQL是Oracle数据库提供的过程化语言,它允许开发者编写包含SQL语句的程序块,用于执行复杂的数据库操作。PL/SQL由声明部分、执行部分和异常处理部分组成,支持流程控制、变量、函数、存储过程等编程元素。 二、...
2. **循环结构** - 包括`WHILE`循环、`FOR`循环和`LOOP`结构。`WHILE`循环在条件满足时持续执行,`FOR`循环通常用于遍历集合或数组,`LOOP`则提供一个无条件循环的框架。 3. **CASE语句** - 类似于其他编程语言的...
3. **控制流语句**:PL/SQL包含条件语句(IF...ELSIF...ELSE)、循环语句(WHILE、FOR、LOOP)以及分支语句(GOTO)等,使得能够编写复杂的逻辑流程。 4. **子程序和包**:PL/SQL允许定义函数、过程和包。函数返回...
Oracle PL/SQL是一种强大的编程语言,它将SQL的查询能力与过程性编程语言的控制结构相结合,用于在Oracle数据库环境中创建复杂的应用程序。本初级教程旨在帮助初学者掌握PL/SQL的基础知识,以便能有效地利用它来管理...
PL/SQL可以处理复杂的数据操作和业务逻辑,支持编程结构如循环、条件分支和异常处理等。 PL/SQL程序通常是由声明、执行和异常处理三部分组成的。声明部分用于定义变量、常量、类型和子程序等。执行部分包括执行SQL...
4. **控制结构**:包括条件语句(IF-THEN-ELSIF-ELSE)、循环(WHILE、FOR、LOOP)以及CASE表达式,用于实现程序逻辑的分支和循环。 5. **集合类型**:PL/SQL提供了数组(VARRAYs)和关联数组(INDEX BY TABLES),...
- **执行部分**:包含PL/SQL的控制流程语句,如循环、条件判断等,以及SQL语句。 - **异常处理部分**:捕获并处理运行时错误。 3. **PL/SQL变量和数据类型** - **变量声明**:可以声明各种内置数据类型,如...
PL/SQL的控制流程结构包括条件语句(IF-THEN-ELSIF-ELSE)、循环语句(WHILE、FOR、LOOP)和分支语句(GOTO),它们使得我们能够根据特定条件执行不同的操作。同时,PL/SQL还支持异常处理机制,通过BEGIN-EXCEPTION-...
流程控制语句包括条件语句(IF...THEN...ELSIF...ELSE...END IF)、循环语句(WHILE、FOR、LOOP)以及分支语句(GOTO),用于控制程序的执行流程。 1.6 **PL/SQL的异常处理** 异常处理机制允许开发者捕获并处理...
PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库提供的一个编程环境,用于处理SQL语句,执行复杂的业务逻辑。它支持循环、条件判断、异常处理等编程元素,使数据库管理与应用程序开发更为...
PL/SQL提供了丰富的控制结构,如条件语句、循环语句等。 ##### 二、条件控制:IF和CASE语句 - **IF语句**:基于条件执行不同的代码块。 - **CASE语句**:根据不同的条件执行相应的分支。 ##### 三、循环控制:LOOP...
PL/SQL支持三种循环结构:FOR循环、WHILE循环和LOOP循环。 - **FOR循环**: 按照固定的次数执行循环体。 - **WHILE循环**: 当条件为真时重复执行循环体。 - **LOOP循环**: 无限循环,必须在循环体内有退出条件。 ##...
- **循环结构**:使用`FOR`、`LOOP`和`WHILE`等循环语句。 - **分支选择**:使用`CASE`语句。 **3. 示例** - **循环结构示例**: ```sql DECLARE i NUMBER := 1; BEGIN WHILE i <= 10 LOOP DBMS_OUTPUT....
2. **执行部分**:包含PL/SQL语句,如条件判断、循环控制等。 3. **异常处理部分**:用于捕获和处理运行时错误。 ##### 数据类型 PL/SQL支持多种数据类型,包括但不限于: - **数值型**:如`NUMBER`、`INTEGER`。 -...
类似于传统编程语言,PL/SQL有分支(IF-THEN-ELSIF-ELSE)、循环(FOR、WHILE、LOOP)和条件判断(CASE)结构,使得程序逻辑控制更加灵活。 4. **PL/SQL的SQL嵌入** PL/SQL可以直接嵌入SQL语句,如SELECT、INSERT...