oracle删sequ_[oracle package]sequence处理(批量创建、删除sequence,将sequence恢复至指定值)...
之前对于oracle的包不太熟悉,最近深入学习了plsql中的包。在做项目过程中,操作数据库时,存在大量重复的工作,正好写个package来巩固下所学。
一.先对写的东西碰到的问题作下说明,也方便以后自己回顾解决问题的过程:
1.如何给存储过程或函数传递数组参数
2.如果直接运行创建sequence的语句可以正常运行,用的也是dba权限,但是在存储过程、函数、包中写的创建sequence的语句运行后却提示没有权限
3.如何给序列做回退操作
(1)网上有说无法回退,只能删掉重新创建;
(2)其实还有别的方法,可以利用sequence本身的increment值来处理
下面写的是第二个链接的情况(借鉴的也是第二种。这两个链接实现效果不同,但原理都是一样的,都利用了sequence本身的increment值来处理)
二.接下来,直接上代码:create or replace package myutil_pkg authid current_user as
--定义通用的字符串数组参数类型(传入或返回参数)
type tab_str is table of varchar2(30);
/**
* 将序列的当前值恢复至指定数字
* seqName 序列名称
* num 需要恢复到哪个数字
**/
--使用示例:
/**
* begin
* myutil_pkg.updateSeqToNum('seq_mytest',1);
* end;
*
* 运行select seq_mytest.currval from dual;可以进行验证
*/
procedure updateSeqToNum(seqName varchar2, num number);
/**
* 批量创建序列
* seqNames 序列名称数组
**/
--使用示例:
/*
declare
seqNames myutil_pkg.tab_str:=myutil_pkg.tab_str(null);
begin
seqNames.extend(2,1);
seqNames(1):='seq_mytest1';
seqNames(2):='seq_mytest2';
seqNames(3):='seq_mytest3';
myutil_pkg.createSeqs(seqNames);
end;
*/
procedure createSeqs(seqNames tab_str);
/**
* 批量删除序列
* seqNames 序列名称数组
**/
--使用示例:
/*
declare
seqNames myutil_pkg.tab_str:=myutil_pkg.tab_str(null);
begin
seqNames.extend(2,1);
seqNames(1):='seq_mytest1';
seqNames(2):='seq_mytest2';
seqNames(3):='seq_mytest3';
myutil_pkg.dropSeqs(seqNames);
end;
*/
procedure dropSeqs(seqNames tab_str);
end myutil_pkg;create or replace package body myutil_pkg as
/**
* 将序列的当前值恢复至指定数字
* seqName 序列名称
* num 需要恢复到哪个数字
**/
procedure updateSeqToNum(seqName varchar2, num number) as
n number;
comm_exception exception;
begin
if num < 1 then
raise comm_exception;
else
--https://blog.csdn.net/u010999809/article/details/79943924
--https://blog.csdn.net/pete_emperor/article/details/82853277
--获取序列的下一个值
execute immediate 'select '||seqName||'.nextval from dual' into n;
--修改序列的minvalue参数
execute immediate 'alter sequence '||seqName||' minvalue 1';
if n>1 then
n:=-(n-num); --这里是要恢复到num(num>=1)
--修改increment参数
execute immediate 'alter sequence '||seqName||' increment by '||n;
execute immediate 'select '||seqName||'.nextval from dual' into n;
--恢复increment参数值
execute immediate 'alter sequence '||seqName||' increment by 1';
end if;
end if;
exception
when comm_exception then
raise_application_error(-20001,'序列数字不能小于1');
end updateSeqToNum;
/**
* 批量创建序列
* seqNames 序列名称数组
**/
procedure createSeqs(seqNames tab_str) as
begin
--https://blog.csdn.net/zzkongfu/article/details/7480958
--https://blog.csdn.net/wonder4/article/details/649869
--提示权限不足
--https://blog.csdn.net/jerryitgo/article/details/79220598
--http://www.cnblogs.com/yhoralce/p/6817010.html?utm_source=itdadao&utm_medium=referral
--循环table中的数据
for i in 1 .. seqNames.count loop
--如果存放的不是空字符串,则拼接语句执行创建序列
if seqNames(i) is not null then
--dbms_output.put_line('++++++'||seqNames(i));
execute immediate 'create sequence '||seqNames(i)||' '||
'minvalue 1 start with 1 '||
'increment by 1 cache 20';
end if;
end loop;
end createSeqs;
/**
* 批量删除序列
* seqNames 序列名称数组
**/
procedure dropSeqs(seqNames tab_str) as
begin
for i in 1 .. seqNames.count loop
if seqNames(i) is not null then
execute immediate 'drop sequence '||seqNames(i);
end if;
end loop;
end dropSeqs;
end myutil_pkg;
oracle删sequ_[oracle package]sequence处理(批量创建、删除sequence,将sequence恢复至指定值)...相关推荐
- oracle 删序列,oracle创建和删除序列
|NOMAXVALUE}] [{CYCLE|NOCYCLE}] [{CACHE n|NOCACHE}]; START WITH:定义序列的初始值(即产生的第一个值),默认为1. INCREMENT:用 ...
- Oracle同义词(Synonym)创建删除
Oracle对象知识:同义词(Synonym)创建删除,同义词(Synonym)是数据库对象的一个别名,Oracle可以为表.视图.序列.过程.函数.程序包等指定一个别名.同义词有两种类型: `私有同 ...
- Oracle OAF 学习小结(2)- 增删改查/LOV/Button/Sequence 的完整案例开发
开发配置 了解EBS服务器目录 $JAVA_TOP JSP中可以引用标准Java类库,也可以引用其他Java类库,客户化开发的类库统一放在$JAVA_TOP下,按目录组织.OAF开发的文件都放在这里. ...
- oracle insert汉字出错,Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名...
本文主要向大家介绍了Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. Oracle数据库,用 ...
- oracle批量加载,Oracle教程:使用SQL*Loader高速批量数据加载工具
Oracle教程:使用SQL*Loader高速批量数据加载工具 1.控制文件中包含要加载的数据 首先创建一张测试表 然后创建一个控制文件(其中包含被加载的数据) 然后在命令行执行加载 查看dept表 ...
- Oracle删库跑路
--10g R2 startup mount exclusive restrict; alter system enable restricted session; drop database;--1 ...
- oracle insert 数组,oracle 数组 批量insert
场景:[转]jdbc批量insert---oracle数组类型与forall的使用 [转]jdbc批量insert---oracle数组类型与forall的应用 原文:http://blog.itpu ...
- oracle批量建同义词,Oracle批量创建同义词
一.介绍 Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系.它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用 ...
- oracle批量创建序列号,Oracle数据库中创建并利用序列号生成ID
已经有了序列后,怎么样自动生成ID? 其实是用一条包含序列号的sql语句从dual表中查出的id再赋值给id 以下举两条实战的sql: select '00010222' || lpad(seq_s ...
最新文章
- 肝了3版才满意:分布式系统之CAP理论,我们对它的理解和误解
- OWASP 2017 Top10 漏洞体系
- SQL*Loader之CASE8
- MKMapView的Span和Region深入分析
- 两数之和,两数相加(leetcode)
- java免检异常_java-异常
- python查看微信撤回消息_python如何查看微信消息撤回
- java 奇数 字符乱码_socket中文奇数个出现乱码的解决办法
- python必背代码-Python一些实用代码
- 标准库举例:sys、copy
- 正则表达式 (入门)
- Java Web 项目音乐网站的开发与实现
- 卡方 python_用Python进行卡方分析
- 2D人体姿态估计 - Stakced Hourglass Network(SHN)个人理解
- 每日小技巧~教你如何用 Python 快速批量转换 HEIC 文件
- 了解设计模式 之 结构模式(四) -- 装饰模式
- DM达梦数据库dminit使用手册
- 【BLE MESH】PB-ADV入网详解
- NBA+大数据,数字经济重塑体育帝国!
- 京东数科java一面【过】