我已经编写了此 SQL,但收到以下错误:
ORA-00932:数据类型不一致:预期 - 得到 BLOB
这是 SQL :
SELECT DISTINCT
file_name,
JPEG_IMG
table_repo
WHERE
file_name = 'K1A98'
AND JPEG_IMG is not NULL;
如果您发布测试用例,将会有所帮助。
示例表:请注意,它有一个主键列。
SQL> create table test
2 (id number primary key,
3 file_name varchar2(20),
4 jpeg_img blob
5 );
Table created.
与您的查询类似的查询,即选择文件名和 image(BLOB 列的内容)不起作用,正如您所知:
SQL> select distinct
2 file_name, jpeg_img
3 from test;
file_name, jpeg_img
*
ERROR at line 2:
ORA-00932: inconsistent datatypes: expected - got BLOB
但是,如果您包含主键,它就可以工作:
SQL> select distinct
2 id, file_name, jpeg_img
3 from test;
no rows selected
当然,这没有多大意义,因为主键无论如何都必须是唯一的,所以 - 如果您应用这样的代码 - 您将从表中获取所有行。
另一种选择是计算 BLOB 列的长度(如果这对您来说足够好):
SQL> select distinct
2 file_name, dbms_lob.getlength(jpeg_img) jpeg
3 from test;
no rows selected
更好的选择是计算哈希:
SQL> select distinct
2 file_name, dbms_crypto.hash(jpeg_img, 2) jpeg
3 from test;
no rows selected
SQL>
(当然,在我的示例中没有选择任何内容,因为
test
表为空;您应该会得到一些结果)。