【问题标题】:Select long list of parameters in Oracle using see使用查看在 Oracle 中选择一长串参数
【发布时间】:2011-12-20 14:22:33
【问题描述】:

我有一个很长的选择列表可用于 oracle db 中的 select in 子句,它给了我一个错误提示

SP2-0027:输入太长(> 2499 个字符) - 行被忽略

有没有更好的方法来获取这些数据?

我的查询是这样的

select * from clicks where click_id in( ''comma seperated list '');

逗号分隔列表类似于('1','2','3','4'.....)

【问题讨论】:

    标签: database oracle


    【解决方案1】:

    拆分列表。例如,

    select * from clicks
    where click_id in ('1','2','3','4')
    or click_id in ('5','6','7','8');
    

    等等

    【讨论】:

      【解决方案2】:

      用子查询替换您的“逗号分隔列表”:

      select * from clicks where click_id in( SELECT click_id ...);
      

      【讨论】:

        【解决方案3】:

        用 SubSELECT 语句替换逗号分隔的列表。

        WHERE click_id IN ( SELECT id FROM the_interesting_clicks WHERE ... )
        

        [ORACLE] 对于这种情况,您可能需要GLOBAL TEMPORARY TABLE:它们的内容是事务或会话的本地内容(取决于您声明表的方式)。因此:使用您多次调用的准备好的 INSERT 语句加载该临时表,然后使用子选择。

        【讨论】:

        • 我没有数据库的写权限
        • @TopCoder: id 列表是如何构建的?可以推迟到数据库吗?
        • 我从 DW 获得数据,我在那里面临同样的约束
        【解决方案4】:

        这是 SQL*Plus 的错误,而不是 SQL。只需在字符 2500 之前的某处添加一个换行符。或者在不同的环境中执行该语句,例如 SQL Developer。

        类似于@John Doyle 的建议,尽管您不需要使用单独的条件:

        select * from clicks
        where click_id in ('1','2','3','4',
        '5','6','7','8');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-08
          • 1970-01-01
          • 1970-01-01
          • 2012-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多