作者:gunnerliang_851 | 来源:互联网 | 2014-07-09 16:02
PL/SQL中流程控制语句和Oracle临时表[sql]createglobaltemporarytabletemp_dept(dnonumber,dnamevarchar2(10))oncommitdeleterows;insertintotemp_deptvalues(10,'...
[sql]
create global temporary table temp_dept
(dno number,
dname varchar2(10))
on commit delete rows;
insert into temp_dept values(10,'ABC');
drop table temp_dept
--Oracle的临时表和SQL Server的临时表概念不一样。
--SQL Server的临时表,是“临时”创建的表,用完就没有这个表了。
--而Oracle的“临时”表,实际上,表是“永久”的,数据是“临时”的。
--条件控制语句
--1、只有IF的条件控制语句
IF concition THEN
STATEMENTS;
END IF; www.2cto.com
--请看以下示例:
DECLARE
salaryAVG number(7,2);
empSalary number(7,2);
BEGIN
SELECT AVG(SAL) INTO salaryAVG FROM scott.emp;
SELECT SAL INTO empSalary FROM scott.emp WHERE EMPNO=&eno;
IF empSalary>salaryAVG THEN
DBMS_OUTPUT.PUT_LINE('该职工工资超过了平均线'||salaryAVG);
END IF;
END;
--2、IF、ELSE语句
IF condition THEN
STATEMENTS;
ELSE
STATEMENTS;
END IF;
--请看以下示例:
DECLARE
salaryAVG number(7,2);
empSalary number(7,2);
BEGIN www.2cto.com
SELECT AVG(SAL) INTO salaryAVG FROM scott.emp;
SELECT SAL INTO empSalary FROM scott.emp WHERE EMPNO=&eno;
IF empSalary>salaryAVG THEN
DBMS_OUTPUT.PUT_LINE('该职工工资超过了平均线'||salaryAVG);
ELSE
DBMS_OUTPUT.PUT_LINE('该职工工资没有超过平均线'||salaryAVG);
END IF;
END;
--3、IF ESLEIF ELSE语句
IF condition THEN
STATEMENTS;
ELSIF condition THEN
STATEMENTS;
ELSE
STATEMENTS;
END IF;
--请看以下示例:
DECLARE
empSalary number(7,2);
BEGIN
SELECT SAL INTO empSalary FROM scott.emp WHERE EMPNO=&eno;
IF empSalary<2000 THEN
DBMS_OUTPUT.PUT_LINE(&#39;需交税0元&#39;);
ELSIF empSalary<4000 THEN
DBMS_OUTPUT.PUT_LINE(&#39;需交税&#39;||(empSalary*0.15-175)||&#39;元&#39;);
ELSE
DBMS_OUTPUT.PUT_LINE(&#39;需交税&#39;||(empSalary*0.25-375)||&#39;元&#39;);
END IF;
END;
www.2cto.com
--4、CASE语句
--单一值进行比较:
CASE selector
WHEN expression1 THEN result1;
WHEN expression2 THEN result2;
WHEN expression3 THEN result3;
ELSE result4;
END CASE;
--请看以下示例:
DECLARE
eno NUMBER(2);
BEGIN
eno:=&no;
CASE eno
WHEN 10 THEN DBMS_OUTPUT.PUT_LINE(&#39;部门1&#39;);
WHEN 20 THEN DBMS_OUTPUT.PUT_LINE(&#39;部门2&#39;);
WHEN 30 THEN DBMS_OUTPUT.PUT_LINE(&#39;部门3&#39;);
ELSE DBMS_OUTPUT.PUT_LINE(&#39;没有该部门&#39;);
END CASE;
END;
--多重条件进行比较:
CASE www.2cto.com
WHEN expression1 THEN result1;
WHEN expression2 THEN result2;
WHEN expression3 THEN result3;
ELSE result4;
END CASE;
--二、循环控制语句
--1、LOOP循环
LOOP
STATEMENTS;
END LOOP;
--示例1:
DECLARE
a int;
BEGIN
a:=0;
LOOP
IF a=10 THEN
EXIT;
END IF;
DBMS_OUTPUT.PUT_LINE(a);
a:=a+1;
END LOOP;
END;
--示例2:
DECLARE
a int;
BEGIN
a:=0;
LOOP
EXIT WHEN a=10;
DBMS_OUTPUT.PUT_LINE(a);
a:=a+1;
END LOOP;
END;
www.2cto.com
--2、WHILE循环
--示例1:
DECLARE
a int;
BEGIN
a:=0;
WHILE a<10 LOOP
DBMS_OUTPUT.PUT_LINE(a);
a:=a+1;
END LOOP;
END;
--3、FOR循环
--示例1:
BEGIN
FOR a IN 0..9 LOOP
DBMS_OUTPUT.PUT_LINE(a);
END LOOP;
END;
--4、多重循环与标签
--示例1:
DECLARE
result INT;
BEGIN
<>
FOR i IN 1..10 LOOP
<>
FOR j IN 1..10 LOOP
result:=i*j;
EXIT outer WHEN result=10;
EXIT WHEN result=5;
DBMS_OUTPUT.PUT_LINE(&#39;内:&#39;||result);
END LOOP inner;
DBMS_OUTPUT.PUT_LINE(&#39;外:&#39;||result);
END LOOP outer;
DBMS_OUTPUT.PUT_LINE(&#39;最后:&#39;||result);
END; www.2cto.com
--三、顺序控制语句
--1、GOTO语句
--语法:GOTO labelName;
--2、NULL语句
--NULL;语句不执行任何操作,直接传递到下一条语句。