创建以字母数字开头的 Oracle 序列

2024-04-16

我想创建以字符开头的序列inv并增加 1

的价值观

INV01
INV02
INV03  
etc...
CREATE SEQUENCE invoice_nun
START WITH "INV"
INCREMENT BY 1

只能创建整数值序列。

所以声明必须是:

CREATE SEQUENCE invoice_nun
  START WITH 1
  INCREMENT BY 1;

您可以将获取的值转换为字符串并添加适当的前缀。

select 'INV'||to_char(invoice_nun.nextval,'FM09999999') 
  from dual;

您可以创建一个函数来模拟返回适当字符串值的序列

create or replace function next_invoice_nun return varchar2
  as
  begin
  return('INV'||to_char(invoice_nun.nextval,'FM09999999') );
  end;
/ 

你现在可以做

select next_invoice_nun 
  from dual;

上面定义的序列使用一些默认值。这记录在数据库 SQL 语言参考 https://docs.oracle.com/database/121/SQLRF/statements_6017.htm#SQLRF01314。相当于下面的语句

CREATE SEQUENCE invoice_nun
  CACHE 20
  NOORDER
  START WITH 1
  INCREMENT BY 1;

您应该了解以下几点:

1) 如果事务获取序列值并回滚,则序列值将丢失。因此,如果您执行以下操作:

-- fetch invoice_id INV00000001
insert into invoices(invoice_id,...) values (next_invoice_nun,...);   
commit;
-- fetch invoice_id INV00000002
insert into invoices(invoice_id,...) values (next_invoice_nun,...);
rollback;
-- fetch invoice_id INV00000003
insert into invoices(invoice_id,...) values (next_invoice_nun,...);
commit;

发票 IDINV00000001andINV00000003are inserted in theinvoicestable but the invoice idINV00000002` 丢失,因为获取它的语句已回滚

2) 如果实例崩溃,该实例缓存中的所有序列都会丢失。在您的示例中,使用缓存的默认值,即 20。因此,如果实例崩溃,最多 20 个序列值可能会丢失。另一种方法是使用关键字NOCYCLE如果您创建序列但这会带来性能损失。

3) 如果在RAC系统上,序列号并不代表获取语句的顺序。所以有可能第一条语句获取的是idINV00000021第二条语句获取 idINV00000001如果第二条语句在与第一条语句不同的实例上执行。这是因为该实例在其缓存中获取了前 20 个序列号,而另一个实例在其缓存中获取了后 20 个序列号。第一条语句在获取后 20 个序列号的实例上执行。您可以使用ORDER关键字来避免这种情况,但这又会带来性能损失

因此,我们可以避免 2) 和 3),但代价是性能损失,但无法避免 2)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建以字母数字开头的 Oracle 序列 的相关文章

  • Oracle中如何检查所有字段是否唯一?

    Oracle中如何检查所有字段是否唯一 SELECT myColumn COUNT FROM myTable GROUP BY myColumn HAVING COUNT gt 1 如果出现次数大于 1 即它们不是唯一的 这将返回所有 my
  • 如何使用 Oracle 清理死连接?

    现在 我正在针对 Oracle 数据库开发一些新应用程序 有时它们会崩溃或无法正确结束 等等 无论如何 问题是它们有时似乎保持连接打开 我需要在它们之后进行清理 我的问题是 是否有一种方法可以从数据库端确定死连接并清理它们 这是一个页面 涉
  • 为什么 where 子句中不允许使用聚合函数

    我正在寻求对此的澄清 我在下面写了两个查询 我们有一个员工姓名表 其中包含 ID 姓名 薪水列 1 Select name from employee where sum salary gt 1000 2 Select name from
  • 截断表后序列不会重置

    我在截断表后使用 SELECT lastval 来获取错误的序列号 当我截断表时 我使用 SELECT lastval 我得到了错误的 ID Use the TRUNCATESQL 命令 对于单个表 语法如下 TRUNCATE TABLE
  • Oracle SQL Developer:如何查看引用游标的结果?

    如果我有一个返回查询引用游标的函数 我如何在 SQL Developer 中查看其结果集 Toad 有一个特殊的选项卡 用于查看参考光标的结果 这是我想要找到的功能 SET SERVEROUTPUT ON VARIABLE X REFCUR
  • 从命令行安装 Oracle 客户端,无需用户交互

    我正在寻找一种在 Windows 上安装 Oracle 客户端但从命令行运行的方法 为了自动运行它应有没有用户交互 对于 Oracle Universal Installer 的命令行选项 Oracle 文档非常稀疏 即使运行设置为setu
  • 精度和规模有什么区别?

    Oracle中精度和小数位数有什么区别 在教程中 他们通常在创建主键时将比例保留为空并将精度设置为 6 精度和规模代表什么 精度 4 尺度 2 99 99 精度 10 小数位数 0 9999999999 精度 8 标度 3 99999 99
  • 如何从 Oracle 中的日期中减去小时数,以便它也影响当天

    我正在尝试从 Oracle 中减去日期 这样它甚至也会影响这一天 例如 如果 时间戳是 01 June 2015 00 小时 如果我减去 2 小时 我希望能够转到 31 May 2014 22 小时 I tried to char sysd
  • 如何在oracle中的字母数字列中使用order by

    在我的表的一列中 我有一个如下所示的值 Y 1 Y 2 Y 3 Y 4 Y 5 Y 6 Y 7 Y 8 Y 9 Y 10 Y 11 Y 12 Y 13 Y 14 当我按此列排序时 如果该行的值高达 Y 9 则它工作正常 否则我的结果是错误的
  • 这是 Oracle 可能的错误还是我遗漏了什么?

    数据库是 Oracle 10 2 0 1 0 64 位 在 Red Hat Enterprise Linux ES 第 4 版 Nahant 更新 8 上运行 在 SQL Plus 中 以下代码可以完美运行 var comment id n
  • 从数字字符串生成行

    我有一个 Oracle 18c 表 其中包含如下字符串 select 0 5 0 10 10 11 18 30 0 33 54 50 10 33 54 60 10 43 54 as multipart lines There are mor
  • 更改 Oracle 11g 或 12c 中的表/列/索引名称大小

    我使用oracle 11g并且需要名称大小大于30个字符 我知道11g中的最大大小是30个字符 我可以更改这个最大尺寸吗 Oracle 12c 中表 列 索引名称的最大大小是多少 数据库对象名称位于11g https docs oracle
  • PL/SQL 中的 BEGIN - END 块原子事务

    这些信息应该很容易找到 但我没有任何运气 当我有一个BEGIN ENDPL SQL 中的块 它是否表现为原子事务 它将尝试在命中时提交END阻止 如果出现问题会回滚更改吗 如果不是 我如何确保 BEGIN END 块内的代码的行为类似于原子
  • 插入触发器是否需要提交语句

    这是实际场景的简化 在哪里可以看到表 B 上缺失的记录 假设有两个数据库表 A B 表 A 上有一个插入触发器 它对表 B 进行插入 但它没有 COMMIT 如果我们通过 JDBC 连接器打开数据库连接 并对表 A 进行插入 并提交 触发器
  • 小数点分隔符 oracle

    我需要用点替换逗号 然后我需要我的值是一个数字 所以我写了这个 select replace 12345 6789 from dual it works fine 但后来我想转换to number该值 我收到错误 invalid numbe
  • ORA-00972 标识符别名列名太长

    我有一个查询 例如 SELECT column as averyveryveryverylongalias more than 30 characters FROM Table name 它返回错误ORA 00972 标识符太长 有什么技巧
  • 如何将 SELECT...INTO 与 JOIN 一起使用?

    我有以下示例代码 DECLARE myRow table rowtype myVar table2 column type BEGIN SELECT table col1 table col3 table col4 table2 colum
  • Oracle 中的 MD5 (DBMS_OBFUSCATION_TOOLKIT.MD5)

    我正在尝试编写一个函数 从我到处收集的位中获取 MD5 哈希值 我想获得哈希的小写十六进制表示 到目前为止我有这个 CREATE OR REPLACE FUNCTION MD5 CADENA IN VARCHAR2 RETURN DBMS
  • SELECT DISTINCT 和 SELECT UNIQUE 之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 Oracle 9i 中的唯一与不同多列 https stackoverflow com questions 174912 unique vs distinct multi column in orac
  • 处理ORACLE异常

    我需要处理ORA 01400 错误 http www techonthenet com oracle errors ora01400 php 无法使用异常句柄将 NULL 插入 SCHEMA TABLE NAME COLUMN NAME O

随机推荐

  • Swift 协议只能设置吗?

    为什么我可以毫无错误地执行此操作 var testDto ModelDto modelId 1 testDto objectId 2 当我定义这个时 protocol DataTransferObject var objectType Dt
  • 浮动操作按钮不显示矢量资源

    I m trying to setup a vector asset into a fab But the result is like this As you can see the vector is there but way dow
  • 有没有办法在Oracle表的指定位置添加列? [复制]

    这个问题在这里已经有答案了 考虑一下我在 Oracle 10G 中创建的初始表 CUSTOMER ID ACC NO ACC BALANCE 100 200 1000 101 150 4000 102 350 2000 103 450 25
  • FFmpeg - 找不到 ExecuteBinaryResponseHandler - Android/Java

    我正在尝试制作一个用于反应原生的模块 它将把视频变成 gif 我对 android studios java 几乎没有经验 但我很想了解更多 我在用这个图书馆 https github com WritingMinds ffmpeg and
  • React Native 箭头函数和“if”语句

    我刚刚接受了箭头函数的教育 以及当您开始使用子函数时它们如何帮助提高可见性React Native 和全局可访问的对象 https stackoverflow com questions 50209526 react native and
  • gdb:“未加载符号表”

    尝试在 gdb 中添加断点时 我不断收到此错误消息 我使用这些命令来编译 gcc g main c utmpib2 c o main o and cc g main c utmpib2 c o main o and also g g mai
  • 升级到 RN 0.68 后 APK 中缺少 index.android.bundle

    将我们的 RN 应用程序升级到 RN 0 68 后 我们在发布版本中遇到错误 FATAL EXCEPTION create react context Process com app PID 15057 java lang RuntimeE
  • 应用程序的私有文件

    我想创建一个文件来存储一些只能由我的应用程序访问的数据 外部用户不应该能够访问该文件或对其进行任何更改 我将在文件中存储一个密钥 该密钥可能由我的应用程序访问需要时随时使用应用程序 使用Environment getDataDirector
  • Meteor如何调用Meteor.methods()中定义的方法?

    我将方法分配给 Meteor 服务器 如下所示 在 bootstrap js 中 Meteor startup function Meteor methods foo function return 1 bar function QUEST
  • Direct2D 位图画笔拉长

    我必须在屏幕外位图上绘制形状 但是当我尝试渲染位图时遇到一个奇怪的问题 这就是图像的显示方式 这就是我查看位图的方式 以下是我用来创建位图画笔的代码 const auto size renderTarget gt GetSize const
  • 内容更改时停止文本小部件滚动

    我有一个带有滚动条的文本小部件 看起来像这样 self myWidget Text root self myWidget configure state DISABLED self myWidget pack self myWidgetSc
  • 在线性回归中使用数据框的列名称作为预测变量

    我正在尝试遍历 data frame 的所有列名称并使用它们 作为线性回归中的预测变量 我目前拥有的是 for i in 1 11 for j in 1 11 if i j var1 names newData i var2 names n
  • 奇怪的错误 TypeError:无法在 onSuccessMapUnitFields 处读取 null 的属性“setValue”[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 这段代码运行得很好 直到我决定再添加 4 行代码 所以我删除了它们 但我收到了这个错误 有趣的是我在Form onloa
  • 防止在弹出窗口外部单击时关闭 SweetAlert

    我在用甜蜜警报电子商务应用程序中我的产品视图上的弹出窗口有两个按钮 一个用于进入购物车视图 另一个用于重新加载视图 但是 当用户在弹出窗口外部单击时 弹出窗口会自动关闭 我已尝试以下属性来阻止其关闭 但没有任何作用 hideOnOverla
  • 将多个模型和自定义字段添加到 Django Rest Framework 中的 json 响应

    我是 Python Django 编程新手 在我正在做的个人项目中遇到了一些问题 我的问题是 我想根据应用程序的不同模型返回自定义响应 一些值将来自自定义查询 其他值是模型本身的一部分 因此 我的应用程序中有以下模型 删除了一些字段以免帖子
  • CodeIgniter 中的超级对象是什么?

    我在 超级对象 中看到了 超级对象 这个词代码点火器手册 http codeigniter com user guide general creating libraries html 但该术语没有详细解释 那么 CodeIgniter 中
  • 在c中动态增加数组(int *)的大小

    我想动态地将数字添加到c中的数组中 我的想法是分配一个大小 1 的新数组 添加数字 释放根数组并将指针从 temp 更改为根数组 像这样 void addNumber int a int size int number size size
  • Django 根据日期时间按日期进行分组计数

    我正在尝试计算用户从日期时间字段注册的日期 在数据库中 它存储为 2016 10 31 20 49 38 但我只对日期 2016 10 31 感兴趣 原始 SQL 查询是 select DATE registered at register
  • Javascript Gallery 自动使用页面上的所有大图像

    我有一个网站 一个大页面上有很多图像 最简单的是我可以包含一个脚本 它自动搜索同一页面并使用所有大于 100 像素的图像来创建幻灯片库 有人知道这样一个简单的脚本 不需要任何编程技能吗 我发现这是一个开始 jQuery 获取大于特定尺寸的元
  • 创建以字母数字开头的 Oracle 序列

    我想创建以字符开头的序列inv并增加 1 的价值观 INV01 INV02 INV03 etc CREATE SEQUENCE invoice nun START WITH INV INCREMENT BY 1 只能创建整数值序列 所以声明