--小测:输出各部门员工的部门名称和工号、姓名,工资。
要求:
各部门工资最高的放在前面
在“DALLAS”地方的部门名称后加上“*”。
·三种实现方式
1 通过显式游标
2 通过FOR循环
3 通过动态SQL方式
显示游标
declare type emp_dept is record( name dept.dname%type, loc dept.loc%type, empno emp.empno%type, ename emp.ename%type, sal emp.sal%type); emp_table emp_dept; cursor cur_emp is select d.dname, d.loc, e.empno, e.ename, e.sal from emp e, dept d where d.deptno = e.deptno order by e.deptno, e.sal desc; begin open cur_emp; fetch cur_emp into emp_table; loop if emp_table.loc = 'DALLAS' THEN dbms_output.put_line(emp_table.loc || '*' || '-->' || emp_table.name || '-->' || emp_table.empno || '-->' || emp_table.sal); else dbms_output.put_line(emp_table.loc || '-->' || emp_table.name || '-->' || emp_table.empno || '-->' || emp_table.sal); end if; fetch cur_emp into emp_table; exit when cur_emp%notfound; end loop; close cur_emp; end; ----不用if else begin for x in (select(case when d.loc='DALLAS' then d.loc||'*' else d.loc end),d.dname,e.empno,e.ename,e.sal from emp e,dept d where d.deptno=e.deptno order by e.deptno,e.sal desc) loop dbms_output.put_line(x.loc||'-->'||x.dname||'-->'||x.empno||'-->'||x.sal); end loop; END;
for循环
begin for x in (select d.dname,d.loc,e.empno,e.ename,e.sal from emp e,dept d where d.deptno=e.deptno order by e.deptno,e.sal desc) loop if x.loc='DALLAS' then x.loc:=x.loc||'*'; end if; dbms_output.put_line(x.loc||'-->'||x.dname||'-->'||x.empno||'-->'||x.sal); end loop; END;
动态sql
<span style="background-color: rgb(255, 255, 255);">declare cursor cur_emp is select d.dname, d.loc, e.empno, e.ename, e.sal from emp e, dept d where d.deptno = e.deptno order by e.deptno, e.sal desc; type emp_table_type is table of cur_emp%rowtype index by binary_integer; emp_table emp_table_type; str_sql varchar2(1000); begin str_sql := 'select d.dname, d.loc, e.empno, e.ename, e.sal from emp e, dept d where d.deptno = e.deptno order by e.deptno, e.sal desc'; execute immediate str_sql bulk collect into emp_table; for i in 1 .. emp_table.count loop if emp_table(i).loc = 'DALLAS' THEN dbms_output.put_line(emp_table(i).loc || '*' || '-->' || emp_table(i).dname || '-->' || emp_table(i).empno || '-->' || emp_table(i).sal); else dbms_output.put_line(emp_table(i).loc || '-->' || emp_table(i).dname || '-->' || emp_table(i).empno || '-->' || emp_table(i).sal); end if; end loop; end;</span>
相关推荐
sql server 事务和游标 能有效的处理一些平时不能处理的问题!
SQL Server的事务、游标、存储过程及触发器的创建和实例
SQLServer 存储过程 游标的使用方法 事务的使用方法
SQL Server 事务 游标 基本语法操作实例 全SQL语句
带事物的游标循环,循环已有table,来实现游标循环,如有错误可以有效地回滚,对于初学者还是有所帮助。
关键字:事物、游标、存储过程、触发器引言:在关系数据库系统中,事务指的是组成为独立单元的一个或多个SQL操作的可恢复的序列。对数据库的任何一次读或写都是在某次事务内完成的。游标类似一个指针,指向某一个...
第4部分为数据库管理篇,介绍如何使用T-SQL程序对数据进行复杂的运算,以及如何使用视图、存储过程、触发器、索引、用户定义数据类型、用户定义函数、全文索引、游标、事务和锁、统计信息和同义词等方面的知识;...
1,异常处理,事务回滚。 2,错误消息返回。 3,游标嵌套。 4,对于嵌套游标STATUS的互相影响问题的解决办法《注意001和002的注释位置,fetch的位置》。 对于初学者,存储过程重要的几个方面,都有展示到,大虾们请...
数据库实用教程——SQL Server 2008第11章 事务与游标
该书解释并比较了SQL Server 2000和SQL Server 2005在数据库开发相关问题上的解决方案,深入讨论了SQL Server 2005中新增的T-SQL编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解...
在使用SQL Server存储过程或者触发器时,通常会使用自定义异常来处理一些特殊逻辑。例如游标的销毁,事务的回滚。接下来将会详细的介绍SQL Server自定义异常的使用。 使用“raiserror”来抛出自定义异常。如下代码:...
第1章初识SQL Server2012.ppt 网盘...第11章事务和锁.ppt 第12章游标ppt 第13章存储过程和自定义函数。ppt 第14章视图操作.ppt 第15章触发器ppt 第16章SQL Server2012的安全机制.ppt 第17章 数据库的备份与恢复,Ppt
无论您是学生还是数据库领域的从业人员,都可从《SQL Server 2008管理员必备指南》获得解决问题和完成工作所需的信息。 《SQL Server 2008管理员必备指南》重要主题: 规划、部署和配置SQL Server 2008 管理服务器,...
SQLServer数据库实用语法 存储过程、事务、游标
无论您是学生还是数据库领域的从业人员,都可从《SQL Server 2008管理员必备指南》获得解决问题和完成工作所需的信息。 《SQL Server 2008管理员必备指南》重要主题: 规划、部署和配置SQL Server 2008 管理服务器,...
SQL Server的系统结构,关系数据库管理基础,SQL Server的安全模式和安全管理策略,数据库及数据库对象创建和使用,任务和报警设置,数据库的备份、恢复和复制,SQL Server系统性能的监视和优化,游标、事务和锁的...
第4部分为数据库管理篇,介绍如何使用T-SQL程序对数据进行复杂的运算,以及如何使用视图、存储过程、触发器、索引、用户定义数据类型、用户定义函数、全文索引、游标、事务和锁、统计信息和同义词等方面的知识;...
第4部分为数据库管理篇,介绍如何使用T-SQL程序对数据进行复杂的运算,以及如何使用视图、存储过程、触发器、索引、用户定义数据类型、用户定义函数、全文索引、游标、事务和锁、统计信息和同义词等方面的知识;...