




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PL / SQL编程Oracle中的高级编程 PL/SQLSQL语句上的一个分支,但是PL/SQL只适合于oracleSQL语句没什么区别:按固定格式编写即可:declare变量begin执行SQL语句,也可以执行任何的输出代码end;/默认情况下,Oracle中的系统输出是关闭的,即,没有任何内容显示在屏幕上declarei number ;begin- 输出ii := 10 ;dbms_output.put_line(i = |i) ;end ;/set serveroutput on 打开系统输出完成以下功能:要求用户可以自己输入雇员ID,同时打印出个人全部信息在Oracle中使用&可以完成信息的输入select * from emp where empno=&empno ;希望编写一个PL/SQL块,PLSQL块之中编写用户输入信息的提示,同时,查找数据,要求输入一个雇员编号,将雇员的名字打印出来。declareeno number ;name varchar(20) ;begindbms_output.put_line(请输入雇员编号:) ;- 输出ieno := &empno ;- 最终结果要的是将名字取出,同时打印SELECT ename INTO name FROM emp WHERE empno=eno ;dbms_output.put_line(姓名是 = |name) ;end ;/在PLSQL之中如果没有合适的数据,则默认情况下会产生错误,与java没加try块一样declareBeginexceptionEnd;/declareeno number ;name varchar(20) ;begindbms_output.put_line(请输入雇员编号:) ;- 输出ieno := &empno ;- 最终结果要的是将名字取出,同时打印SELECT ename INTO name FROM emp WHERE empno=eno ;dbms_output.put_line(姓名是 = |name) ;exception- 匹配错误WHEN no_data_found THENdbms_output.put_line(没有这个员工) ;end ;/在PL/SQL之中同样包含了程序的控制语言:循环、条件判断循环 循环的初始条件 循环的结束条件 循环条件的变更LOOP循环的主体 (语句)Exit WHEN 条件 ;修改条件END LOOP ;现在打印110declare i number ;begini := 1 ;loopdbms_output.put_line(i = |i) ;exit when i=10 ;i := i + 1 ;end loop ;end ;/问题?给所有的员工工资增加10%。 游标如果只用循环,只能确定循环的个数 count函数LOOP . END LOOP循环至少执行了一次,先执行再判断WHILE LOOP先判断再执行declare i number ;begini := 1 ;while(i=10 thendbms_output.put_line(记录大于10条。) ;end if ;end;/If else . end ifdeclarei number ;beginselect count(empno) INTO i from emp ;if i=10 thendbms_output.put_line(记录小于10条。) ;elsedbms_output.put_line(记录大于10条。) ;end if ;end;/多条件分支If then .elsif then elsif else end if ;declarei number ;beginselect count(empno) INTO i from emp ;if i10 and i3000 thendbms_output.put_line(高工资,工资为:|s) ;elsif s=2000 and s3000 thendbms_output.put_line(中等工资,工资为:|s) ;elsif s5000 thenupdate emp set sal=5000 where empno = eno ;elseupdate emp set sal=sal*1.1 where empno=eno ;end if ;elsif dno=20 thenif s*1.25000 thenupdate emp set sal=5000 where empno = eno ;elseupdate emp set sal=sal*1.2 where empno=eno ;end if ;elsif dno=30 thenif s*1.35000 thenupdate emp set sal=5000 where empno = eno ;elseupdate emp set sal=sal*1.3 where empno=eno ;end if ;end if ;end;/Goto语句:跳转,程序跳转到某个程序段之中,但是程序段必须有一个声明,声明跳转的名称declarei number ;begin i := 2 ;if i=1 thengoto p1 ;elsegoto p2 ;end if ;dbms_output.put_line(p1点) ;dbms_output.put_line(p2点) ;end;/PL/SQL异常关于语句返回多行的错误情况declare - 在oracle中使用表名称.字段名称%type表示一个类型dno emp.deptno%type ;name emp.ename%type ;begindno := &deptno ;select ename into name from emp where deptno=dno ;exceptionwhen too_many_rows thendbms_output.put_line(返回的结果多于1行) ;when no_data_found thendbms_output.put_line(没有查询结果) ;end ;/If count0 thenraise myexp raise 跟 java中的 throw一样,表示抛出一个异常- 目的:插入数据,如果编号已经存在,则抛出一个错误,显示数据已经存在declaredno dept.deptno%type ;dna dept.dname%type ;dlo dept.loc%type ;myexp EXCEPTION ;coun number ;begin dbms_output.put_line(输入部门编号:) ;dno := &deptno ;- 确定该部门是否存在select count(deptno) into coun from dept where deptno=dno ;if coun0 thenraise myexp ;elsedbms_output.put_line(输入部门名称:) ;dna := &dname ;dbms_output.put_line(输入部门位置:) ;dlo := &loc ;INSERT INTO dept(deptno,dname,loc) values (dno,dna,dlo) ;DBMS_OUTPUT.put_line(部门信息添加成功!) ;end if ;exceptionwhen myexp thendbms_output.put_line(错误:部门编号已经存在!) ;end;/- 目的:插入数据,如果编号已经存在,则抛出一个错误,显示数据已经存在declaredno dept.deptno%type ;dna dept.dname%type ;dlo dept.loc%type ;myexp EXCEPTION ;coun number ;begin dbms_output.put_line(输入部门编号:) ;dno := &deptno ;dbms_output.put_line(输入部门名称:) ;dna := &dname ;dbms_output.put_line(输入部门位置:) ;dlo := &loc ;- 确定该部门是否存在select count(deptno) into coun from dept where deptno=dno ;if coun0 thenraise myexp ;elseINSERT INTO dept(deptno,dname,loc) values (dno,dna,dlo) ;DBMS_OUTPUT.put_line(部门信息添加成功!) ;end if ;exceptionwhen myexp thendbms_output.put_line(错误:部门编号已经存在!) ;end;/PL/SQL基础部分就这么多,下面全部是PL/SQL应用:游标、过程、函数游标EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO- - - - - - - - 7369 SMITH CLERK 7902 17-12月-80 800 20 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 7900 JAMES CLERK 7698 03-12月-81 950 30 7902 FORD ANALYST 7566 03-12月-81 3000 20 7934 MILLER CLERK 7782 23-1月 -82 1300 10是可以针对查询出的所有数据进行操作的,如果查询出的数据有50条,那么就可以对50条记录进行依次的操作,例如:为每一个员工的工资增加工资10 部门 10%20部门 20%30部门 30% coursefetch通过此语句可以使游标的指针向下移动游标中可以加入游标%FOUNDdeclareCURSOR mycur IS SELECT * FROM emp ;erow emp%ROWTYPE ;begin- 打开游标open mycur ;fetch mycur into erow ;while (mycur%FOUND) loopdbms_output.put_line(erow.empno| - |erow.ename) ;fetch mycur into erow ;end loop ;end;/declareCURSOR mycur IS SELECT * FROM emp ;erow emp%ROWTYPE ;begin- 打开游标open mycur ;fetch mycur into erow ;while (mycur%FOUND) loop- dbms_output.put_line(erow.empno| - |erow.ename) ;if erow.deptno=10 thenif erow.sal*1.15000 thenupdate emp set sal=5000 where empno = erow.empno ;elseupdate emp set sal=sal*1.1 where empno=erow.empno ;end if ;elsif erow.deptno=20 thenif erow.sal*1.25000 thenupdate emp set sal=5000 where empno = erow.empno ;elseupdate emp set sal=sal*1.2 where empno=erow.empno ;end if ;elsif erow.deptno=30 thenif erow.sal*1.35000 thenupdate emp set
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年奥特莱斯行业当前发展趋势与投资机遇洞察报告
- 2025年别墅行业当前发展趋势与投资机遇洞察报告
- 2025年额温枪行业当前发展现状及增长策略研究报告
- 2025年专业技术人员继续教育公需科目考试试题及答案
- (2025)辐射安全与防护培训考试题库及参考答案
- 2025年贵州省六盘水市国家公务员公共基础知识预测试题含答案
- 2025年保育员(高级)操作证考试试题及答案
- 2024年湖南街道解放里社区工作人员考试模拟试题及答案
- 摩托车基础知识培训课件
- 2025至2030年中国化妆工具套装市场竞争态势及行业投资潜力预测报告
- 2025年住培结业考试题库及答案
- 写字楼租赁合同法律风险及防范指南
- DB42∕T 2151-2023 应急物资储备库建设规范
- 精神患者家属健康教育讲座
- 养老机构医养结合交流合作总结范文
- 分包招采培训课件
- 神经刺激器行业深度调研及发展项目商业计划书
- 公司全员销售管理办法
- 考试真题及答案解析注册安全工程师
- 丙酮出入库管理制度
- 工贸行业重大事故隐患判定标准安全试题及答案
评论
0/150
提交评论