我对oracle和bfiles不是很有经验,所以如果我的问题答案很明显,我很抱歉。我使用的是oracle sql developer和oracle database 12c enterprise edition。
我尝试通过bfile将图像保存到外部。为此,我创建了一个目录和一个表,并插入了bfiles:
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()函数,我才能得到上面描述的错误消息。
问题可能是我的电脑不是数据库服务器。我用的是装有windows10的电脑。我下载了以下版本:
https://www.oracle.com/de/tools/downloads/sqldev-v192-downloads.html
我每次都使用浏览器中的以下图标运行应用程序:
sql开发人员图标
在sqldeveloper中,我连接到一个数据库示例。在数据库示例中,我可以使用一个方案来设置和管理文件。如我所说,带有图片的图片文件夹位于我的pc驱动器c:。我试图创建一个目录,然后访问这个文件夹。我可以这样做,没有特别配置我的电脑?
1条答案
按热度按时间nbnkbykc1#
目录是一个oracle对象,它指向一个文件系统目录(通常是;让我们假设“总是”)位于数据库服务器上。如果你的电脑不是一个,那么它将无法工作。
目录指向
c:\picture
在数据库服务器上,那个目录一定真的存在那里
图像一定在里面
确保没有遗漏实际的文件名
作为用户,您必须(至少)
read
有权访问它。这就是你发布的代码中缺少的内容。创建目录的用户(sys,我猜)应该运行。
(或者你真正使用的用户)。
下面是一个例子。我在笔记本电脑上运行oracle11gxe(所以它是一个数据库服务器)。文件位于
c:\temp
设置为oracle的目录EXT_DIR
目录。让我们看看oracle方面:首先,授予用户
scott
(谁将加载文件):连接方式
scott
:创建表格,插入行,检查内容:
所以,如果每件事都做得很好,它就会起作用。