函数:获取一个序列的下一个数(没有序列的话会自动创建)
时间:2021-08-09
本文章向大家介绍函数:获取一个序列的下一个数(没有序列的话会自动创建),主要包括函数:获取一个序列的下一个数(没有序列的话会自动创建)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
获取一个序列的下一个数
没有序列的话会自动创建,省的每次手动创建序列了
-- Created on 2021/8/9 by WANGQY
CREATE OR REPLACE FUNCTION "F_GETMAXID_BYSEQUENCE"(paraSeqName in varchar2) --(入参)序列名称
return number is pragma AUTONOMOUS_TRANSACTION; --声明为自治事务
varCursorCount number; --(变量)记录找到的序列数量
varCursorID number; --(变量)与新创建的游标相关联的游标ID。
varSQL varchar2(1000); --(变量)SQL语句
varExedRows number; --(变量)EXECUTE函数的返回值(增删改时的返回值,其他操作下没有意义)
varMaxID number; --(返回值)序列最大ID。出错时返回-1
begin
--查询当前是否已存在这个序列
SELECT count(*)
into varCursorCount
FROM USER_OBJECTS
WHERE OBJECT_NAME = upper(paraSeqName)
AND OBJECT_TYPE = 'SEQUENCE'
AND STATUS = 'VALID';
--如果已存在这个序列
if varCursorCount > 0 then
varSQL := 'select ' || paraSeqName || '.nextval from dual';
varCursorID := dbms_sql.open_cursor; --打开游标
--向服务器发出一个语句并检查这个语句的语法和语义错误
dbms_sql.parse(varCursorID, varSQL, dbms_sql.v7);
--在SELECT列表中定义了一个列或者表达式,这个列或者表达式将在游标中返回和取出
dbms_sql.define_column(varCursorID, 1, varMaxID);
--执行此语句,因为执行的是查询,所以必须跟着Fetch_Rows函数并为单个行检索数据
varExedRows := dbms_sql.execute(varCursorID);
if dbms_sql.fetch_rows(varCursorID) = 0 then
--FETCH_ROWS从一个游标中获取一条记录。--如果成功获取一条记录,这个参数返回1,如果没有取回记录,那么返回0
varMaxID := -1; --如果没有取回记录
else
dbms_sql.column_value(varCursorID, 1, varMaxID);
--存储过程COLUMN_VALUE定义了一个变量,用于从游标中接收值
--参数1:游标的id。参数2:在游标中返回数据的位置。参数3:通过前面的fetch操作在游标中接收返回数据的变量
end if;
--关闭游标
dbms_sql.close_cursor(varCursorID);
return varMaxID;
--如果没有这个序列
else
varSQL := 'create sequence ' || paraSeqName ||
' minvalue 1 maxvalue 999999 start with 1 increment by 1 cache 20 cycle';
--创建序列
varCursorID := dbms_sql.open_cursor;
dbms_sql.parse(varCursorID, varSQL, dbms_sql.v7);
varExedRows := dbms_sql.execute(varCursorID);
dbms_sql.close_cursor(varCursorID);
--递归自己(进入if分支)
return F_GETMAXID_BYSEQUENCE(paraSeqName);
end if;
--报错
exception when others then varSQL := sqlerrm; rollback;
return - 1;
end F_GETMAXID_BYSEQUENCE;
参考文档:
原文地址:https://www.cnblogs.com/soraxtube/p/15119041.html
- RestQL:现代化的 API 开发方式
- 在递归函数中因不正确使用公共变量而形成死循环
- 用R语言做时间序列分析(附数据集和源码)
- Windows Live Writer插入代码vs2010插件
- 分布式队列编程优化篇
- 基于机器学习方法的POI品类推荐算法
- 【Scikit-Learn 中文文档】多类和多标签算法 - 监督学习 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】新异类和异常值检测 - 无监督学习 - 用户指南 | ApacheCN
- Golang中使用echo框架、MongoDB、JWT搭建REST API
- 在对象的原型上添加方法?
- KMeans聚类算法思想与可视化
- 控制台断点调试
- 函数声明与表达式的区别
- 揭开身份证验证的神秘面纱
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python制作小脚本,一键可以让你同事的电脑在你指定时间关机
- Python小白爬虫入门的第一个案例:爬取全站小说
- Python基础入门知识点——字符串的介绍
- 文章要保存为TXT文件,其中的图片要怎么办?Python帮你解决
- 分析B站弹幕,川普同志暴露的那一天,没有一个鬼畜up是无辜的
- python-爬取地理坐标
- Python基础第一个案例:猜数字游戏,这个都写不出,那就放弃吧
- 现在听歌要各大平台到处跑,嫌麻烦?制作个人专属的音乐下载器
- 爬取上市公司数据、分析数据,并用可视化现实全国各地区公司数量
- 今天刚上手爬虫,当然要从最简单的开始啦,验证一下所学的知识
- Python数据可视化入门:使用Matplotlib绘图
- 有了音乐下载器,怎么能没有音乐播放器呢,打造自己的音乐播放器
- 七夕节到了,单身狗程序员要对自己好点,用代码送自己点安慰
- 面向对象视角下的前端工程体系
- 使用 Python破解大众点评字体加密(SVG反爬虫)