存储过程和游标

创建一个存储过程:
如果JOB是PRESIDENT,则SAL加1%;
如果JOB是MANAGER,则SAL加5%;
如果JOB是ANALYST则SAL加10%
如果JOB是SALESMAN则SAL加20%
如果JOB是都不是以上类别则SAL加15%
并且要输出它们的ENAME,JOB ,进入公司的天数
用游标累计叠加计算每个部门所需要支付的薪水,输出 DEPTNO,所支付的薪水

set serveroutput on;
create or replace procedure emp_job (aaa number)
as
var_days number;
var_xinzi number:=0;
cursor cur_emp is select empno,ename,job,hiredate,sal,deptno from scott.emp where deptno=aaa;
begin
for xuhuang in cur_emp loop
if xuhuang.job=‘PRESIDENT‘ then
xuhuang.sal:=xuhuang.sal*1.01;
elsif xuhuang.job=‘MANAGER‘ then
xuhuang.sal:=xuhuang.sal*1.05;
elsif xuhuang.job=‘ANALYST‘ then
xuhuang.sal:=xuhuang.sal*1.1;
elsif xuhuang.job=‘SALESMAN‘ then
xuhuang.sal:=xuhuang.sal*1.2;
else xuhuang.sal:=xuhuang.sal*1.15;
end if;
update emp set sal=xuhuang.sal where empno=xuhuang.empno;
commit;
var_xinzi:=var_xinzi+xuhuang.sal;
var_days:=trunc(sysdate,‘j‘)-trunc(xuhuang.hiredate,‘j‘);
dbms_output.put_line(‘姓名:‘||xuhuang.ename||‘ 工作:‘||xuhuang.job||‘ 薪资:‘||xuhuang.sal||‘ 入职天数:‘||var_days);
end loop;
dbms_output.put_line(‘部门号:‘||aaa||‘ 需要支付的薪资:‘||var_xinzi);
end;

SQL> set serveroutput on;
SQL> exec emp_job(20);

姓名:SMITH 工作:CLERK 薪资:1058 入职天数:13067
姓名:JONES 工作:MANAGER 薪资:3279.94 入职天数:12961
姓名:SCOTT 工作:ANALYST 薪资:3630 入职天数:10753
姓名:ADAMS 工作:CLERK 薪资:1454.75 入职天数:10719
姓名:FORD 工作:ANALYST 薪资:3630 入职天数:12716
部门号:20 需要支付的薪资:13052.69

PL/SQL procedure successfully completed

SQL>

时间: 2024-10-15 05:40:48

存储过程和游标的相关文章

对sqlserver存储过程合游标的一些理解

在最近老板给我的数据库操作要求中,有一张类似购物清单样式的表,表中有客户ID,商品ID,商品数量,单价和商品总价,出售日期.还有一张商品折扣信息表,在这基础上商品价格同一商品价格会有差异,不同客户最高折扣额不同,折扣率也有差异,要求用sqlserver存储过程合游标表诉 一开始根本没有思路和头绪,听老大讲解是要用存储过程将查询到的数据存储好,再用游标循环遍历.对于存储过程合游标的表诉一直不太熟,之前只是将用sql语句查到的结果集放到存储过程里面,对于游标的了解不够深入.所以一开始也是想着用sql

mysql存储过程之游标遍历数据表

原文:mysql存储过程之游标遍历数据表 今天写一个mysql存储过程,根据自己的需求要遍历一个数据表,因为对存储过程用的不多,语法不甚熟悉,加之存储过程没有调试环境,花了不少时间才慢慢弄好,故留个痕迹. 1 BEGIN 2 DECLARE Done INT DEFAULT 0; 3 4 DECLARE CurrentLingQi INT; 5 6 DECLARE ShizuName VARCHAR(30); 7 /* 声明游标 */ 8 DECLARE rs CURSOR FOR SELECT

存储过程中用游标联动插入(商品分类)

例子:往商品表插入的同时,也将对应的多个分类加入到商品分类表中 create PROCEDURE TProduct_ADD@ProID bigint output, --自动编号@ISBN nvarchar(50),@pCode nvarchar(100),@pName nvarchar(200),@Unit nvarchar(50),@price decimal(18,2),@PurchasePrice decimal(18,2),@Discount decimal(4,2),@MembePr

Mysql 存储过程使用游标

-- 完整例子 CREATE PROCEDURE test BEGIN -- 定义参数    DECLARE _id INT; -- 定义游标    DECLARE no_more_products INT DEFAULT 0;    DECLARE RESULT_test CURSOR FORSELECT num1 from numtest; -- 如果NOT FOUND游标DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_produc

【MySQL】存储过程、游标、循环简单实例

有时候仅凭 sql 语句可能达不到想要的数据操作目的,有可能需要写一些方法体,通过循环判断等操作最终达到目的.那么在数据库里实现这种方法体就需要存储过程了,个人觉得一个带注释的简单实例可以简单粗暴地解决大部分问题,当然要深入学习了解的话还是要看教程文档了,话不多说,上码: [sql] view plain copy create procedure my_procedure() -- 创建存储过程 begin -- 开始存储过程 declare my_id varchar(32); -- 自定义

ibatis调存储过程返回游标

http://blog.sina.com.cn/s/blog_6f3ca78f01010pmj.html iBatic调用与JAVA调用很类似,只是JAVA把参数的注册放到了类里面,而iBatis把参数的注册放到了XML配置文件里,下面两个例子,第一个是返回普通数据,第二个是返回游标. 1:返回普通数据 Map map = new HashMap(); map.put("username", "JACK"); sqlMapClient.queryForObject(

Oracle基础 存储过程和游标

一.带游标的存储过程 游标作为参数有两种类型: 1.声明系统游标类型 SYS_REFCURSOR 1)游标作为存储过程的参数: --带游标的存储过程 CREATE OR REPLACE PROCEDURE PRO_EMP_IN(EMP_CUR SYS_REFCURSOR) AS V_NAME EMP.ENAME%TYPE; V_SAL EMP.SAL%TYPE; BEGIN LOOP FETCH EMP_CUR INTO V_NAME, V_SAL; DBMS_OUTPUT.PUT_LINE('

oracle存储过程和游标

一.带游标的存储过程 游标作为参数有两种类型: 1.声明系统游标类型 SYS_REFCURSOR 1)游标作为存储过程的参数: --带游标的存储过程 CREATE OR REPLACE PROCEDURE PRO_EMP_IN(EMP_CUR SYS_REFCURSOR) AS V_NAME EMP.ENAME%TYPE; V_SAL EMP.SAL%TYPE; BEGIN LOOP FETCH EMP_CUR INTO V_NAME, V_SAL; DBMS_OUTPUT.PUT_LINE('

mybatis 调用存储过程 返回游标 实例

存储过程示例: create or replace procedure Fsp_Plan_CheckPrj(v_grantno varchar2, v_deptcode number, v_cursor out sys_refcursor) is ……………… ---返回统计结果 open v_Cursor for select s.plan_code, s.plan_dept, s.plan_amount, s.exec_amount, p.cname as plan_name, d.cnam

SQL Server存储过程和游标有关实例以及相关网址

内含游标的存储过程实例 第一种写法 GO BEGIN IF (object_id('PT_FAULT_REPORT', 'P') is not null) drop proc PT_FAULT_REPORT; END GO CREATE PROCEDURE PT_FAULT_REPORT (@index int, @stop_time DATETIME, @start_time DATETIME) AS DECLARE @departmentindex int, @departmentname