-- 会话级别临时表 Create Global Temporary Table tableanme (col1 type1, col2, type2) On Commit Preserve Rows;
-- 创建事务临时表
--Create Global Temporary Table transTempTable (oldid number(20),newid number(20),pid number(20)) On Commit Delete Rows;
--select * from transTempTable;
--drop table transTempTable;
declare
maxIndex number(20);--存储最大ID
tableCount number(20);--存储总条数
fromId number(20);
toId number(20);
fromName varchar(30);
toName varchar(30);
fromCount number(20);
toCount number(20);
unifyFlag number(1);
unifyName varchar(50);
cursor pcCuesor is select * from placecomparecity;
begin
DBMS_OUTPUT.PUT_LINE('Hello World!');
-- 两个城市赋值
fromId := 7;
toId := 2;
unifyFlag := 0;
-- if else 用法
if unifyFlag = 0 then
unifyName := '非统一管理';
--else if (unifyFlag = 1) then
--unifyName := '统一管理';
--else
--unifyName := 'abc';
end if;
-- decode 用法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else)
select decode(unifyFlag,0,'非统一管理',1,'统一管理',2,'unify是2','都不是') into unifyName from dual;
select name into fromName from city where id = fromId;
select name into toName from city where id = toId;
-- 查原来两个城市的条数
select count(ap.id) into fromCount
from advdeploy ad, placecomparecity pc, city c, advplace ap
where ad.compareid=pc.id and pc.cid =c.id and pc.pid=ap.id
and c.id = fromId and ad.isunify=unifyFlag;
select count(ap.id) into toCount
from advdeploy ad, placecomparecity pc, city c, advplace ap
where ad.compareid=pc.id and pc.cid =c.id and pc.pid=ap.id
and c.id = toId and ad.isunify=unifyFlag;
dbms_output.put_line(unifyName||'的'||fromName||'共有'||fromCount||'条记录');
dbms_output.put_line(unifyName||'的'||toName||'共有'||toCount||'条记录');
select max(id) into maxIndex from advdeploy;
select count(1) into tableCount from advdeploy;
dbms_output.put_line('目前advdeploy表中最大ID是'||maxIndex||',共有'||tableCount||'条记录');
dbms_output.put_line('要开始复制了========================================================');
delete from transTempTable;
-- 目标表的pc关系插入到临时表中
insert into transTempTable (oldid, newid ,pid)
select pc.id,pc.id,pc.pid from placecomparecity pc where pc.cid = fromId;
-- 更新compareid为目标城市对应的compareid
for rec in pcCuesor loop
update transTempTable tt set tt.newid=rec.id where tt.pid=rec.pid and rec.cid=toId;
end loop;
-- 将来源城市的数据插入到表中,ID自己增长
insert into advdeploy (id,compareid,isunify,advid)
-- 来源城市已有的
select seqadvdeploy.nextval,ad.compareid,ad.isunify,ad.advid from advdeploy ad, placecomparecity pc, city c, advplace ap
where ad.compareid=pc.id and pc.cid =c.id and pc.pid=ap.id and c.id = fromId and ad.isunify = unifyFlag
-- 目的城市已有的就不用插了
and ap.id not in (
-- 目的城市已有的
select ap.id from advdeploy ad, placecomparecity pc, city c, advplace ap
where ad.compareid=pc.id and pc.cid =c.id and pc.pid=ap.id and c.id = toId and ad.isunify = unifyFlag
);
-- 将表中新插入的数据中的compareid改为目标城市相关的
declare
cursor tempCursor is select * from transTempTable;
begin
for rec in tempCursor loop
update advdeploy ad set ad.compareid = rec.newid where ad.compareid = rec.oldid and ad.id > maxIndex;
end loop;
end;
-- 查询复制后两个城市的条数
select count(ap.id) into fromCount
from advdeploy ad, placecomparecity pc, city c, advplace ap
where ad.compareid=pc.id and pc.cid =c.id and pc.pid=ap.id
and c.id = fromId and ad.isunify=unifyFlag;
select count(ap.id) into toCount
from advdeploy ad, placecomparecity pc, city c, advplace ap
where ad.compareid=pc.id and pc.cid =c.id and pc.pid=ap.id
and c.id = toId and ad.isunify=unifyFlag;
dbms_output.put_line(unifyName||'的'||fromName||'共有'||fromCount||'条记录');
dbms_output.put_line(unifyName||'的'||toName||'共有'||toCount||'条记录');
select max(id) into maxIndex from advdeploy;
select count(1) into tableCount from advdeploy;
dbms_output.put_line('目前advdeploy表中最大ID是'||maxIndex||',共有'||tableCount||'条记录');
dbms_output.put_line('复制结束了========================================================');
end;
分享到:
相关推荐
MySQL 存储过程实例 MySQL 存储过程实例详细介绍了 MySQL 存储过程的开发步骤,本节将通过具体的实例讲解 PHP 是如何操纵 MySQL 存储过程的。 创建存储过程 存储过程的创建是 MySQL 存储过程的基础,MySQL 5.0 ...
在这个例子中,存储过程被调用了六次,每次加薪金额为100元,根据不同的起始工资进行操作。 接下来,我们看几个关于SQL查询的实例,这些实例涉及到了关系数据库中的联接、条件过滤和时间区间查询: 1. 查询...
在这个“Oracle的一个简单存储过程实例”中,我们可以看到如何在Oracle环境中创建、调用和管理存储过程。下面将详细讲解这个主题。 首先,`c.sql`、`b.sql`和`student.sql`可能是包含存储过程定义的脚本文件。这些...
在"DB2存储过程练习"文件中,可能包含了一系列的存储过程示例,如数据的插入、更新、查询等操作,这些实例可以帮助初学者更好地理解如何在实际项目中运用存储过程。 总结,DB2的存储过程是数据库开发的重要工具,...
以下是针对"SQLSERVER存储过程例子"的详细解释。 1. **存储过程的概念**: 存储过程是一组为了完成特定功能的SQL语句,这些语句被组合在一起并保存在数据库中,用户可以通过调用存储过程的名字来执行这些语句。...
### Java调用存储过程实例:详解 #### 存储过程简介 存储过程是一种在数据库中编写的SQL程序,可以接受输入参数,执行一系列操作,并返回结果或输出参数。它们可以提高应用程序的性能、安全性和复用性。在Oracle...
### MySQL存储过程实例教程 #### 存储过程概念与优势 存储过程,作为数据库中一种预编译的SQL语句集合,旨在实现特定功能并存储于数据库内,用户仅需指定其名称及必要参数即可调用执行。这种设计极大地简化了...
下面,我们将深入探讨Oracle存储过程的关键概念,并通过一个具体的实例来理解其构建和执行流程。 ### Oracle存储过程概述 存储过程在数据库服务器上运行,可以包含控制流语句、变量定义、错误处理等结构,使其具备...
在"Oracle创建存储过程例子.docx"中,你可能找到如何定义、创建和执行Oracle存储过程的具体步骤,包括使用CREATE PROCEDURE语句,定义输入和输出参数,以及调用存储过程的示例代码。 "oracle存储过程学习经典[语法+...
在提供的压缩包文件"C#存储过程简单实例"中,可能包含了演示如何在C#中调用存储过程的代码示例。你可以参考这些示例,结合自己的数据库环境进行实践,以便更好地理解和掌握这一技术。记住,实践是检验理论的最好方式...
### Sysbase 存储过程实例详解 #### 一、存储过程概述 存储过程是一种数据库对象,在Sybase(这里应指Sybase SQL Server)这样的数据库管理系统中,存储过程是一组预编译并存储在数据库服务器上的SQL语句和流程...
**实例3**:创建一个名为`temp_sale`的存储过程,将`Product`和`Order`两个表按产品编号连接,形成一个临时表`#temptable`,包含编号、产品名、客户名、订金和总金额(订金乘以订数): ```sql CREATE PROC temp_...
下面我们将详细探讨DB2存储过程的语法、创建、调用以及一些实用实例。 1. **存储过程的语法** 创建DB2存储过程的基本语法如下: ```sql CREATE PROCEDURE procedure_name (IN input_param1 datatype, INOUT ...
本资源结合实例实现一个复杂的存储过程,存储过程中有用到游标、临时表、循环、递归等知识,sql文件附有实例数据表创建的sql语句。
在这个例子中,`p_in` 是一个输入参数,调用存储过程时需要传递一个整数值。 #### 四、调用存储过程 存储过程创建完成后,可以通过以下方式调用: ```sql CALL 过程名([参数[,]]...); ``` 例如,调用前面定义的`...
在本实例中,“完美翻页存储过程”可能涉及到了如何在海量数据中实现快速、平滑的分页查询,同时考虑了性能和用户体验。 首先,我们需要理解分页的基本原理。在Web应用中,当数据量过大时,一次性加载所有记录会...
存储过程实例
### Oracle存储过程实例详解 #### 一、存储过程概述 在Oracle数据库中,存储过程是一种预编译的SQL代码块,它可以包含复杂的逻辑处理,并且能够接收参数、执行操作、返回结果。存储过程的主要优点包括提高性能...
3. **创建存储过程实例** - 创建一个名为`stu_proc`的存储过程,获取`sno`为1的学生的`sname`并显示。 - 可以定义过程参数,如`IN`(输入参数)、`OUT`(输出参数)或`IN OUT`(输入输出参数)。 4. **调用存储...