sql - 使用 PL SQL 的序列

标签 sql database oracle plsql

我知道如何在 pl sql 中创建一个序列。但是,我如何将值设置为全部有 3 位数字?当我创建一个序列时,是否有另一个 sql 语句来执行此操作?

举个例子:

000
001
012
003

谢谢大家!

最佳答案

首先,明确一点,您不在 PL/SQL 中创建序列。您只能在 SQL 中创建序列。

其次,如果您希望一列恰好存储三位数字,您需要将数据类型设置为 VARCHAR2(或其他一些字符串类型),而不是更常见的 NUMBER 因为 NUMBER 根据定义不存储前导零。当然,您可以这样做,但这很不寻常。

就是说,您可以使用“fm009”格式掩码从数字序列中生成一个恰好包含 3 个字符的字符串(需要“fm”位以确保您不会获得额外的空格——您可以 TRIM TO_CHAR 调用的结果,并免除掩码的“fm”位)。

SQL> create table t( col1 varchar2(3) );

Table created.

SQL> create sequence t_seq;

Sequence created.

SQL> ed
Wrote file afiedt.buf

  1  insert into t
  2    select to_char( t_seq.nextval, 'fm009' )
  3      from dual
  4*  connect by level <= 10
SQL> /

10 rows created.

SQL> select * from t;

COL
---
004
005
006
007
008
009
010
011
012
013

10 rows selected.

关于sql - 使用 PL SQL 的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8319315/

相关文章:

php - 4 0' OR ' 1'=' 1 这个容易被sql注入(inject)?

sql - 分页使用搜索方法(键集)

oracle - 从Grails的Oracle数据库表中的第1行插入数据

sql - 使用嵌套表时如何避免在触发器中改变表,并更新到另一个表?

sql - 从表中删除重复项并将引用行重新链接到新的主表

php - SQL语法问题(同一段代码,给我一个错误!我不明白。)

mysql - 当我用信息填充表时,我是否会丢失表的 3NF

mysql - 我可以将查询指定为字段的默认值吗?

SQL 获取每一项的总计

java - Oracle/JDBC : Problem with correct Timezone of rows