0

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

我有一个表 TABLE1,有 2 列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 脚本,但我想自动构建它以避免为所有记录编写它。“'Level Name:'”被迭代 10 次,因为 LVL_CNT = 10。如果 LVL_CNT = 5,则迭代“'Level Name:'”5 次。我怎样才能做到这一点?

4

1 回答 1

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

应该给你'级别名称:级别名称:级别名称:级别名称:' for lvl_cnt = 4


使用 (level name1: level name2:...) 跟进任务

有一个简单但不可扩展的解决方案。如果您知道您的最大 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
于 2014-05-31T03:32:51.123 回答