PL SQL的序列

HAx*_*xor 1 sql database oracle plsql

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

所以一个例子是:

000
001
012
003
Run Code Online (Sandbox Code Playgroud)

多谢你们!

Jus*_*ave 8

首先,为了清楚起见,您不要在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.
Run Code Online (Sandbox Code Playgroud)

  • @NoobyBooby - '009'格式掩码说"将数字转换为3个字符长的字符串,填充前导0".'fm'格式掩码说"删除通常会保留的前导空格,以便负数在报表中正确对齐".如果你想要一个用0填充的4字符串,你可以使用'fm0009'. (2认同)
  • 除了贾斯汀的优秀帖子,我只想补充一点:数据总是数字化吗?3位数和前导零是显示要求,对吗?如果是这样,我认为你应该将序列值存储在表中的NUMBER数据类型中,然后在输出上使用TO_CHAR()函数来适当地格式化数据. (2认同)