之前对于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恢复至指定值)...相关推荐

  1. oracle 删序列,oracle创建和删除序列

    |NOMAXVALUE}] [{CYCLE|NOCYCLE}] [{CACHE n|NOCACHE}]; START WITH:定义序列的初始值(即产生的第一个值),默认为1. INCREMENT:用 ...

  2. Oracle同义词(Synonym)创建删除

    Oracle对象知识:同义词(Synonym)创建删除,同义词(Synonym)是数据库对象的一个别名,Oracle可以为表.视图.序列.过程.函数.程序包等指定一个别名.同义词有两种类型: `私有同 ...

  3. Oracle OAF 学习小结(2)- 增删改查/LOV/Button/Sequence 的完整案例开发

    开发配置 了解EBS服务器目录 $JAVA_TOP JSP中可以引用标准Java类库,也可以引用其他Java类库,客户化开发的类库统一放在$JAVA_TOP下,按目录组织.OAF开发的文件都放在这里. ...

  4. oracle insert汉字出错,Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名...

    本文主要向大家介绍了Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. Oracle数据库,用 ...

  5. oracle批量加载,Oracle教程:使用SQL*Loader高速批量数据加载工具

    Oracle教程:使用SQL*Loader高速批量数据加载工具 1.控制文件中包含要加载的数据 首先创建一张测试表 然后创建一个控制文件(其中包含被加载的数据) 然后在命令行执行加载 查看dept表 ...

  6. Oracle删库跑路

    --10g R2 startup mount exclusive restrict; alter system enable restricted session; drop database;--1 ...

  7. oracle insert 数组,oracle 数组 批量insert

    场景:[转]jdbc批量insert---oracle数组类型与forall的使用 [转]jdbc批量insert---oracle数组类型与forall的应用 原文:http://blog.itpu ...

  8. oracle批量建同义词,Oracle批量创建同义词

    一.介绍 Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系.它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用 ...

  9. oracle批量创建序列号,Oracle数据库中创建并利用序列号生成ID

    已经有了序列后,怎么样自动生成ID? 其实是用一条包含序列号的sql语句从dual表中查出的id再赋值给id 以下举两条实战的sql: select '00010222' ||  lpad(seq_s ...

最新文章

  1. 肝了3版才满意:分布式系统之CAP理论,我们对它的理解和误解
  2. OWASP 2017 Top10 漏洞体系
  3. SQL*Loader之CASE8
  4. MKMapView的Span和Region深入分析
  5. 两数之和,两数相加(leetcode)
  6. java免检异常_java-异常
  7. python查看微信撤回消息_python如何查看微信消息撤回
  8. java 奇数 字符乱码_socket中文奇数个出现乱码的解决办法
  9. python必背代码-Python一些实用代码
  10. 标准库举例:sys、copy
  11. 正则表达式 (入门)
  12. Java Web 项目音乐网站的开发与实现
  13. 卡方 python_用Python进行卡方分析
  14. 2D人体姿态估计 - Stakced Hourglass Network(SHN)个人理解
  15. 每日小技巧~教你如何用 Python 快速批量转换 HEIC 文件
  16. 了解设计模式 之 结构模式(四) -- 装饰模式
  17. DM达梦数据库dminit使用手册
  18. 【BLE MESH】PB-ADV入网详解
  19. NBA+大数据,数字经济重塑体育帝国!
  20. 京东数科java一面【过】

热门文章

  1. ManageEngine 详解IT服务管理(ITSM)流程五阶段
  2. IDC运维团队技术交流----金盾防火墙基本操作
  3. ios通过URL地址,从网络上获取图片
  4. postman格式化
  5. 《人生的智慧》读后感
  6. 数商云采购系统解决方案 | 建筑工程行业采购管理之招标业务场景应用
  7. 蓄电池内阻变化规律 解释电车猛加速电压降低,匀速后又上升
  8. Android 实现Service悬浮窗监听实时网速
  9. 编程题:字符串循环左移(ROL)
  10. 软件测试自学指南---从入门到精通V2.0