在select

时间:2017-10-29 13:21:40

标签: sql oracle plsql

我们如何生成一个以1001开头并在select语句中使用的序列号,并在lpad中使用' 0这样的序列值。这是为了从Db表中将记录插入CSV文件,这段代码是用光标写的。任何人都可以建议最好的方法来做到这一点。我得到了一个示例查询,查询是否有效?

select lpad((create sequence customer.seq as int start with 1001 increment by 1),11,0);

2 个答案:

答案 0 :(得分:3)

此查询将生成从1001开始的10个数字序列,并用零填充。

select LPAD ( 1000 + LEVEL ,11,0 ) FROM DUAL CONNECT BY LEVEL <= 10;

<强>输出

   id_column
   ------------
    00000001001
    00000001002
    00000001003
    00000001004
    00000001005
    00000001006
    00000001007
    00000001008
    00000001009
    00000001010

如果您需要在表格的其他列中选择使用此类系列,则最好按照Gordon的建议使用rownumrow_number

你问,

  

然后何时是使用序列号的最佳方法   &#34;序列&#34;功能

这是来自Oracle文档。

  

序列号的生成与表格无关,因此相同   序列可用于一个或多个表。有可能的   单个序列号似乎会被跳过,因为   它们是在最终滚动的事务中生成和使用的   回来。

     

在一个用户生成序列值后,该用户可以   无论序列是什么,都继续访问该值   由另一个用户增加。

所以,希望很清楚。如果您只是将记录从Db表插入CSV文件,并且此代码是用光标写的,则无需使用序列。但话又取决于你是如何从你正在谈论的光标中取出的。如果您可以提供更多详细信息,我们可以帮助您构建所需的查询/ PL / SQL块(如果有)。

答案 1 :(得分:1)

在Oracle中执行此操作的最佳方法是使用rownumrow_number()

select lpad(1000 + rownum, 11, 0) as newcol, . . .
from t;

光标中不需要序列或变量。

您也可以考虑使用游标的替代方法。