文档库 最新最全的文档下载
当前位置:文档库 › 第19章 PLSQL中的控制结构

第19章 PLSQL中的控制结构

/****************第19章 PL/SQL中的控制结构*****************/

IF-THEN简单条件语句
DECLARE
v_salary NUMBER(6,2); -- 教师工资
v_ teaID VARCHAR2(15) := ' t156354'; -- 定义表示教师编号的变量并为其赋初值
BEGIN
/*查询指定教师编号的教师工资*/
SELECT salary INTO v_salary
FROM t_teacher
WHERE teaID= v_ teaID;
/*判断教师工资,如果小于3000则执行更新操作*/
IF v_salary < 3000 THEN
UPDATE t_teacher SET salary = v_salary+300 -- 修改教师工资
WHERE teaID =v_ teaID;
/*判断教师工资,如果大于3000则执行更新操作*/
IF v_salary >3000 THEN
UPDATE t_teacher SET salary = v_salary+100 -- 修改教师工资
WHERE teaID =v_ teaID;
END IF;
END;


IF-THEN-ELSE条件分支语句
DECLARE
TYPE char_table_type IS TABLE OF VARCHAR2(1)
char_tab1 char_table_type; -- 没有初始化嵌套表
char_tab2 char_table_type:= char_table_type() ; -- 初始化嵌套表
char_tab3 char_table_type:= char_table_type(‘a’,’b’,’c’) ; -- 初始化嵌套表
BEGIN
/*判断嵌套表char_tab1是否为NULL*/
IF char_tab1 IS NULL THEN
DBMS_OUTPUT.PUT_LINE (' char_tab1为NULL'); --显示嵌套表为NULL信息
ELSE
DBMS_OUTPUT.PUT_LINE(' char_tab1不为NULL'); --显示嵌套表不为NULL信息
End IF;
/*判断嵌套表char_tab2是否为NULL*/
IF char_tab2 IS NULL THEN
DBMS_OUTPUT.PUT_LINE (' char_tab2为NULL'); --显示嵌套表为NULL信息
ELSE
DBMS_OUTPUT.PUT_LINE(' char_tab2不为NULL'); --显示嵌套表不为NULL信息
End IF;
/*判断嵌套表char_tab3是否为NULL*/
IF char_tab3 IS NULL THEN
DBMS_OUTPUT.PUT_LINE (' char_tab3为NULL'); --显示嵌套表为NULL信息
ELSE
DBMS_OUTPUT.PUT_LINE(' char_tab3不为NULL'); --显示嵌套表不为NULL信息
End IF;
END;


IF-THEN-ELSEIF多重条件分支语句
DECLARE
v_salary NUMBER(6,2); -- 定义表示教师工资的变量
v_ deptID VARCHAR2(15); -- 定义表示教师所在院系的变量
BEGIN
/*根据输入的教师编号查询教师工资和所在院系
SELECT salary , deptID INTO v_salary, v_ deptID
FROM t_teacher
WHERE teaID= & teaID;
/*如果是计算机系,则将教师工资加上300*/
IF v_ deptID =10 THEN
UPDATE t_teacher SET salary = v_salary+300 -- 修改教师工资
WHERE teaID =& teaID;
/*如果是数学系,则将教师工资加上200*/
ELSEIF v_ deptID =15 THEN
UPDATE t_teacher SET salary = v_salary+200 -- 修改教师工资
WHERE teaID =& teaID;
/*如果是物理系,则将教师工资加上100*/
ELSE v_ deptID =18 THEN
UPDATE t_teacher SET salary = v_salary+100 -- 修改教师工资
WHERE teaID =& teaID;
END IF;
END;

嵌套的IF语句
ECLARE
v_salary NUMBER(6,2); -- 教师工资
v_ deptID VARCHAR2(15); -- 教师所在院系
BEGIN
/*根据输入的教师编号查询教师工资和所在院系*/

SELECT salary , deptID INTO v_salary, v_ deptID
FROM t_teacher
WHERE teaID= & teaID;
/*如果是计算机系,则将教师工资加上300*/
IF v_ deptID =10 THEN
UPDATE t_teacher SET salary = v_salary+300 -- 修改教师工资
WHERE teaID =& teaID;
ELSE
/*如果是数学系,则将教师工资加上200*/
IF v_ deptID =15 THEN
UPDATE t_teacher SET salary = v_salary+200 -- 修改教师工资
WHERE teaID =& teaID;
/*如果是物理系,则将教师工资加上100*/
ELSE v_ deptID =18 THEN
UPDATE t_teacher SET salary = v_salary+100 -- 修改教师工资
WHERE teaID =& teaID;
END IF;
END IF;
END;


实现等值比较的CASE语句
DECLARE
v_salary NUMBER(6,2); -- 教师工资
v_ deptID VARCHAR2(15); -- 教师所在院系
BEGIN
/*根据输入的教师编号查询教师工资和所在院系*/
SELECT salary , deptID INTO v_salary, v_ deptID
FROM t_teacher
WHERE teaID= & teaID;
CASE deptID
/*如果是计算机系,则将教师工资加上300*/
WHEN 10 THEN
UPDATE t_teacher SET salary = v_salary+300 -- 修改教师工资
WHERE teaID =& teaID;
/*如果是数学系,则将教师工资加上200*/
WHEN 15 THEN
UPDATE t_teacher SET salary = v_salary+200 -- 修改教师工资
WHERE teaID =& teaID;
/*如果是物理系,则将教师工资加上100*/
WHEN 18 THEN
UPDATE t_teacher SET salary = v_salary+100 -- 修改教师工资
WHERE teaID =& teaID;
ELSE
DBMS_OUTPUT.PUT_LINE (' 非计算机系、数学系或者物理系的教师');
END CASE ;
END;

设定标记的CASE语句
DECLARE
v_salary NUMBER(6,2); -- 教师工资
v_ deptID VARCHAR2(15); -- 教师所在院系
BEGIN
/*根据输入的教师编号查询教师工资和所在院系*/
SELECT salary , deptID INTO v_salary, v_ deptID
FROM t_teacher
WHERE teaID= & teaID;
<>
CASE deptID
/*如果是计算机系,则将教师工资加上300*/
WHEN 10 THEN
UPDATE t_teacher SET salary = v_salary+300 -- 修改教师工资
WHERE teaID =& teaID;
/*如果是数学系,则将教师工资加上200*/
WHEN 15 THEN
UPDATE t_teacher SET salary = v_salary+200 -- 修改教师工资
WHERE teaID =& teaID;
/*如果是物理系,则将教师工资加上100*/
WHEN 18 THEN
UPDATE t_teacher SET salary = v_salary+100 -- 修改教师工资
WHERE teaID =& teaID;
ELSE
DBMS_OUTPUT.PUT_LINE (' 非计算机系、数学系或者物理系的教师');
END CASE teacher_addsalary ;
END;

搜寻式CASE语句
DECLARE
v_salary NUMBER(6,2); -- 教师工资
v_ age VARCHAR2(15); -- 教师年龄
BEGIN
/*根据输入的教师编号查询教师工资和所在院系*/
SELECT salary , age INTO v_salary, v_age
FROM t_teacher
WHERE teaID= & teaID;
CASE
/*如果教师的年龄小于30,则将教师工资加上500*/
WHEN v_age <30 THEN
UPDATE t_teacher SET salary = v_sa

lary+500 -- 修改教师工资
WHERE teaID =& teaID;
/*如果教师的年龄小于40,则将教师工资加上300*/
WHEN v_age <40THEN
UPDATE t_teacher SET salary = v_salary+300 -- 修改教师工资
WHERE teaID =& teaID;
/*如果教师的年龄小于50,则将教师工资加上200*/
WHEN v_age <50THEN
UPDATE t_teacher SET salary = v_salary+200 -- 修改教师工资
WHERE teaID =& teaID;
ELSE
/*如果教师的年龄大于50,则将教师工资加上100*/
UPDATE t_teacher SET salary = v_salary+100 -- 修改教师工资
WHERE teaID =& teaID;
END CASE;
END;


LOOP循环语句
DECLARE
v_count INT:=1; -- 定义表示计数器的变量
v_sum INT:=0; -- 定义表示1到10加和的变量
BEGIN
LOOP
v_sum = v_ sum+1; -- 计算1到10的加和
EXIT WHEN v_count =10; -- 终止循环的条件
v_count:=v_count+1; -- 计数变量加1
END LOOP;
DBMS_OUTPUT.PUT_LINE (' v_sum ='|| v_sum); -- 显示加和信息
END;


WHILE -LOOP循环语句
DECLARE
v_count INT:=1; -- 定义表示计数器的变量
v_sum INT:=0; -- 定义表示1到10加和的变量
BEGIN
WHILE v_count<10 LOOP
v_sum = v_ sum +1; -- 计算1到10的加和
v_count:=v_count+1; -- 计数变量加1
END LOOP;
DBMS_OUTPUT.PUT_LINE (' v_sum ='|| v_sum); -- 显示加和信息
END;


FOR-LOOP循环语句
DECLARE
TYPE char_table_type IS TABLE OF VARCHAR2(1)
char_tab char_table_type:= char_table_type(‘a’,’b’,’c’,’d’,’e’) ; -- 初始化嵌套表
BEGIN
FOR v_count IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE (char_tab(v_count)||’ ’); -- 显示嵌套表中元素的信息
END LOOP;
END;


GOTO语句
DECLARE
v_count INT:=1; -- 定义表示计数器的变量
v_sum INT:=0; -- 定义表示1到10加和的变量
BEGIN
LOOP
v_sum = v_ sum+1; -- 计算1到10的加和
IF count =10 THEN
GOTO quit; -- 跳出循环
END IF;
v_count:=v_count+1; -- 计数变量加1
END LOOP;
<< quit >> -- quit标记
DBMS_OUTPUT.PUT_LINE (' v_sum ='|| v_sum); -- 显示加和信息
END;

NULL语句
DECLARE
v_salary NUMBER(6,2); -- 教师工资
v_ deptID VARCHAR2(15); -- 教师所在院系
BEGIN
/*根据输入的教师编号查询教师工资和所在院系*/
SELECT salary , deptID INTO v_salary, v_ deptID
FROM t_teacher
WHERE teaID= & teaID;
/*如果是计算机系,则将教师工资加上300*/
IF v_ deptID =10 THEN
UPDATE t_teacher SET salary = v_salary+300 -- 修改教师工资
WHERE teaID =& teaID;
/*如果是数学系,则将教师工资加上200*/
ELSEIF v_ deptID =15 THEN
UPDATE t_teacher SET salary = v_salary+200 -- 修改教师工资
WHERE teaID =& teaID;
/*如果是物理系,则将教师工资加上100*/
ELSEIF v_ deptID =18 THEN
UPDATE t_teacher SET salary = v_salary+100 -- 修改教师工资
WHERE teaID =& teaID;
ELSE
/

* 如果是非计算机系、数学或者是物理系的教师,则不执行任何操作*/
NULL;
END IF;
END;

相关文档
相关文档 最新文档