UTL_FILE.FOPEN() 如何声明和分配目录路径?
UTL_FILE.FOPEN() how to declare and assign the directory path?
我有这段代码可以使用蟾蜍从 Oracle 数据库中提取图像,但是当它声明提取图像后保存图像的目录时,我遇到了挑战。我希望将这些图像保存在本地计算机的 C:\Images\ 文件夹中。这是可能的还是我应该如何指定目录?
当我执行代码时得到 Invalid file operation
DECLARE
t_blob BLOB;
t_len NUMBER;
t_file_name VARCHAR2(100);
t_output UTL_FILE.file_type;
t_TotalSize number;
t_position number := 1;
t_chucklen NUMBER := 4096;
t_chuck raw(4096);
t_remain number;
BEGIN
-- Get length of blob
SELECT DBMS_LOB.getlength (PHOTO), ename || '_1.jpg'
INTO t_TotalSize, t_file_name FROM DEMO WHERE ENAME ='moon';
t_remain := t_TotalSize;
-- The directory TEMPDIR should exist before executing
t_output := UTL_FILE.fopen ('C:\Images\', t_file_name, 'wb', 32760);
-- Get BLOB
SELECT PHOTO INTO t_blob FROM DEMO WHERE ENAME ='moon';
-- Retrieving BLOB
WHILE t_position < t_TotalSize
LOOP
DBMS_LOB.READ (t_blob, t_chucklen, t_position, t_chuck);
UTL_FILE.put_raw (t_output, t_chuck);
UTL_FILE.fflush (t_output);
t_position := t_position + t_chucklen;
t_remain := t_remain - t_chucklen;
IF t_remain < 4096
THEN
t_chucklen := t_remain;
END IF;
END LOOP;
END;
你应该使用 DIRECTORY 对象,
create or replace directory my_dir as 'c:\Images\';
declare
v_dir varchar2(10) := 'MY_DIR';
.....
begin
....
t_output := utl_file.fopen(v_dir, t_file_name, 'wb', 32760);
....
首先要知道,当您执行任何处理文件的 PL/SQL 脚本时,这总是在 运行 oracle 实例的服务器范围内执行。
在这种情况下,路径 "C:\Image\" 需要存在于 Oracle 运行.
的服务器上
您可以使用的一种策略是将脚本执行到服务器的文件夹中,然后通过 terminal/console 上的复制命令获取文件夹数据。
我有这段代码可以使用蟾蜍从 Oracle 数据库中提取图像,但是当它声明提取图像后保存图像的目录时,我遇到了挑战。我希望将这些图像保存在本地计算机的 C:\Images\ 文件夹中。这是可能的还是我应该如何指定目录?
当我执行代码时得到 Invalid file operation
DECLARE
t_blob BLOB;
t_len NUMBER;
t_file_name VARCHAR2(100);
t_output UTL_FILE.file_type;
t_TotalSize number;
t_position number := 1;
t_chucklen NUMBER := 4096;
t_chuck raw(4096);
t_remain number;
BEGIN
-- Get length of blob
SELECT DBMS_LOB.getlength (PHOTO), ename || '_1.jpg'
INTO t_TotalSize, t_file_name FROM DEMO WHERE ENAME ='moon';
t_remain := t_TotalSize;
-- The directory TEMPDIR should exist before executing
t_output := UTL_FILE.fopen ('C:\Images\', t_file_name, 'wb', 32760);
-- Get BLOB
SELECT PHOTO INTO t_blob FROM DEMO WHERE ENAME ='moon';
-- Retrieving BLOB
WHILE t_position < t_TotalSize
LOOP
DBMS_LOB.READ (t_blob, t_chucklen, t_position, t_chuck);
UTL_FILE.put_raw (t_output, t_chuck);
UTL_FILE.fflush (t_output);
t_position := t_position + t_chucklen;
t_remain := t_remain - t_chucklen;
IF t_remain < 4096
THEN
t_chucklen := t_remain;
END IF;
END LOOP;
END;
你应该使用 DIRECTORY 对象,
create or replace directory my_dir as 'c:\Images\';
declare
v_dir varchar2(10) := 'MY_DIR';
.....
begin
....
t_output := utl_file.fopen(v_dir, t_file_name, 'wb', 32760);
....
首先要知道,当您执行任何处理文件的 PL/SQL 脚本时,这总是在 运行 oracle 实例的服务器范围内执行。
在这种情况下,路径 "C:\Image\" 需要存在于 Oracle 运行.
的服务器上您可以使用的一种策略是将脚本执行到服务器的文件夹中,然后通过 terminal/console 上的复制命令获取文件夹数据。