oracle存储过程clob类型参数为null问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle存储过程clob类型参数为null问题相关的知识,希望对你有一定的参考价值。

create or replace procedure add_app_msg_push(v_title in varchar2,v_msg in CLOB,v_time in timestamp,v_url in varchar2) isv_id number(30);old_msg clob;v_count number(30);v_msg_part varchar2(1000);v_length number(30);begin if v_msg is null then dbms_output.put_line('null'); return; else insert into APP_MSG_PUSH_HISTORY (ID, TITLE, MSG, TIME, URL) values (v_id, v_title, empty_clob(), v_time,v_url); dbms_output.put_line('not null'); end if; v_count := 1; v_length := dbms_lob.getlength(v_msg); select msg into old_msg from APP_MSG_PUSH_HISTORY where id = 91; dbms_output.put_line(dbms_lob.getlength(old_msg)); dbms_output.put_line('--'); dbms_output.put_line(dbms_lob.getlength(v_msg)); dbms_output.put_line('--');end add_app_msg_push;
上面是我写的存储过程,入参有个v_msg是clob类型的,然后我进行了下面测试

我怎样才能传进去clob类型的值,求大神救命

-- Created on 2014-11-05 by EMO 

DECLARE

    -- Local variables here

    PROCEDURE clob_test(p_clob CLOB) IS

    BEGIN

        dbms_output.put_line('CLOB' || p_clob);

    END;

BEGIN

    -- Test statements here

    clob_test(:l_clob);

END;


我把类型从CLOB改成了 String , 测试完全没问题,用CLOB是不行的


输出

参考技术A 这个你百度试试

存储在数据库中时,Oracle CLOB 有多大?

【中文标题】存储在数据库中时,Oracle CLOB 有多大?【英文标题】:How big is an Oracle CLOB when stored in database? 【发布时间】:2022-01-10 13:06:06 【问题描述】:

如果我有这样的桌子

id  |   CLOB         | Title
1   | Text,Text,Te...| Tom Sawyer
2   | null           | Illustration

“CLOB”字段通常为空。会发生什么?内存会浪费在空值字符串上吗?如果有,多少钱?

【问题讨论】:

【参考方案1】:

“内存”和“存入数据库”一般是没有关系的;数据存储在磁盘上,而不是内存中(除非您有内存数据库)。

无论如何:如果 CLOB 为空或短字符串,它只使用很少的空间 - 无论是存储在磁盘上还是复制到内存进行处理时。有一个始终存在的 CLOB 定位器(指向实际数据存储位置的指针),以及存储 CLOB 的实际位置。只使用实际数据所需的空间 - 没有“巨大的空间浪费”。

【讨论】:

我一直在尝试计算一个 empty_lob 的 lob 定位器的大小,但我看到了一个 .125MB 的片段......然后我的数学又可能是错误的 @thatjeffsmith - 你肯定不是那个意思;定位器只是一个指针。你的意思是数据的大小,而不是定位器?无论如何——你是怎么做到的?如果你认为你找到了定位器的大小(而不是它指向的数据),你是怎么做到的?

以上是关于oracle存储过程clob类型参数为null问题的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 存储过程因复杂类型的 clob 而失败,并带有 ORA-22922

Clob 作为 PL/SQL Java 存储过程的参数

Oracle存储过程OUT CLOB返回错误字符串缓冲区太小

oracle中LOBSEGMENT类型存储的clob的内容过大,如何清除clob字段内容。释放表空间!

提问一个关于Java中操作Oracle里的CLOB类型数据的问题

oracle 对于大文本数据用啥类型