ナイーブFOO = empty_clob()
は、互換性のない型について不平を言います。私はグーグルを試しましたが、(もう一度) Oracle のヘルプを検索することにほとんど成功しませんでした。ありがとう。
Hank Gay
質問する
75019 次
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 に答える