我们如何生成一个以1001开头并在select语句中使用的序列号,并在lpad中使用' 0这样的序列值。这是为了从Db表中将记录插入CSV文件,这段代码是用光标写的。任何人都可以建议最好的方法来做到这一点。我得到了一个示例查询,查询是否有效?
select lpad((create sequence customer.seq as int start with 1001 increment by 1),11,0);
答案 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的建议使用rownum
或row_number
。
你问,
然后何时是使用序列号的最佳方法 &#34;序列&#34;功能
这是来自Oracle文档。
序列号的生成与表格无关,因此相同 序列可用于一个或多个表。有可能的 单个序列号似乎会被跳过,因为 它们是在最终滚动的事务中生成和使用的 回来。
在一个用户生成序列值后,该用户可以 无论序列是什么,都继续访问该值 由另一个用户增加。
所以,希望很清楚。如果您只是将记录从Db表插入CSV文件,并且此代码是用光标写的,则无需使用序列。但话又取决于你是如何从你正在谈论的光标中取出的。如果您可以提供更多详细信息,我们可以帮助您构建所需的查询/ PL / SQL块(如果有)。
答案 1 :(得分:1)
在Oracle中执行此操作的最佳方法是使用rownum
或row_number()
:
select lpad(1000 + rownum, 11, 0) as newcol, . . .
from t;
光标中不需要序列或变量。
您也可以考虑使用游标的替代方法。