系统中有个模块的基础数据需要导到数据库,由于数据量比较大,而且表格内容分布较凌乱。就先将数据导入临时表,然后根据临时表进行有效的检索并添加到对应的表中。今天下午写了个含有参数,带游标的存储过程。算是把这个问题给解决了。
本人需求大致如下:现有临时表"Sheet1$",数据是直接从excel的sheet1中读取然后自定义的,所以表名比较怪异。还有两张表分别是f_template,f_content.表结构如下:
create table f_template
(
tpl_id varchar2(20) primary key,
tpl_name varchar2(100) ,
work_type varchar2(10) ,
vol_level varchar2(15) ,
org_id varchar2(10) ,
create_date timestamp
)
create table f_content
(
rc_id varchar2(20) primary key,
project_name varchar2(100),
content varchar2(2000),
control_measure varchar2(2500),
is_public varchar2(10),
tpl_id varchar2(20),
foreign key tpl_id references to f_template(tpl_id)
)
alter table f_content
add constraint fk_content_template
foreign key(tpl_id) references f_template(tpl_id);
create or replace procedure pro_insert_temp
(
tplid in number,--风险辨识范本id
rcid in number,--风险辨识范本内容id
worktype in varchar2,--风险类型
orgid in varchar2--市局组织id
)
as
cur_tplid number :=tplid;--将输入参数tplid赋值给当前
cur_rcid number :=rcid; --将输入参数rcid赋值给当前
tplname "Sheet1$".A%type;--风险辨识项目
last_tplname "Sheet1$".A%type :='def';--上一风险辨识项目
pubmark "Sheet1$".B%type;--是否公共
projectname "Sheet1$".C%type;--辨识项目
content "Sheet1$".D%type;--辨识内容
measure "Sheet1$".E%type;--控制措施
cursor c_sheet is select a,b,c,d,e from "Sheet1$";
begin
open c_sheet ;--打开游标
loop
fetch c_sheet into tplname, pubmark, projectname, content, measure;--游标下移
exit when c_sheet %notfound;--退出条件
if(last_tplname='def' or last_tplname <> tplname) --判断是否同一风险辨识范本,不是则进入
then
cur_tplid:=cur_tplid+1; --范本id自增长
insert into f_template(tpl_id,tpl_name,work_type,org_id,create_date)--添加范本
values(cur_tplid ,tplname ,worktype ,orgid,sysdate);
last_tplname:=tplname;
end if;
cur_rcid:=cur_rcid+1;--范本内容id自增长
insert into f_content(rc_id,project_name,content,control_measure,is_public,tpl_id)
values(cur_rcid,projectname,content,measure,pubmark,cur_tplid);--添加范本内容记录
end loop;--游标循环结束
close c_sheet;--关闭游标
end pro_insert_temp;--存储过程结束
exec pro_insert_temp(0,0,'变电检修','3');
分享到:
相关推荐
### Oracle存储过程、游标、函数的详解 #### 一、概述 在Oracle数据库中,存储过程、游标和函数是非常重要的组成部分,它们为数据库管理提供了强大的编程能力。通过学习这些概念,我们可以更加灵活地管理和操作...
"Oracle存储过程游标详解" Oracle 存储过程游标是指在 Oracle 数据库中使用游标来实现对结果集的处理和操作。游标可以分为静态游标和REF游标两种类型。静态游标是指结果集已经确实(静态定义)的游标,可以进一步...
Oracle存储过程中的“Out”游标是数据库编程中一种常用的技术,主要用于在PL/SQL块中返回结果集到调用者。在这个场景中,我们有三个文件:TESTPACKAGE.txt,CURSOR_TEST2.txt和OracleProcedure.java,分别涉及Oracle...
本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...
标题:“oracle存储过程使用游标对多表操作例子”直接指出了文章的主题是关于在Oracle环境下,如何利用存储过程和游标实现跨多个表的数据处理。描述部分重复了标题内容,强调了示例性质,表明文章将通过具体实例来...
存储过程中通过返回数据集,通过游标方式实现,以及在java中如何接收的整个过程
### Oracle 存储过程与游标使用详解 在Oracle数据库管理中,存储过程与游标是两个非常重要的概念。它们可以提高数据处理的效率、增强应用程序的灵活性,并且能够简化复杂的数据库操作。本文将根据提供的内容,深入...
本文将深入探讨如何使用Java来调用Oracle存储过程,特别是涉及游标的场景。 首先,Oracle存储过程是一种预编译的SQL和PL/SQL代码块,可以在数据库服务器端执行,提供了一种封装业务逻辑的方式。而游标(Cursor)在...
在本篇讨论中,我们将深入理解Oracle游标、异常处理以及如何在存储过程中使用它们。 1. **Oracle游标**: - **定义**:Oracle游标是数据库系统提供的一种机制,用于在结果集中定位并处理单条记录。它实际上是一个...
Oracle 存储过程调用 CallabledStatement 实用例子(IN OUT 传游标) 一、Oracle 存储过程简介 Oracle 存储过程是一种可以在 Oracle 数据库中存储和执行的程序单元。存储过程可以由多种语言编写,例如 PL/SQL、...
在本例中,“Oracle存储过程实例使用显示游标”着重展示了如何在存储过程中调用函数,并通过游标来处理和更新数据。 首先,我们需要了解存储过程的基本结构。一个存储过程通常包含以下部分: 1. **声明部分**:在...
存储过程 游标 oracle 存储过程 游标 oracle 存储过程 游标 oracle 存储过程 游标 oracle
本主题将深入探讨Oracle中的几个核心概念:函数、存储过程、游标以及简单的实例,这些都是数据库管理员和开发人员日常工作中不可或缺的部分。 首先,我们来了解**Oracle函数**。函数是预定义的代码块,接受零个或多...
游标是Oracle数据库中一个重要的概念,它是一种在内存中用于存储SQL查询结果的临时工作区域。使用游标可以方便地访问查询结果集中的每一行,这对于处理大量数据是非常有用的。游标主要分为两种类型:显式游标和隐式...
在Java编程中,调用Oracle数据库的存储过程并处理返回的游标是一项常见的任务。Oracle存储过程可以封装复杂的业务逻辑,而游标则用于在结果集上进行迭代,特别是当结果集太大,不适合一次性加载到内存时。下面将详细...
**二、Oracle游标** 游标(Cursor)是数据库系统中用于处理单条记录的一种机制。在Oracle中,游标允许我们遍历查询结果集,一次处理一条记录。游标的使用场景包括循环处理结果集、有条件地更新或删除数据等。 1. **...
本示例主要讲解如何在C# Winform应用中调用带游标的Oracle存储过程,以及处理返回的输出参数。 首先,确保你的开发环境已经安装了Oracle的数据提供程序,如ODP.NET。这将允许C#与Oracle数据库进行交互。在NuGet包...
oracle存储过程使用游标判断2表差异,进行新增更新操作
### Oracle中的游标详解 #### 一、引言 在Oracle数据库中,游标是一种非常重要的机制,它允许用户在程序中对查询结果进行逐行处理。游标分为两种主要类型:**隐式游标**和**显示游标**。此外,还可以利用游标进行...
在这个例子中,我们将探讨如何通过存储过程和游标返回结果集。游标允许我们在处理数据时逐行移动,这对于需要循环访问数据库记录的情况非常有用。 首先,我们创建了一个名为`types`的程序包,它定义了一个名为`...