Последовательности с PL SQL - PullRequest
1 голос
/ 30 ноября 2011

Я знаю, как создать последовательность в PL SQL.Тем не менее, как бы я установить значения для всех, скажем, 3 цифры?Есть ли другой SQL-оператор, чтобы сделать это, когда я создаю последовательность?

, поэтому пример будет:

000
001
012
003

Спасибо, ребята!

Ответы [ 3 ]

8 голосов
/ 30 ноября 2011

Во-первых, для ясности, вы не создаете последовательности в 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.
3 голосов
/ 30 ноября 2011

давно не использовал plsql, но здесь идет речь:

с целой последовательностью myseq,

to_char(myseq.nextval, '009')
0 голосов
/ 04 декабря 2011

Вы также можете использовать функцию lpad.

В Oracle / PLSQL функция lpad дополняет левую часть строки определенным набором символов.

Например:

lpad('tech', 7);    would return '   tech'
lpad('tech', 2);    would return 'te'
lpad('tech', 8, '0');   would return '0000tech'
lpad('tech on the net', 15, 'z');   would return 'tech on the net'
lpad('tech on the net', 16, 'z');   would return 'ztech on the net'

В вашем примеревы бы использовали

 lpad('tech', 8, '0');  would return '0000tech'

, т.е. если длина строки меньше 8 символов, добавьте 0 в начало строки, пока длина строки не составит 8 символов.

Ссылка: http://www.techonthenet.com/oracle/functions/lpad.php

Кроме того, чтобы добавить 0 справа, вы можете использовать функцию rpad.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...