20

天真的FOO = empty_clob()抱怨不兼容的类型。我尝试了谷歌搜索,但(再一次)在 Oracle 的帮助下几乎没有成功。谢谢。

4

5 回答 5

20

您是否只想检查没有任何长度的 CLOB?虽然不完全是你的要求,但它基本上是一样的?

select *
  from bar
 where dbms_lob.getlength(foo) = 0;

这是完整的测试:

SQL> create table bar (foo clob);

Table created.

SQL> insert into bar values (empty_clob());

1 row created.

SQL> select *
  2    from bar
  3  where dbms_lob.getlength(foo) = 0;

FOO
--------------------------------------------------------------------------------
于 2009-02-06T18:43:29.917 回答
18

如果您尝试在 PL/SQL 中进行比较,您可以像 Igor 的解决方案一样测试相等性

SQL> ed
Wrote file afiedt.buf

  1  DECLARE
  2     dummy  clob;
  3  BEGIN
  4       dummy := empty_clob();
  5        IF dummy = empty_clob() THEN
  6           dbms_output.put_line( 'Dummy is empty' );
  7        ELSE
  8           dbms_output.put_line( 'Dummy is not empty' );
  9        END IF;
 10* END;
SQL> /
Dummy is empty

PL/SQL procedure successfully completed.

如果您尝试在 SQL 中执行此操作,那么您需要使用 DBMS_LOB.COMPARE 函数。表中的 LOB 列实际上是 LOB 定位器(即指针),所以您真正关心的是 LOB 指向的值与 EMPTY_CLOB() 函数返回的 LOB 定位器所指向的值相当。

SQL> desc bar
 Name                                      Null?    Type
 ----------------------------------------- -------- ------------------------

 FOO                                                CLOB

SQL> insert into bar values ('123');

1 row created.

SQL> insert into bar values( empty_clob() );

1 row created.

SQL> insert into bar values( empty_clob() );

1 row created.

SQL> ed
Wrote file afiedt.buf

  1  select count(*)
  2    from bar
  3*  where dbms_lob.compare( foo, empty_clob() ) = 0
SQL> /

  COUNT(*)
----------
         2

SQL> ed
Wrote file afiedt.buf

  1  select count(*)
  2    from bar
  3*  where dbms_lob.compare( foo, empty_clob() ) != 0
SQL> /

  COUNT(*)
----------
         1
于 2009-02-06T20:37:58.127 回答
3

像这样的东西应该适用于初始化:

DECLARE
   dummy  clob;
   dummy2 clob;
BEGIN
     dummy := empty_clob();
      IF dummy = empty_clob() THEN
         dummy2 := dummy;
      END IF;
END;
于 2009-02-06T18:31:50.253 回答
1

在 SQLplus 中测试空 clob 的一种简单方法是在执行测试之前将所有 CLOBS 转换为 varchar2(使用 TO_CHAR 函数):

SELECT *
  FROM table1
  WHERE TO_CHAR(table1.column1) IS NULL
于 2016-08-19T14:00:07.523 回答
0
DECLARE
    dummy    CLOB := 'fxsgf';
    dummy1   CLOB;
BEGIN
    IF dummy1 = EMPTY_CLOB ()
    THEN
        DBMS_OUTPUT.put_line ('Dummy1 is empty');
    ELSE
        DBMS_OUTPUT.put_line ('Dummy1 is not empty');
    END IF;

    IF dummy = EMPTY_CLOB ()
    THEN
        DBMS_OUTPUT.put_line ('Dummy is empty');
    ELSE
        DBMS_OUTPUT.put_line ('Dummy is not empty');
    END IF;
END;
于 2021-06-17T06:56:31.547 回答