使用游标查询部门为10的员工,并为其增加1000元,我这里测试反馈数据不正确,麻烦请教感谢

declare
cursor c1(dno myemp.deptno%type)
is select * from myemp t where t.deptno = dno;
prec myemp%rowtype;
begin
open c1(10);

loop
fetch c1 into prec;
update myemp t set t.sal=(t.sal+1000) where t.empno = prec.empno;

exit when c1%notfound;

end loop;
close c1;
commit;

end;

--通过oricle那个emp表返回的结果,一共有三个部门为10的员工,测试出来只有两个员工按正常1000元加上去了。但是另外一个却加了2000元,是代码哪里出问题了吗?求指点/

0

1个回答

找到问题根源所在了。问题在于update myemp t set t.sal=(t.sal+1000) where t.empno = prec.empno;

exit when c1%notfound;两句语句需要互调。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
为所有雇员增加工资,工资在 1000 以内的增加 30%,工资在 1000~2000之间的增加 20%, 2000 以上的增加 10%。
--为所有雇员增加工资,工资在 1000 以内的增加 30%,工资在 1000~2000 --之间的增加 20%, 2000 以上的增加 10%。 --分析:if 迭代 --游标:c_emp :select ename,sal from emp; 变量:v_empno,v_name,v_sal set serveroutput on  declare  v_empno emp.empn
利用带参数的游标来传入指定的部门以此查出这个部门的所有员工的姓名
--查询某个部门中员工的姓名 --set serveroutput on declare --定义带参数的游标 cursor cemp(dno number) is select ename from emp where deptno=dno; pename emp.ename%type; begin --打开光标 open cemp(10);--10号部门 loop -
oracle游标:查询并打印员工的姓名和薪水
--查询并打印员工的姓名和薪水 --set serveroutput on /* 1、光标的属性 %found:如果取到了记录就是true否则是false; %notfound: */ declare --定义一个光标 cursor cemp is select ename,sal from emp; --为光标定义对应的变量 pename emp.ename%type;
PL/SQL实现按员工的工种涨工资
问题:按员工的工种涨工资,总裁涨1000,经理涨800,其他人涨400。 java伪代码: ResultSet rs = "select empno,job from emp"; while(rs.next()) { int eno = rs.getInt("empno"); String job = rs.getString("job"); ...
利用oracle的游标为员工涨工资,从最低工资涨起每人涨10%,但工资总额不能超过5万元
--为员工涨工资,从最低工资涨起每人涨10%,但工资总额不能超过5万元, --请计算涨工资的人数和涨工资后的工资总额,并输出涨工资人数及工资总额 --sql语句 --select empno,sal from emp order by sal; --光标--循环--退出条件(1、工资总额大于5万;2、%notfound) --变量:1、初始值 2、如何得到 --涨工资的人数:countEmp nu
为雇员增加工资,从工资低的雇员开始,为每个人增加原工资的 10%,限定所增加的工资总额为 800 元,显示增加工资的人数和余额。
--为雇员增加工资,从工资低的雇员开始,为每个人增加原工资的 10%,限 --定所增加的工资总额为 800 元,显示增加工资的人数和余额。 --1.游标c_sal :select empno,ename,sal from emp order by sal;v_empno,v_sal 个人薪资,v_total:=800 涨薪总数, --v_add_sal 每个人的涨薪,v_count 人数
PL/SQL常见例题
在开始接触PL/SQL时,遇到的一些经典的例题,包括循环,函数,游标等几个方面。1.       编写PL/SQL程序块,输出100到110之间的所有素数。代码:declare i int:=2;j int:=100;--GOTO label;beginwhile j<110 loopj:=j+1;i:=1;while i<=j/2 loopi:=i+1;if mod(j,i)=0th...
给员工涨工资,总裁1000,经理800,其他400
--先删除原先的表emp drop table emp; --创建表emp create table emp (ename varchar2(20), empjob varchar2(20), sal number); --select * from emp; --为表输入数据 insert into emp values('smith','clerk',800); i
PLSQL实验
PL/SQL编程 一、实验目的及要求   (1) 掌握PL/SQL语句块、PL/SQL的基本语法、PL/SQL的控制结构。   (2) 掌握PL/SQL块中使用复合数据类型和游标的方法。 (3) 掌握PL/SQL异常处理技术。 (4) 掌握存储过程、存储函数、触发器高级数据库对象的基本作用。 (5) 掌握存储过程、存储函数、触发器的建立、修改、查看、删除操作。 二、实验主要内容  
1. 显示工资涨幅,员工编号,原来的工资和增加的工资: 部门号10、50、110的有5%的涨幅, 部门号为60的涨10%的工资部门号为20和80涨幅为15%,部门为90的不涨工资
SELECT * FROM ( select 'raise 5%' raise,e.employee_id as employee_id,e.salary,e.salary*0.05 as newsalary from employees e where e.department_id in (10,50,110)) UNION ALL SELECT * FRO...
emp表中对所有雇员按他们基本薪水的10%给他们加薪, -- 如果所增加后的薪水大于5000,则取消加薪。
declare  cursor s3 is    select * from emp;  v_res emp%rowtype;  v_s   emp.ename%type;begin  open s3;  fetch s3    into v_res;  loop    exit when s3%notfound;    update emp set sal = sal * 0.1 + sal w...
定义一个存储过程,以员工工号为参数,修改该员工的工资,若该员工属于10部门,则工资增加150 若属于20号部门,工资加200,若属于30部门,工资加250 若其它部门,则加300
定义一个存储过程,以员工工号为参数,修改该员工的工资,若该员工属于10部门,则工资增加150 若属于20号部门,工资加200,若属于30部门,工资加250 若其它部门,则加300
经典sql题目,给每个部门中工资最低的员工涨薪1000
具体题目自行查找,千篇一律。 第一层select: 查找每个部门中比每一个人的工资小的记录的条数,条数<1的员工,则该员工的工资为该部门最低的。 select tmp.e_no from ( select e_no from employee e1 where ( select count(*) ...
PLSQL条件语句完成员工加薪功能(记录类型+游标case when+if+for update+where current of)
TEST1:请使用函数+plsql完成给员工加薪的功能。 CLERK 加薪 20%; SALESMAN 加薪30%; MANAGER 加薪35% SQL> select * from t; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ----
oracle创建一个带参数的存储过程:为指定的员工,涨100块钱的工资;并且打印涨前和涨后的薪水
--创建一个带参数的存储过程 --为指定的员工,涨100块钱的工资;并且打印涨前和涨后的薪水 /* begin raisesalary(6755); raisesalary(4456); commit();//这里提交,所以说我们一般不会在存储过程或者存储函数中写提交, end; / */ --host cls --先创建表emp和插入数据,显示表的结
简单查询练习题
#1.显示所有员工姓名的前三个字符 SELECT LEFT(ename,3) FROM emp #2.显示正好为5个字符的员工的姓名,工资,部门号 SELECT ename,sal,deptno FROM emp WHERE CHAR_LENGTH(ename=5) -3.写一个查询,用首字母大写,其它字母小写显示雇员的 ename,显示名字的长度, 并给每列一个适当的标签,条件...
用PL/SQL语言编写一程序,实现按部门分段统计各个工资段的职工人数、以及各部门的工资总额
--用PL/SQL语言编写一程序,实现按部门分段 --(6000以上、6000-3000,3000元以下)统计各个 --工资段的职工人数、以及各部门的工资总额(工资总额中不包括奖金) --创建结果表--存储结果数据 create table msg (deptno number, count1 number, count2 number, count3 number, saltotal numb
ORACLE 统计各个部门 工资级别为小于2000,2000-3000,3000+的分别为多少
 统计各个部门 工资级别为小于2000,2000-3000,3000+的分别为多少   /*统计各个部门 工资级别为小于2000,2000-3000,3000+的分别为多少 */ --使用一下2 张表 select * from scott.emp; select * from scott.dept --汇总脚本如下 select d.deptno 部门编号, e.level1, ...
将所有获取奖金的员工当前的薪水增加10%
题目描述将所有获取奖金的员工当前的薪水增加10%。create table emp_bonus(emp_no int not null,recevied datetime not null,btype smallint not null);CREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`fr...
oracle.简单查询、排序、限定查询、单行函数
一、简单查询: 1、查询数据表的所有列: SELECT * FROM 表名; SELECT 列名,列名.... FROM 表名; 2、起别名: SELECT 列名 [AS 别名],列名 别名.... FROM 表名; ---正常 SELECT ename AS 员工姓名,sal salary FROM emp; ---别名是关键字,别名需要用双引号引起来 SELECT ename "sel...
第16章 序列、索引、同义词
--------------------------序列-------------------------create sequence emp_empno_seq;语法:create sequence EMP_EMPNO_SEQ   ---指定序列名称minvalue 1                      ---指定最小值maxvalue 50----指定最大值start with 10...
数据库练习
1、按以下格式显示下面的信息,条件是工资大于1500的。    部门名称  姓名  工资   2、按以下格式显示下面信息,条件是此人工资在所有人中最高。    部门  姓名  工资   3、按以下格式显示下面信息    某人 为 某人 工作   4、为所有人长工资,标准是:10部门长10%;20部门长15%;30部门长20%其他部门长18%(要求用DEC...
PL/SQL——涉及两张表的员工涨工资问题
/* 用PL/SQL语言编写一程序,实现按部门分段(6000以上、(6000,3000)、3000元以下)统计各工资段的职工人数、以及各部门的工资总额(工资总额不包括奖金) */ create table msg (deptno number, count1 number, count2 number, count3 number, saltotal number);   ...
编写一个PL/SQL程序块,从emp表中对名字以"A"或"S"开始的所有雇员按他们基本薪水的10%给他们加薪。
declare cursor s2 is select * from emp where (ename like'A%' or ename like 'S%'); v_res emp%rowtype; begin   open s2;   fetch s2 into v_res;   loop    exit when s2% notfound;    update emp set sal= sa...
大数据数据集成和开发社招笔试题
1、Shell部分(35分)1.1、$*, $@, $#,$0,$?有什么区别?(3分)[答] $*和$@都表示参数列表; $#表示参数的个数,常用于循环; $0表示当前脚本名称; $?表示上一个命令退出的状态码.1.2、如何获取文本文件的第10行(2分)[答]  1) cat a.txt | awk 'NR==10' 2) cat a.txt | sed '10!d' 3) cat a.txt ...
oracle教程20 游标使用教程和举例(使用游标修改或删除数据for update\nowait子句\of子句)
--按职工的职称涨工资,总裁涨1000元,经理涨500元,其他员工涨300元。 --1:用显示游标的常规方式实现业务需求 DECLARE --定义游标 CURSOR empnew_cursor IS SELECT empno,job FROM empnew; v_empno empnew.empno%TYPE; v_job empnew.job%TYPE; BEGIN --...
多表查询,数据库事务(附:部门员工多表查询案例)
多表查询 、数据库事务 –> 面试重点(概念,三个步骤,四个特征) 一 多表查询 —-> 难点 1、笛卡尔积 A.语法: SELECT * FROM 表名称1,表名称2; B.查询出来的数据条目数: a.计算公式 表名称1的条目数x表名称2的条目数 b.例如: ...
数据库SQL实践48:将所有获取奖金的员工当前的薪水增加10%
思路: 薪水增加10%,即salary=salary*1.1 update salaries set salary=salary*1.1 where emp_no in (select emp_no from emp_bonus);  
oracle涨工资问题
--综合案例之瀑布模型 --统计每年入职员工人数 /*select to_char(hiredate,'yyyy')from emp; -->光标-->循环-->退出条件:notfound 变量:1:初始值 2:如何得到 每年入职员工人数: count80 number:=0; count81 number:=0; count82 number:=0; count87 number:=0; */
Oracle PL/SQL 游标中的更新和删除
   游标中的更新和删除   在PL/SQL中依然可以使用UPDATE和DELETE语句更新或删除数据行。显式游标只有在需要获得多行数据的情 况下使用。PL/SQL提供了仅仅使  用游标就可以执行删除或更新记录的方法。   UPDATE或DELETE语句中的WHERE CURRENT OF子串专门处理要执行UPDATE或DELETE操作的表中取出的最近的 数据。要使用这个方法,在声明游标  时...
案例:使用伪记录,在eml表中如果更新员工的工资,要求使用触发器 达到 工资只能增加不能降低
案例:使用伪记录,在eml表中如果更新员工的工资,要求使用触发器 达到 工资只能增加不能降低
逻辑运算符以及单行函数
逻辑运算符:          AND:逻辑与   SELECT empno,ename,job,sal FROM emp WHERE sal>=1100 AND job='CLERK';          OR: 逻辑或          NOT:逻辑非(后边只能跟一个参数) 逻辑非还可以与BETWEEN...AND, LIKE,  IS NULL一起使用 ...wh
数据库面试题(二)
1、构造SQL语句,列出在1981年入职的职员的姓名、入职时间和月收入(薪水和奖金之和)别名为salary,并将入职时间显示为::“1981-10-10”这种形式,月收入显示为”$12,345.67”这种形式。 SELECT ename,   to_char(hiredate,   'yyyy-mm-dd') hiredate,   to_char(sal + nvl(comm,
59. 获取有奖金的员工相关信息
题目描述 获取有奖金的员工相关信息。 CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` char(1) NOT NULL, `h...
MYSQL查询员工信息练习
01.查询每个雇员的编号、姓名、职位。 select empno,ename,job from emp; 02.查询出所有的职位,使用DISTINCT消除掉显示的重复行记录。 select DISTINCT job from emp; 03.计算每个雇员的编号、姓名、基本年薪。年薪=(工资+奖金comm)*12,(使用IFNULL函数判断NULL) select empno as '编号',e...
PL/SQL笔记
declare   定义变量 begin   具体操作 exception   异常处理 end ;  结束    ----------------------------------------------  程序变量      V_name       程序常量      C_name  游标变量      name_  异常标识      E_too_many  ...
在employees表中查询出员工的工资,并计算应交税款
在employees表中查询出员工的工资,并计算应交税款:如果工资小于1000,税率为0,如果工资大于等于1000并小于2000,税率为10%,如果工资大于等于2000并小于3000,税率为15%,如果工资大于等于3000,税率为20%。
短实训-数据库基础(一)
**1创建表的语法:**CREATE TABLE STUDENT( SID NUMBER NOT NULL PRIMARY KEY, STUNAME VARCHAR(30) NOT NULL, STUAGE NUMBER , ADDRESS VARCHAR(100), TEL NUMBER );2.插入信息INSERT INTO STUDENT(SID,STU
查找员工编号emp_now为10001其自入职以来的薪水salary涨幅值growth
题目: sql语句 方式一: SELECT (MAX(salary)-MIN(salary)) AS growth FROM salaries WHERE emp_no = '10001' 方式二: select DISTINCT ((select s1.salary from salaries s1 where s1.emp_no = '10001' and s1.to_d...
MYSQL基础上机练习题(三) 数据查询
一、实验目的:查询数据二、实验内容:对上一章所输入的数据进行查询三、题目: 查看Employees列表所有数据(知识点:通配符:*) 选择Employees列表中教育水平为’本科’的员工号及姓名(知识点:按单个条件查询数据) 选择Employees列表中教育为硕士的人的姓名、性别、工作年限并为查询的列命名中文名(知识点:定义列别名) 计算Employees中的行数(知识点:函数应用:COUNT) 计