--条件控制
--IF 语句
/* IF <布尔表达式> THEN
PL/SQL 和 SQL语句
ELSE
其它语句
END IF;*/
declare
v_number number:=&no; --声明变量键盘输入
begin
if (v_number=10) then ---oracle = //java ==
dbms_output.put_line('yes');
else
dbms_output.put_line('no');
end if;
end;
/*IF <布尔表达式> THEN
PL/SQL 和 SQL语句
ELSIF < 其它布尔表达式> THEN
其它语句
ELSIF < 其它布尔表达式> THEN
其它语句
ELSE
其它语句
END IF;*/
select job from emp;
--多重if语句
declare
v_job emp.job%type:=&job;
begin
if(v_job='ANALYST') then
dbms_output.put_line('分析师');
elsif(v_job='CLERK') then
dbms_output.put_line('职员');
elsif(v_job='MANAGER') then
dbms_output.put_line('经理');
elsif(v_job='SALESMAN') then
dbms_output.put_line('销售员');
else
dbms_output.put_line('董事');
end if;
end;
--CASE 语句
---------格式一---------
CASE 条件表达式
WHEN 条件表达式结果1 THEN
语句段1
WHEN 条件表达式结果2 THEN
语句段2
......
WHEN 条件表达式结果n THEN
语句段n
[ELSE 条件表达式结果]
END;
--查询语句
select ename, job,
case job
when 'ANALYST' then '分析师'
when 'CLERK' then '职员'
when 'MANAGER' then '经理'
when 'SALESMAN' then '销售员'
else '董事'
end
from emp;
---------格式二---------
CASE
WHEN 条件表达式1 THEN
语句段1
WHEN 条件表达式2 THEN
语句段2
......
WHEN 条件表达式n THEN
语句段n
[ELSE 语句段]
END CASE;
--
declare
v_job emp.job%type:=&job;
begin
case
when v_job='ANALYST' then
dbms_output.put_line('分析师');
when v_job='CLERK' then
dbms_output.put_line('职员');
when v_job='MANAGER'then
dbms_output.put_line('经理');
when v_job='SALESMAN' then
dbms_output.put_line('销售员');
else
dbms_output.put_line('董事');
end case; --必须加入case
end;
循环控制
--LOOP 循环
/* LOOP
要执行的语句;
EXIT WHEN <条件语句> --条件满足,退出循环语句
END LOOP; */
--1-10
declare
v_number number:=1;
begin
loop
dbms_output.put_line(v_number); ---输出结果
v_number:=v_number+1; --改变初值
exit when v_number>10; --退出结束
end loop;
end;
WHILE 循环
/*WHILE <布尔表达式> LOOP
要执行的语句;
END LOOP;*/
declare
v_number number:=1;
begin
while v_number<=10 loop
dbms_output.put_line(v_number); ---输出结果
v_number:=v_number+1; --改变初值
end loop;
end;
FOR 循环
/*[<<循环标签>>]
FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP
要执行的语句;
END LOOP [循环标签];*/
declare
begin
for i in 1..10 loop
dbms_output.put_line(i); ---输出结果
end loop;
end;
--1-10偶数?
begin
for i in 1..10 loop
--判断
if(i mod 2=0) then
dbms_output.put_line(i); ---输出结果
end if;
end loop;
end;
--1-10偶数的和
declare
v_sum number:=0; --和的初始值
begin
for i in 1..10 loop
--判断
if(i mod 2=0) then
v_sum:=v_sum+i;
end if;
end loop;
dbms_output.put_line(v_sum); ---输出结果
end;
-- 4.为员工SCOTT增加工资,每次增加100元,直到10000元停止。
select * from emp;
--复制新表
create table empnews as select * from emp ;
select * from empnews where ename='SCOTT';
drop table empnews;
declare
v_sal empnews.sal%type;
begin
select sal into v_sal from empnews where ename='SCOTT';
dbms_output.put_line(v_sal); ---3000
--循环
while v_sal<10000 loop
--更新语句
update empnews set sal = v_sal+100 where ename='SCOTT';
--查询
select sal into v_sal from empnews where ename='SCOTT';
end loop;
end;
--顺序控制 exit,continue 11g (没有break;而是用exit哦!)
--10g
--GOTO 语句
DECLARE
V_counter NUMBER := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter);
V_counter := v_counter + 1;
IF v_counter > 10 THEN
GOTO labelOffLOOP; --退出循环 break
END IF;
END LOOP;
<<labelOffLOOP>>
DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter);
END;
DECLARE
v_i NUMBER := 0;
v_s NUMBER := 0;
BEGIN
<<label_1>>
v_i := v_i + 1;
IF v_i <= 10 THEN
v_s := v_s + v_i;
GOTO label_1; --continue 继续循环
END IF;
DBMS_OUTPUT.PUT_LINE(v_s);
END;
--NULL 语句
select * from emp;
DECLARE
v_empno emp.empno%TYPE:=&no;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
SELECT ename,sal INTO v_ename, v_sal FROM emp WHERE empno=v_empno;
IF v_sal <= 3000 THEN
DBMS_OUTPUT.PUT_LINE(v_ename||'的工资是'||v_sal);
ELSE
NULL; ---可以用 null 语句来说明“不用做任何事情”的意思,相当于一个占位符或不执行任何操作的空语句,可以使某些语句变得有意义,提高程序的可读性,保证其他语句结构的完整性和正确性。
END IF;
END;
--IF 语句
/* IF <布尔表达式> THEN
PL/SQL 和 SQL语句
ELSE
其它语句
END IF;*/
declare
v_number number:=&no; --声明变量键盘输入
begin
if (v_number=10) then ---oracle = //java ==
dbms_output.put_line('yes');
else
dbms_output.put_line('no');
end if;
end;
/*IF <布尔表达式> THEN
PL/SQL 和 SQL语句
ELSIF < 其它布尔表达式> THEN
其它语句
ELSIF < 其它布尔表达式> THEN
其它语句
ELSE
其它语句
END IF;*/
select job from emp;
--多重if语句
declare
v_job emp.job%type:=&job;
begin
if(v_job='ANALYST') then
dbms_output.put_line('分析师');
elsif(v_job='CLERK') then
dbms_output.put_line('职员');
elsif(v_job='MANAGER') then
dbms_output.put_line('经理');
elsif(v_job='SALESMAN') then
dbms_output.put_line('销售员');
else
dbms_output.put_line('董事');
end if;
end;
--CASE 语句
---------格式一---------
CASE 条件表达式
WHEN 条件表达式结果1 THEN
语句段1
WHEN 条件表达式结果2 THEN
语句段2
......
WHEN 条件表达式结果n THEN
语句段n
[ELSE 条件表达式结果]
END;
--查询语句
select ename, job,
case job
when 'ANALYST' then '分析师'
when 'CLERK' then '职员'
when 'MANAGER' then '经理'
when 'SALESMAN' then '销售员'
else '董事'
end
from emp;
---------格式二---------
CASE
WHEN 条件表达式1 THEN
语句段1
WHEN 条件表达式2 THEN
语句段2
......
WHEN 条件表达式n THEN
语句段n
[ELSE 语句段]
END CASE;
--
declare
v_job emp.job%type:=&job;
begin
case
when v_job='ANALYST' then
dbms_output.put_line('分析师');
when v_job='CLERK' then
dbms_output.put_line('职员');
when v_job='MANAGER'then
dbms_output.put_line('经理');
when v_job='SALESMAN' then
dbms_output.put_line('销售员');
else
dbms_output.put_line('董事');
end case; --必须加入case
end;
循环控制
--LOOP 循环
/* LOOP
要执行的语句;
EXIT WHEN <条件语句> --条件满足,退出循环语句
END LOOP; */
--1-10
declare
v_number number:=1;
begin
loop
dbms_output.put_line(v_number); ---输出结果
v_number:=v_number+1; --改变初值
exit when v_number>10; --退出结束
end loop;
end;
WHILE 循环
/*WHILE <布尔表达式> LOOP
要执行的语句;
END LOOP;*/
declare
v_number number:=1;
begin
while v_number<=10 loop
dbms_output.put_line(v_number); ---输出结果
v_number:=v_number+1; --改变初值
end loop;
end;
FOR 循环
/*[<<循环标签>>]
FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP
要执行的语句;
END LOOP [循环标签];*/
declare
begin
for i in 1..10 loop
dbms_output.put_line(i); ---输出结果
end loop;
end;
--1-10偶数?
begin
for i in 1..10 loop
--判断
if(i mod 2=0) then
dbms_output.put_line(i); ---输出结果
end if;
end loop;
end;
--1-10偶数的和
declare
v_sum number:=0; --和的初始值
begin
for i in 1..10 loop
--判断
if(i mod 2=0) then
v_sum:=v_sum+i;
end if;
end loop;
dbms_output.put_line(v_sum); ---输出结果
end;
-- 4.为员工SCOTT增加工资,每次增加100元,直到10000元停止。
select * from emp;
--复制新表
create table empnews as select * from emp ;
select * from empnews where ename='SCOTT';
drop table empnews;
declare
v_sal empnews.sal%type;
begin
select sal into v_sal from empnews where ename='SCOTT';
dbms_output.put_line(v_sal); ---3000
--循环
while v_sal<10000 loop
--更新语句
update empnews set sal = v_sal+100 where ename='SCOTT';
--查询
select sal into v_sal from empnews where ename='SCOTT';
end loop;
end;
--顺序控制 exit,continue 11g (没有break;而是用exit哦!)
--10g
--GOTO 语句
DECLARE
V_counter NUMBER := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter);
V_counter := v_counter + 1;
IF v_counter > 10 THEN
GOTO labelOffLOOP; --退出循环 break
END IF;
END LOOP;
<<labelOffLOOP>>
DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter);
END;
DECLARE
v_i NUMBER := 0;
v_s NUMBER := 0;
BEGIN
<<label_1>>
v_i := v_i + 1;
IF v_i <= 10 THEN
v_s := v_s + v_i;
GOTO label_1; --continue 继续循环
END IF;
DBMS_OUTPUT.PUT_LINE(v_s);
END;
--NULL 语句
select * from emp;
DECLARE
v_empno emp.empno%TYPE:=&no;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
SELECT ename,sal INTO v_ename, v_sal FROM emp WHERE empno=v_empno;
IF v_sal <= 3000 THEN
DBMS_OUTPUT.PUT_LINE(v_ename||'的工资是'||v_sal);
ELSE
NULL; ---可以用 null 语句来说明“不用做任何事情”的意思,相当于一个占位符或不执行任何操作的空语句,可以使某些语句变得有意义,提高程序的可读性,保证其他语句结构的完整性和正确性。
END IF;
END;