如何在 Oracle PLSQL 中声明 Windows 路径
Posted
技术标签:
【中文标题】如何在 Oracle PLSQL 中声明 Windows 路径【英文标题】:How to declare Windows path in Oracle PLSQL 【发布时间】:2019-11-21 19:41:58 【问题描述】:我需要从保存在 Windows 中的图像中刻录一个 blob 列。 如何在 Oracle PLSQL 中声明图像路径?
例如:
DECLARE
dest_lob BLOB;
-- this line report ORA22285 "non-existent directory or file for %s operation"
src_lob BFILE := BFILENAME('MY_DIR', 'C:\Users\gus\Desktop\image.jpg');
BEGIN
INSERT INTO teste_gustavo_blob VALUES(2, EMPTY_BLOB())
RETURNING imagem INTO dest_lob;
DBMS_LOB.OPEN(src_lob, DBMS_LOB.LOB_READONLY);
DBMS_LOB.LoadFromFile( DEST_LOB => dest_lob,
SRC_LOB => src_lob,
AMOUNT => DBMS_LOB.GETLENGTH(src_lob) );
DBMS_LOB.CLOSE(src_lob);
COMMIT;
END;
注意:我正在尝试使用 SQLDeveloper 通过 Windows 机器将记录插入表中。数据库位于远程服务器上。
【问题讨论】:
数据库是否在您的本地机器上运行?还是在服务器上?当您说“刻录 blob”时,您的意思是“加载 blob”吗? 【参考方案1】:路径必须是目录对象定义的一部分,而文件名就是这样 - 只是文件名。示例;
CREATE DIRECTORY MY_DIR AS 'C:\Users\gus\Desktop';
..
BFILENAME('MY_DIR', 'image.jpg');
请注意,该目录是在服务器而不是您的本地计算机上创建的。所以如果你试图在本地机器上创建一个文件,这在 pl/sql 中是行不通的。 PL/sql 在服务器上运行,而不是在客户端上。在这种情况下,您需要编写客户端代码。
【讨论】:
错误仍然存在。错误报告 - ORA-22288:文件或 LOBFILEOPEN 操作失败 没有这样的文件或目录 ORA-06512:在“SYS.DBMS_LOB”,第 1014 行 ORA-06512:在第 8 行 22288。00000 -“文件或 LOB 操作%s 失败\ n%s" * 原因:对文件或 LOB 的操作尝试失败。 * 操作:查看错误堆栈中的下一条错误消息以获取更多详细信息。此外,验证文件或 LOB 是否存在以及是否为指定操作设置了必要的权限。如果错误仍然存在,请将错误报告给 DBA。 那么你是在你的windows机器上运行数据库服务器吗? 不,我正在尝试使用 SQLDeveloper 通过 Windows 机器将记录插入到表中 你不能那样做。该文件必须存在于服务器上。来自 oracle 文档 - “目录对象为服务器文件系统上的目录指定别名,外部二进制文件 LOB (BFILE) 和外部表数据位于该目录。”【参考方案2】:数据库只能看到它本地的目录。它无法查看您 PC 上的文件(除非数据库正在该 PC 上运行)。所以你不能通过 PL/SQL 加载你的文件。
但是,您说您正在使用 SQL Developer。您可以通过在 Table Navigator 中编辑表的数据来加载 BLOB。单击Data
选项卡,然后编辑单元格(要将文件加载到的行的BLOB 列)。使用本地数据 > 加载选项上传您的文件。 Jeff Smith 已经发布了a detailed step-by-step guide on his blog。
【讨论】:
以上是关于如何在 Oracle PLSQL 中声明 Windows 路径的主要内容,如果未能解决你的问题,请参考以下文章
Plsql developer 工具创建存储过程,必须要在package 文件下创建存储声明 pa
将值从 Oracle 对象类型参数传递到 PLSQL 表类型参数