Oracle 12c - 使用表中的值构建select语句

时间:2014-05-30 21:47:38

标签: sql oracle oracle12c

我有一个复杂的需求,但我会尽量保持简单,并用我的大脑来满足我的基本需求。

我有一个表,TABLE1,有两列,ID(INTEGER)LVL_CNT(INTEGER)& CLOB_COLUMN(CLOB)CLOB_COLUMN将有一个select语句。以下是每列中保存的值以显示示例。

ID = 1 LVL_CNT = 10 CLOB_COLUMN将具有如下脚本:

SELECT     'ID',
           'Name',
           'Description',
           'Group',
           'Level Count',
           'Usage',
           'Snapshot Date',
           'Conformed Hierarchy',
           'Level Name:',
           'Level Name:',
           'Level Name:',
           'Level Name:',
           'Level Name:',
           'Level Name:',
           'Level Name:',
           'Level Name:',
           'Level Name:',
           'Level Name:
FROM dual;

目前,我正在手动编写CLOB脚本,但我想自动构建它以避免为所有记录编写它。 “'级别名称:'”被迭代10次,因为LVL_CNT = 10.如果LVL_CNT = 5,则迭代“'级别名称:'”5次。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

Select rpad('level name:', lvl_cnt*length('level name:'), 'level name:') 
from yourtable

应该为您提供级别名称:级别名称:级别名称:级别名称:'对于lvl_cnt = 4


跟进任务(级别名称1:级别名称2:...)

有一个简单但不可扩展的解决方案。如果你知道你的最大lv_cnt并且它不是很大[max varcahr2 2000 / length(' level name001')= 142](例如,最多lvl_cnt = 4):

 select susbtr(
 rpad(
 rpad(
 rpad('level name1:', 
 2*length('level name1:'), 'level name2:'),
 3*length('level name1:'), 'level name3:'),
 4*length('level name1:'), 'level name4:'),
 1, lvl_cnt*length('level name1:')
 from dual

当你超过10,100时,这将是复杂的逻辑...因为它会影响整体长度,但你可以将格式更改为' level name001:'保持简单:)。

...但是如果你考虑一下,它就像预建字符串

select substr('level name1:level name2:level name3:level name4:', 1, lvl_cnt*12) 
from dual