Oracle Apex - 我应该使用 Empty_BLOB() 还是 null?

Oracle Apex - should I use Empty_BLOB() or null?

我目前正在使用 Oracle Apex 5.1.2。

我在数据库中创建了一个 table,其中包含一个可以容纳 BLOB 数据类型的列、一个文件名列和一个 MIME 类型列。

在我的 APEX 应用程序中,我有一个文件浏览页面项。此页面项目的目的是允许最终用户将文件附加到页面。这部分工作完美 - 用户能够使用该项目浏览文件并将其附加到页面,然后下载文件以查看它。

问题:我希望最终用户能够在需要时删除附件,并且,如果他们愿意,可以在其位置附加另一个文件。我的想法是创建一个按钮,并在按钮的设置中将操作设置为 "Submit Page" 并将数据库操作设置为 SQL 更新操作。然后我将创建一个 PL/SQL 代码类型的页面进程,并在设置中设置服务器端条件,以便在按下我创建的按钮时发生该进程。在该过程的 PL/SQL 代码部分,根据我所做的研究,我有以下两种选择之一:

UPDATE table_name
SET blob_column = EMPTY_BLOB()
WHERE my_id = id

或:

UPDATE table_name
SET blob_column = null
WHERE my_id = id

我已经尝试了这两个选项并且它们都有效,但我不知道哪个选项更适合我想要实现的目标。我试图研究这个问题,但不幸的是我找不到我正在寻找的确切答案。有人有什么建议吗?

提前致谢。

见仁见智,因为两个选项都删除了之前的附件。

我认为大多数人会使用 blob_column = null 表示 "no attachment",而 blob_column = empty_blob() 表示 "blank file attached"。所以我建议使用 null,但正如你所说,无论哪种方式都可以正常工作。

我认为这取决于您希望如何测试空值

http://nuijten.blogspot.com.au/2009/11/empty-clob-is-not-null-its-not-null.html

如果您使用 empty_blob() 更新 blob 列,那么在选择如下记录时必须小心:

suppose you want all records where blob column has some file (useful) then you have to select like below

select * from your_table where SYS.DBMS_LOB.GETLENGTH(blob_column) > 0;

但是如果你用 null 更新你的 blob 列,那么你可以简单地写成:

select * from your_table where blob_column is not null;