oracle 存储过程的几个例子

一:生成部门用户拥有的查看权限信息

create or replace procedure refreshUseridOfCity
as
cursor c_job is select id,dept_code,dept_name from ram_department order by dept_code;--定义游标
c_row c_job%rowtype; --定义一个游标变量c_row ,该类型为游标c_job中的一行数据类型
v_result varchar2(200);
v_deptlevel varchar2(2);--部门级别,1 地市级别;2普通级别
v_levelname varchar2(60);--级别名称
v_prov number;--级别标识 省直单位
v_city number;--级别标识 市级单位
v_levelcode varchar2(20); --地市所属级别编码

begin
delete from tb_infostat_useridofcity;
for c_row in c_job loop
select count(*) into v_prov from dual where c_row.dept_code like ‘3700%‘;
select count(*) into v_city from dual where c_row.dept_code like ‘37%00‘ and c_row.dept_code != ‘370000‘;
if v_prov > 0 then--省直
select wm_concat(id) ids into v_result from
(select b.id,a.real_name,b.dept_code,b.id deptid,b.parent_id
from ram_user a inner join ram_department b on a.dept_id = b.id)t
where t.dept_code like ‘3700%‘
start with dept_code = c_row.dept_code connect by prior deptid = parent_id;
v_deptlevel := case when c_row.dept_code = ‘370000‘ then ‘1‘ else ‘2‘ end;
v_levelcode := c_row.id;
v_levelname := ‘省直属单位‘;
insert into tb_infostat_useridofcity(id,userid,deptname,deptlevel,levelname,levelcode)values(c_row.dept_code,v_result,c_row.dept_name,v_deptlevel,v_levelname,v_levelcode);
dbms_output.put_line( c_row.dept_code || ‘:‘ || v_result || ‘:‘ || c_row.dept_name || ‘:‘ || v_deptlevel || ‘:‘ || v_levelname || ‘:‘ || v_levelcode);
elsif v_city > 0 then --市级
select ids into v_result from
(select wm_concat(id) ids from
(select b.id,a.real_name,b.dept_code,b.id deptid,b.parent_id
from ram_user a inner join ram_department b on a.dept_id = b.id)
start with dept_code = c_row.dept_code connect by prior deptid = parent_id) tt;
v_deptlevel := ‘1‘;
v_levelcode := c_row.id;
v_levelname := c_row.dept_name;
insert into tb_infostat_useridofcity(id,userid,deptname,deptlevel,levelname,levelcode)values(c_row.dept_code,v_result,c_row.dept_name,v_deptlevel,v_levelname,v_levelcode);
dbms_output.put_line( c_row.dept_code || ‘:‘ || v_result || ‘:‘ || c_row.dept_name || ‘:‘ || v_deptlevel || ‘:‘ || v_levelname || ‘:‘ || v_levelcode);
else
select ids into v_result from
(select wm_concat(id) ids from
(select b.id,a.real_name,b.dept_code,b.id deptid,b.parent_id
from ram_user a inner join ram_department b on a.dept_id = b.id)
start with dept_code = c_row.dept_code connect by prior deptid = parent_id) tt;
--过滤掉部门下未创建用户的信息
if v_result is not null then
v_deptlevel := ‘2‘;
v_levelcode := c_row.id;
select b.dept_name into v_levelname from ram_department a inner join ram_department b on a.parent_id = b.id where a.dept_code = c_row.dept_code;
insert into tb_infostat_useridofcity(id,userid,deptname,deptlevel,levelname,levelcode)values(c_row.dept_code,v_result,c_row.dept_name,v_deptlevel,v_levelname,v_levelcode);
dbms_output.put_line( c_row.dept_code || ‘:‘ || v_result || ‘:‘ || c_row.dept_name || ‘:‘ || v_deptlevel || ‘:‘ || v_levelname || ‘:‘ || v_levelcode);
else
dbms_output.put_line(c_row.dept_name);
end if;
end if;
end loop;
commit;
exception
when others then
dbms_output.put_line(sqlerrm);
rollback;
end;

时间: 2024-10-16 05:30:53

oracle 存储过程的几个例子的相关文章

Oracle 存储过程学习笔记

1.存储过程简单实例 CREATE OR REPLACE PROCEDURE 存储过程名称 (参数in,参数out) AS -- 变量声明,每个声明用分号结束.可以在声明的同时初始化 name varchar2(50); age number(8) default 0; --开始逻辑运算 BEGIN --业务逻辑 END 2.游标实现方式. --显式实现方式(可以实现多值) cursor cursorVar is select event_id, isagain, rate from call_

oracle存储过程的例子

oracle存储过程的例子 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块.而存储过程和函数是以命名的方式存储于数据库中的.和PL/SQL程序相比.存储过程有非常多长处.详细归纳例如以下: * 存储过程和函数以命名的数据库对象形式存储于数据库其中.存储在数据库中的长处是

springMVC + oracle存储过程 构建高性能灵活易维护的java web架构

MVC让简单的业务也变得复杂 不知道你在使用MVC模式开发项目的时候是否觉得很麻烦,一个简单的增删改查动作却要涉及到多个文件操作. 以一条数据增加为例说明. 假设我们使用hibernate并且dao层是已经封装好的 从图中可以看出如果我们在系统中写一个增加功能需要自己动手写的地方至少是 jsp , action , service,servicesImpl 四层. 如果是复杂的添加操作那么我们很可能还会自己定义dao层的接口和方法,那样就是6层操作了. 如果使用mybatis 至少也是写4层,常

面试概率极大的Oracle存储过程

1.什么是存储过程.存储过程是数据库服务器端的一段程序,它有两种类型.一种类似于SELECT查询,用于检索数据,检索到的数据能够以数据集的形式返回给客户.另一种类似于INSERT或DELETE查询,它不返回数据,只是执行一个动作.有的服务器允许同一个存储过程既可以返回数据又可以执行动作.2.什么时候需要用存储过程 如果服务器定义了存储过程,应当根据需要决定是否要用存储过程.存储过程通常是一些经常要执行的任务,这些任务往往是针对大量的记录而进行的.在服务器上执行存储过程,可以改善应用程序的性能.这

oracle 存储过程的基本语法

原文:oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字(    参数1 IN NUMBER,    参数2 IN NUMBER) IS变量1 INTEGER :=0;变量2 DATE;BEGIN END 存储过程名字 2.SELECT INTO STATEMENT  将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条  记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)  例子:  

Oracle存储过程的学习

存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值范围); Begin Select count(*) into 变量1 from 表A where列名=param1: If (判断条件) then Select 列名 into 变量2 from 表A where列名=param1: Dbms_output.Put_line('打印信息'); El

Oracle存储过程(转)

存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值范围); Begin Select count(*) into 变量1 from 表A where列名=param1: If (判断条件) then Select 列名 into 变量2 from 表A where列名=param1: Dbms_output.Put_line('打印信息'); El

[转]oracle存储过程、声明变量、for循环

oracle存储过程.声明变量.for循环 1.创建存储过程 create or replace procedure test(var_name_1 in type,var_name_2 out type) as --声明变量(变量名 变量类型) begin --存储过程的执行体 end test; 打印出输入的时间信息 E.g: create or replace procedure test(workDate in Date) is begin dbms_output.putline(&ap

Oracle存储过程基本语法介绍

Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 行2: IS关键词表明后面将跟随一个PL/SQL体. 行3: BEGIN关键词表明PL/SQL体的开始. 行4: NULL PL/SQL语句表明什么事都不做,这句不能删