V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiangyuecn
V2EX  ›  数据库

到底是什么人在用 Oracle 数据库啊,一条 sql 里面写个长点的字符串都不支持(>32767)😅

  •  
  •   xiangyuecn · 2023-07-27 11:19:27 +08:00 · 1236 次点击
    这是一个创建于 510 天前的主题,其中的信息可能已经有所发展或是发生改变。

    没有装 Oracle (这玩意太大了),用的在线学习使用: https://livesql.oracle.com/

    吐了,如果是要编写.sql 文件,我要怎么把超长文本丢到这个 sql 文件里面?要求不高 1MB 以内的文本就 ok

    测试 clob 本身是能存储长字符串( clob 最大 4GB 容量),这条语句能正常执行:

    declare txt clob:=''; i int:=0; begin
        while i<50*1000 loop
            txt:=txt||'a'; i:=i+1;
        end loop;
        dbms_output.put_line('txt: '||dbms_lob.getlength(txt));
    end;
    

    如果一条 sql 里面包含了 32k 以上字符串(指:sql 里所有字符串总长度),sql 就执行不了了:

    declare txt clob:=''; begin
        txt:=txt||'...'; -- ... 是手写长度为 1000 的字符串
        txt:=txt||'...';
        -- 这里省略了手写 50 个 txt:=txt||'...'; -- 测试最多能放 32 行,再多一行就不行了
        
        dbms_output.put_line('txt: '||dbms_lob.getlength(txt));
    end;
    

    淦。目前使用到的唯一存在这种恶心问题的数据库。官方 limit 文档: https://docs.oracle.com/en/database/oracle/oracle-database/21/lnpls/plsql-program-limits.html

    5 条回复    2023-08-05 22:50:28 +08:00
    xshell
        1
    xshell  
       2023-07-27 13:59:00 +08:00
    oracle 稳如老狗。
    很多银行保险运营商都在用,包括一些大的公司财务数据库。
    hyperbin
        2
    hyperbin  
       2023-08-03 14:17:38 +08:00 via Android
    因为默认 varhcar ,to_clob()后再拼接就行了
    xiangyuecn
        3
    xiangyuecn  
    OP
       2023-08-03 19:21:44 +08:00
    @hyperbin 没用的,clob 类型的变量上使用 to_clob 和 | 拼接没有区别,原因是手写字符串超过 32k 这条 sql 语句都是没法解析的
    hyperbin
        4
    hyperbin  
       2023-08-04 08:18:26 +08:00 via Android
    @xiangyuecn 那就是设计问题了,Oracle 和你这边的设计都有问题
    xiangyuecn
        5
    xiangyuecn  
    OP
       2023-08-05 22:50:28 +08:00
    @hyperbin 今天电脑上特意装了 Oracle 测试了一下,没有这个问题了,用 txt:=txt||'...'; 这种就行
    sql developer 里面,只要''里面手写的单个文本不要超过 32767 字节就 ok 了,无限拼接
    sqlplus 里面,只要''里面手写的单个文本不要超过 3000 字节,也是无限拼接

    看起来是 https://livesql.oracle.com/ 不行,不清楚他们是哪里给代码下药了,本以为 pgsql 是最难用的,没想到要让位给 oracle 了😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5051 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 05:42 · PVG 13:42 · LAX 21:42 · JFK 00:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.