PLSQL语言基础.docx_第1页
PLSQL语言基础.docx_第2页
PLSQL语言基础.docx_第3页
PLSQL语言基础.docx_第4页
PLSQL语言基础.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle 11g 源代码第9章 PL/SQL语言基础9.1 顺序结构【9-1】set serveroutput ondeclare a int:=100; b int:=200; c number;beginc:=(a+b)/(a-b);dbms_output.put_line(c);exceptionwhen zero_divide thendbms_output.put_line(除数不许为零!);end;/【9-2】set serveroutput ondeclarevar_name 专业.专业名%type; -声明与“专业名”列类型相同的变量var_job 专业.学制%type; -声明与“学制”列类型相同的变量begin select 专业名,学制 into var_name,var_job from 专业 where 专业号=001; -检索数据,并保存在变量中 dbms_output.put_line(“|var_name|”专业的学制是:|var_job); -输出变量的值end;/【9-3】set serveroutput ondeclare type emp_type is record -声明record类型emp_type ( var_ename char(8), -定义字段/成员变量 var_job varchar(10), var_sal number ); empinfo emp_type; -定义变量begin select 姓名,职务,工资 -检索数据 into empinfo from 教工 where 职工号=81001; dbms_output.put_line(教工“|trim(empinfo.var_ename)|”的职务是:|empinfo.var_job |,工资是:|empinfo.var_sal); /*输出雇员信息*/end;【9-4】set serveroutput ondeclare rowVar_emp 部门%rowtype;-定义能够存储emp表中一行数据的变量rowVar_empbegin select * into rowVar_emp from 部门 where 部门号=01; -检索数据 dbms_output.put_line(部门号:|rowVar_emp.部门号|,部门名:|rowVar_emp.部门名| ,办公地点:|rowVar_emp.办公地点|,办公电话:|rowVar_emp.办公电话);end;/6.2 分支结构【9-5】set serveroutput ondeclarevar_name1 varchar2(50);-定义两个字符串变量var_name2 varchar2(50);beginvar_name1:=East; -给两个字符串变量赋值var_name2:=xiaoke;if length(var_name1) = 56 then -比较年龄是否大于56岁 dbms_output.put_line(您可以申请退休了!); -输出可以退休信息 else dbms_output.put_line(您小于56岁,不可以申请退休了!); -输出不可退休信息 end if;end;/【9-7】set serveroutput ondeclaremonth int:=10;-定义整形变量并赋值begin if month = 0 and month = 4 and month = 7 and month = 10 and month = 12 then -判断冬季dbms_output.put_line(这是冬季); elsedbms_output.put_line(对不起,月份不合法!); end if;end;/【9-8】set serveroutput ondeclareseason int:=3; -定义整形变量并赋值aboutInfo varchar2(50); -存储月份信息begincase season -判断季度 when 1 then-若是1季度aboutInfo := season|季度包括1,2,3月份; when 2 then-若是2季度aboutInfo := season|季度包括4,5,6月份; when 3 then-若是3季度aboutInfo := season|季度包括7,8,9月份; when 4 then-若是4季度aboutInfo := season|季度包括10,11,12月份; else-若季度不合法aboutInfo := season|季节不合法;end case;dbms_output.put_line(aboutinfo); -输出该季度所包含的月份信息end;/9.3 循环结构【9-9】set serveroutput ondeclaresum_i int:= 0; -定义整数变量,存储整数和i int:= 0; -定义整数变量,存储自然数begin loop -循环累加自然数 i:=i+1; -得出自然数 sum_i:= sum_i+i; -计算前n个自然数的和 exit when i = 100; -当循环100次时,程序退出循环体 end loop; dbms_output.put_line(前100个自然数的和是:|sum_i);-计算前100个自然数的和end;/【9-10】set serveroutput ondeclare sum_i int:= 0; -定义整数变量,存储整数和 i int:= 0; -定义整数变量,存储自然数begin while i=99 loop -当i的值等于100时,程序退出while循环 i:=i+1; -得出自然数 sum_i:= sum_i+i;-计算前n个自然数的和 end loop; dbms_output.put_line(前100个自然数的和是:|sum_i);-计算前100个自然数的和end;/【9-11】set serveroutput ondeclaresum_i int:= 0;-定义整数变量,存储整数和begin for i in reverse 1.100 loop -遍历前100个自然数 if mod(i,2)=0 then -判断是否为偶数 sum_i:=sum_i+i; -计算偶数和 end if; end loop; dbms_output.put_line(前100个自然数中偶数之和是:|sum_i);end;/9.4 游标【9-12】set serveroutput ondeclare cursor cur_emp(var_job in varchar2:=教师) -声明游标,检索雇员信息 is select 职工号,姓名,工资 from 教工 where 职务=var_job; type record_emp is record -声明一个记录类型(RECORD类型) ( /*定义当前记录的成员变量*/ var_empno 教工.职工号%type, var_ename 教工.姓名%type, var_sal 教工.工资%type ); emp_row record_emp; -声明一个record_emp类型的变量begin open cur_emp(教师); -打开游标 fetch cur_emp into emp_row; -先让指针指向结果集中的第一行,并将值保存到emp_row中 while cur_emp%found loop dbms_output.put_line(emp_row.var_ename|的编号是|emp_row.var_empno|,工资是|emp_row.var_sal); fetch cur_emp into emp_row; -让指针指向结果集中的下一行,并将值保存到emp_row中 end loop; close cur_emp; -关闭游标end;/【9-13】set serveroutput ondeclare var_ename varchar2(8); -声明变量,用来存储教工名 var_job varchar2(6); -声明变量,用来存储教工的职务 cursor cur_emp -声明游标,检索编号为08001教工的姓名和职务 is select 姓名,职务 from 教工 where 职工号=08001;begin open cur_emp; -打开游标 fetch cur_emp into var_ename,var_job; -读取游标,并存储雇员名和职务 if cur_emp%found then -若检索到数据记录,则输出雇员信息 dbms_output.put_line(编号是08001的教工名称为:|var_ename|,职务是:|var_job); else dbms_output.put_line(无数据记录);-提示无记录信息 end if;end;/【9-14】遍历隐式游标中的记录set serveroutput onbegin for emp_record in (select 职工号,姓名,工资 from 教工 where 职务=教师) -遍历隐式游标中的记录 loop dbms_output.put(职工号:|emp_record.职工号); -输出职工号 dbms_output.put(;姓名:|emp_record.姓名); -输出姓名 dbms_output.put_line(;工资:|emp_record.工资);-输出职工工资 end loop;end;/【9-15】以游标方试检索01部门教工的职工号、姓名和职务。set serveroutput ondeclare cursor cur_emp is select * from 教工 where 部门号=01; -检索部门编号为01的教工信息begin for emp_record in cur_emp -遍历教工信息 loop dbms_output.put(职工号:|emp_record.职工号); -输出职工号 dbms_output.put(;姓名:|emp_record.姓名); -输出姓名 dbms_output.put_line(;职务:|emp_record.职务); -输出职务 end loop;end;/9.5 更新数据【9-16】把具有“博士”学历的教工工资上调20%,若update语句没有影响到任何一行数据则输出“没有教工上调工资”,否则输出“有n个教师工资上调20%”。set serveroutput onbegin update 教工 set 工资=工资*(1+0.2) where 职务=博士; -把具有“博士”学历的教工工资上调20% if sql%notfound then -若update语句没有影响到任何一行数据 dbms_output.put_line(没有教工上调工资); else -若update语句至少影响到一行数据 dbms_output.put_line(有|sql%rowcount|个教师工资上调20%); end if;end;/【9-17】set serveroutput ondeclare var_empno number; -定义变量,存储雇员编号 var_ename varchar2(50); -定义变量,存储雇员名称begin select empno,ename into var_empno,var_ename from emp where deptno=10; -检索部门编号为10的雇员信息 if sql%found then -若检索成功,则输出雇员信息dbms_output.put_line(雇员编号:|var_empno |;雇员名称|var_ename); end if; exception -捕获异常 when too_many_rows then -若SELECT INTO语句的返回记录超过一行dbms_output.put_line(返回记录超过一行); when no_data_found then -若SELECT INTO语句的返回记录为0行dbms_output.put_line(无数据记录);end;/【9-18】set serveroutput ondeclare primary_iterant exception;-定义一个异常变量 pragma exception_init(primary_iterant,-00001);-关联错误号和异常变量名begin/*向“部门”表中插入一条与已有主键值重复的记录,以便引发异常*/ insert into 部门 values(01,软件开发部,教三五楼,8338001); exception when primary_iterant then -若oracle捕获到的异常为-0001异常dbms_output.put_line(主键不允许重复!); -输出异常描述信息end;/【9-19】set serveroutput ondeclare null_exception exception; -声明一个exception类型的异常变量 dept_row dept%rowtype; -声明rowtype类型的变量dept_rowbegin dept_row.deptno := 66; -给部门编号变量赋值 dept_row.dname := 公关部;-给部门名称变量赋值 insert into dept values(dept_row.deptno,dept_row.dname,dept_row.loc);-向dept表中插入一条记录 if dept_row.loc is null then -如果判断“loc”变量的值为null raise null_exception; -

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论