【问题标题】:SQL truncate clob fieldSQL 截断 clob 字段
【发布时间】:2018-08-27 06:03:14
【问题描述】:

在 Oracle 中,我有一个类似的查询:

CREATE TABLE my_table
(
    my_field CLOB,
    my_field2 VARCHAR2(50 CHAR),
    my_field3 VARCHAR2(5 CHAR),
)

我想运行这个查询:

select count(*)
from my_table
where my_field = substr('...',4000,1)

当我运行查询时,我得到一个错误:

  1. 00000 - “字符串文字太长”
    *原因:字符串字面量超过 4000 个字符。
    *操作:使用最多 4000 个字符的字符串。
    较长的值只能使用绑定变量输入。

请指教!

【问题讨论】:

  • 您的示例无法理解。请更准确地描述...是什么?如果我运行这样的选择,我会收到错误消息ORA-00932: inconsistent datatypes: expected - got CLOB

标签: sql oracle where-clause truncate clob


【解决方案1】:

正如错误消息所说,Oracle 正在滚动,因为您尝试使用其中包含超过 4000 个字节的字符串文字。一种替代方法是使用绑定变量(如建议的那样):

VARIABLE my_field CLOB;
EXEC :my_field := 'some really long text here longer than 4000 bytes';

SELECT COUNT(*)
FROM my_table
WHERE my_field = :my_field;

【讨论】:

    【解决方案2】:

    您正在使用 4000 个字符的 substr,您的字符集可能是一个多字节字符集,因为它的内存超过 4k 字节。 我可以建议的另一种方法是使用 plsql varchar2 变量。限制为 32767。

    Declare
     my_field varchar2(32767) := <Long text>;
     v_count number;
    begin
    SELECT COUNT(*) into v_count FROM my_table
    WHERE my_field = my_field;
    
    end;
    /
    

    【讨论】:

      猜你喜欢
      • 2021-07-25
      • 1970-01-01
      • 2016-01-06
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多