PL/SQL 经典总结(一)

------------------------------PL SQL
--1,PL/SQL块
--PL/SQL 块是在SQL 语言之上发展起来的一种应用,可以集中的处理各种复杂的SQL操作。
--组成:
 DECLARE:
 --声明部分
 BEGIN
 --编写主题
  EXCEPTION
 --捕获异常
 END ;
 /*
看一个简单的PL/SQL 块
DECLARE
 i NUMBER ;
BEGIN
 i := 30 ;
 DBMS_OUTPUT.put_line('I 的内容为:'||i) ;
END ;
*/
--此时,直接执行程序即可。
--执行之后发现没有任何的输出。因为Oracle 在系统设置中默认设置了输出不显示,如果要
--显示的话,输入以下命令:
 set serveroutput on
DECLARE
 i NUMBER ;
BEGIN
 i:= 1/0;
EXCEPTION
 when ZERO_DIVIDE then
  dbms_output.put_line('error');
END ;
/

--PL/SQL   块还可以接收用户的输入信息,例如:现在要求用户输入一个雇员编号,之后根
--据输入的内容进行查询,查询雇员的姓名。
--用户的输入信息使用“&”完成。
DECLARE
 eno NUMBER ;
 en VARCHAR2(30) ;
BEGIN
 -- 输入的信息保存在eno 里
 eno := &no ;
 -- 之后根据eno 的值,对数据库进行查询操作
 SELECT ename INTO en FROM emp WHERE empno=eno ;
 DBMS_OUTPUT.put_line('编号为:'||eno||'雇员的姓名为:'||en) ;
EXCEPTION
 WHEN no_data_found THEN
 DBMS_OUTPUT.put_line('没有此雇员') ;
END ;
/

DECLARE
 eno number;
 en varchar2(30);
 dn varchar2(20);
BEGIN
 --输入的信息保存在eno中
 eno := &no;
 --根据eno的值查询ename,dname
 select ename into en from emp where empno = eno;
 select dname into dn from dept where empno = eno and deptno=dept.deptno;
 Dbms_Output.put_line('编号为:'||eno||'的雇员的姓名为:'||en||'在'||ed||'部门上班。');
 Exception
  when no_data_found then
  Dbms_Output.put_line('没有此雇员');
  END;
/
--在以上的查询中再进一步:可以根据雇员的编号查出姓名及其领导的姓名和所在部门
--并进行显示
DECLARE
eno emp.empno%TYPE;
en emp.ename%TYPE;
mn emp.ename%TYPE;
dn dept.dname%TYPE;
BEGIN
--输入的雇员编号保存在eno中
eno:=&no;
--之后根据输入的固原编号进行查询
SELECT e.ename,m.ename,d.dname INTO en,mn,dn FROM emp e,dept d,emp m
WHERE e.empno=eno AND e.mgr = m.empno AND e.deptno = d.deptno;
Dbms_Output.put_line('编号为'||eno||'的雇员的姓名为:'||en);
Dbms_Output.put_line('编号为'||eno||'的上级的姓名为:'||mn);
Dbms_Output.put_line('编号为'||eno||'的雇员的部门为:'||dn);
EXCEPTION
 WHEN no_data_found THEN
 Dbms_Output.put_line('没有此雇员!');
 END;
/

----------------------------------------Loop循环(do...while)
--PL/SQL中也包含了循环分支等条件控制语句
/*Loop 循环(do…while)
格式:
 LOOP
 循环的语句 ;
 EXIT WHEN   终止条件 ;
 循环条件必须更改 ;
 END LOOP ;
*/
--循环输出1~10。
DECLARE
 cou NUMBER ;
BEGIN
 --必须给一个初始值
 cou:=1;
 Loop
  DBMS_OUTPUT.put_line('cou='||cou);
  EXIT WHEN cou>=10;
  cou:=cou+1;
  END LOOP;
END;
/

-----------------------------------while循环
/*
格式:
 while(判断循环的条件) loop
 循环的语句 ;
 循环条件的改变 ;
 End loop ;
*/
--使用while修改上面的程序
DECLARE
cou NUMBER;
BEGIN
 cou:=1;
 WHILE(cou<=10)LOOP
 DBMS_OUTPUT.put_line('cou='||cou);
 cou:=cou+1;
 END LOOP;
END;
/

----------------------------------for循环
/*
格式:
 FOR  变量名称in  变量的初始值..结束值LOOP
 循环语句 ;
 END LOOP ;
*/
DECLARE
 cou NUMBER;
 BEGIN
 for cou in 1..10 LOOP
 DBMS_OUTPUT.put_line('cou='||cou);
END LOOP;
END;

-----------------------------------if语句
/*
 条件判断
格式:
 IF 条件THEN
 满足条件时,执行此语句
 END IF ;
*/
DECLARE
 cou NUMBER;
 BEGIN
 cou:=11;
 if(cou>0)THEN
  cou:=cou-1;
  DBMS_OUTPUT.put_line('cou='||cou);
  END if;
 END;
 
------------------------------if.....else语句
/*
如果if满足了则执行else
*/
DECLARE
cou1 NUMBER;
cou2 NUMBER;

 BEGIN
  cou2:=&cou1;
 IF cou2>10 THEN
  DBMS_OUTPUT.put_line('cou2='||cou2||'大于10.');
 ELSE
  DBMS_OUTPUT.put_line('cou2='||cou2||'小于或等于10.');
 END IF;
END;

-----------------------------if....elseif.......else;
DECLARE
cou1 NUMBER;
cou2 NUMBER;

 BEGIN
  cou2:=&cou1;
 IF cou2>10 THEN
  DBMS_OUTPUT.put_line('cou2='||cou2||'大于10.');
 ELSE IF cou2<10 THEN
  DBMS_OUTPUT.put_line('cou2='||cou2||'小于10.');
 ELSE
  DBMS_OUTPUT.put_line('cou2='||cou2||'等于10.');
  END IF;
 END IF;
END;

-----------------------------goto语句 无条件跳转语句
DECLARE
eno emp.empno%type;
sal emp.sal%type;
BEGIN
 eno:=&en;
 SELECT sal INTO sal FROM emp WHERE empno=eno;
 IF sal>3500 THEN
 goto po1;
 ELSIF sal>2000 THEN
 goto po2;
 else
 goto po3;
 END IF;
 <<po1>>
 DBMS_OUTPUT.put_line('高工资。。。。');
 <<po2>>
 DBMS_OUTPUT.put_line('中工资。。。。');
 <<po3>>
 DBMS_OUTPUT.put_line('低工资。。。。');
END;
/
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值