我对 Oracle 和 BFILE 不是很有经验,所以如果我的问题的答案很明显,我很抱歉。我正在使用 Oracle SQL Developer 和 Oracle Database 12c 企业版。
我尝试通过 BFILE 在外部保存图像。为此,我创建了一个目录和一个表并插入了 BFILE:
DROP DIRECTORY PICTURE;
CREATE OR REPLACE DIRECTORY PICTURE AS 'C:\PICTURE';
DROP TABLE TEST1;
CREATE TABLE TEST1( NR INTEGER, IMAGE BFILE );
INSERT INTO TEST1 VALUES( 1, BFILENAME('PICTURE','IMG.png') );
代码运行没有错误。现在我想检查我是否正确粘贴了代码。为此,我使用以下函数。
SELECT DBMS_LOB.GETLENGTH(IMAGE) FROM TEST1;
执行该函数后,我收到以下错误消息。
ORA-22288: file or LOB Operation GETLENGTH failed
The system could not find the specified path.
ORA-06512: in "SYS.DBMS_LOB", line 850
可能是什么原因?难道是我不允许这样指定路径吗?该路径指向我电脑上的一个文件夹。程序可以访问吗?如果这不是问题,那么可能导致错误消息的原因是什么?
更新:
当我运行 Grand 命令为我分配权限时,我收到以下错误消息
SQL > GRANT READ, WRITE ON DIRECTORY PICTURE TO XYZ;
ORA-01749: you may not GRANT/REVOKE privileges to/from yourself
我认为这意味着我已经拥有权利。
在 XYZ 工作时连接:
SQL> show user
USER is "XYZ"
SQL> select * from all_directories where directory_name = 'EXT_DIR';
OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ ------------------------------ --------------------
SYS PICTURE c:\PICTURE
SQL>
对于其余的代码,我的输出与 Littlefoot 回答的输出一致。只有使用 .getlength () 函数才能收到上述错误消息。
问题可能是我的 PC 不是数据库服务器。我使用装有 Windows 10 的 PC。我下载了以下版本:
https://www.oracle.com/de/tools/downloads/sqldev-v192-downloads.html
我每次使用资源管理器中的以下图标运行应用程序:
然后在 SQL Developer 中,我连接到一个数据库实例。在数据库实例中,我可以使用一个方案来设置和管理文件。正如我所说,带有图片的 PICTURE 文件夹位于我的 PC 上的驱动器 C: 中。我正在尝试创建一个目录,然后访问该文件夹。我可以在没有专门配置我的 PC 的情况下这样做吗?