当前位置: 代码迷 >> SQL >> PL/SQL 经典小结(一)
  详细解决方案

PL/SQL 经典小结(一)

热度:82   发布时间:2016-05-05 14:24:00.0
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 onDECLARE 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;/--在以上的查询中再进一步:可以根据雇员的编号查出姓名及其领导的姓名和所在部门--并进行显示DECLAREeno 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 mWHERE 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修改上面的程序DECLAREcou 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*/DECLAREcou1 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;DECLAREcou1 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语句 无条件跳转语句DECLAREeno 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;/
?

?

  相关解决方案