【问题标题】:Oracle get numbers with rangeOracle 获取范围内的数字
【发布时间】:2013-11-18 10:07:09
【问题描述】:

这是我的序列表:

+-----------------+-----------------+
|  START_SERIAL   |   END_SERIAL    |
+-----------------+-----------------+
| 120500216057150 | 120500216057155 |
| 120500216057157 | 120500216057157 |
| 120500216057161 | 120500216057164 |
+-----------------+-----------------+

需要得到这样的结果:

120500216057150 
120500216057151 
120500216057152 
120500216057153 
120500216057154 
120500216057155
120500216057157
120500216057161....

请帮我解决这个问题。 [似乎需要带有for循环的pl-sql。?]

编辑 亲爱的TechDo, pl/sql 在这里的用法如下。但是它给了我一个错误:-)

DECLARE
  start_serial  NUMBER;
  end_serial  NUMBER;
  records NUMBER;
BEGIN
  select start_serial INTO start_serial
    from sales_details ;
  select (start_serial+no_of_cards)as end_serial into end_serial
    from sales_details;
  select count(*) as records into records 
    from sales_details;

  FOR i IN 1..records  LOOP
    INSERT INTO temp (serial_no)
    VALUES(i);
  END LOOP;
END;
/

【问题讨论】:

  • @实际上你需要一个for循环的方法来解决这个问题?
  • 添加pl-sql的答案如何?

标签: sql oracle plsql


【解决方案1】:

请尝试:

select 
  distinct START_SERIAL+level-1 SERIAL
from 
  YourTable
connect by level-1<=END_SERIAL-START_SERIAL
order by 1;

【讨论】:

  • 非常感谢亲爱的 TechDo 现在它的 sorted.wt abt pl-sql 用于该问题。?
  • +1 为简单起见。 @TechDo 只是好奇,为什么是dual table?
  • 绝对没有必要交叉加入YourTabledual。你为什么做这个?通过这样做,您只是在执行计划中添加了一个nested loop,并增加了查询的总成本,无论它多么微不足道。
  • @NicholasKrasnov 请添加解决方案。这对所有人都有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
相关资源
最近更新 更多