【问题标题】:input string to table输入字符串到表
【发布时间】:2011-05-10 03:38:36
【问题描述】:

我正在为 oracle 10g 使用 SQL 进行一些调试。我有一个用于“IN 子句”的大输入字符串,即

select * from table where col in ('str2','str3','str4','str5',...) 

我想将 in 子句转换为行或表? 有没有办法做到这一点,即

select 'str2','str3','str4','str5', .. from dual 

但这输出多列,我想要多行?

编辑:

这就是我想要做的。假设我在 tmp_table1 中有一个 excel 数据(实际上无法创建)并且 tmp_table1 与 IN 子句相同,那么下面的语句将给出缺少的键。

SELECT *
  FROM tmp_table1
 WHERE unique_id NOT IN (
               SELECT unique_id
                 FROM table1
                WHERE unique_id IN
                                 ('str1', 'str2', 'str3', 'str4'))

现在@andriy-m solution 在输入字符串小于 4000 时有效。但如果它更大呢?

【问题讨论】:

    标签: sql plsql oracle10g


    【解决方案1】:

    您可能正在寻找this solution

    【讨论】:

    • 谢谢,这几乎是我需要的。自从我收到“ORA-01704:字符串文字太长”错误以来,我的字符串怎么看起来很长
    • @spiderdevil - Oracle 对 4000 个字符的字符串有绝对限制。如果这对您来说还不够,您需要一种不同的方法,一种使用 PL/SQL 的方法。请编辑您的问题,向我们提供有关您想要实现的目标的更多详细信息。
    【解决方案2】:

    您可以将这些值合并到多行中:

    SELECT 'str2' AS col FROM dual
    UNION
    SELECT 'str3' FROM dual
    UNION
    SELECT 'str4' FROM dual
    UNION
    SELECT 'str5' FROM dual
    

    【讨论】:

    • 谢谢,但正如我所说,我有一个很大的输入,即大于或等于 300 个输入 sring 'str2'、'str3'、'str4'、'str5'、...'str300' ...而且做联合看起来需要做很多工作:(
    • 我不知道输入来自哪里(外部程序、文本文件、您的键盘......)但是您可以将值插入到临时表中并加入它以进行过滤您的查询。
    • 输入来自 excel 文件。我复制并粘贴它们以形成 in 子句。 (通过将 \n 替换为 ',')。我没有创建临时表的权限。没有别的办法吗?
    • 如果要将子句中的值转换为行,并且无法创建临时表,我知道除了 UNION 之外别无他法。但是让我问一下:为什么需要将 IN 子句中的值转换为行?
    • 所以这就是我想要做的......我的 table1 包含主键 str1、str2、str3...str500。excel 也包含相同的 table1 键,但其中几个是无效的......现在我想比较两个键来找出哪个无效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多