尝试在Oracle中读取文件时出现无效文件操作异常

尝试在Oracle中读取文件时出现无效文件操作异常,oracle,plsql,Oracle,Plsql,我需要将文件读取到oracle中的变量 我已经创建了一个具有读写权限的目录对象。 Oracle正在windows上运行 CREATE DIRECTORY AUTHC AS 'C:\Users\oracle\Documents\authscript'; GRANT READ ON DIRECTORY AUTHC TO PUBLIC; GRANT WRITE ON DIRECTORY AUTHC TO PUBLIC; DECLARE vInHandle utl_file.file_type; v

我需要将文件读取到oracle中的变量

我已经创建了一个具有读写权限的目录对象。 Oracle正在windows上运行

CREATE DIRECTORY AUTHC AS 'C:\Users\oracle\Documents\authscript';
GRANT READ ON DIRECTORY AUTHC TO PUBLIC;
GRANT WRITE ON DIRECTORY AUTHC TO PUBLIC;
DECLARE
 vInHandle utl_file.file_type;
 vNewLine  VARCHAR2(250);
BEGIN
  vInHandle := utl_file.fopen('AUTHC', 'common.auth.script', 'R');

  utl_file.fclose(vInHandle);
END fopen;
但是,得到的异常为“无效文件操作” *原因:试图从文件或目录中读取 不存在,或文件或目录访问被拒绝 操作系统


我不是oracle用户。是否有办法找到oracle用户并检查权限

要找到oracle用户,请打开de任务管理器并检查进程“oracle.exe”的“用户名”。

要找到oracle用户,请打开de任务管理器并检查进程“oracle.exe”的“用户名”.

如果提到的文件已经存在,并且您希望消除非oracle用户的此问题,则从
sys
user创建目录,并
您的用户
授予读、写权限

--login as sys user(owner of Oracle) as sysdba
CREATE DIRECTORY AUTHC AS 'C:\Users\oracle\Documents\authscript';
GRANT READ ON DIRECTORY AUTHC TO your_user; -- replace your_user with user name of the user you are using
GRANT WRITE ON DIRECTORY AUTHC TO your_user; -- replace your_user with user name of the user you are using
-- note: grant to the directory should be given to the user and not the role


--Login with your_user
DECLARE
 vInHandle utl_file.file_type;
 vNewLine  VARCHAR2(250);
BEGIN
  vInHandle := utl_file.fopen('AUTHC', 'common.auth.script', 'R');

  utl_file.fclose(vInHandle);
END fopen;

干杯

如果提到的文件已经存在,并且您希望消除非oracle用户的此问题,则从
sys
用户创建目录,并
您的用户
授予读、写权限

--login as sys user(owner of Oracle) as sysdba
CREATE DIRECTORY AUTHC AS 'C:\Users\oracle\Documents\authscript';
GRANT READ ON DIRECTORY AUTHC TO your_user; -- replace your_user with user name of the user you are using
GRANT WRITE ON DIRECTORY AUTHC TO your_user; -- replace your_user with user name of the user you are using
-- note: grant to the directory should be given to the user and not the role


--Login with your_user
DECLARE
 vInHandle utl_file.file_type;
 vNewLine  VARCHAR2(250);
BEGIN
  vInHandle := utl_file.fopen('AUTHC', 'common.auth.script', 'R');

  utl_file.fclose(vInHandle);
END fopen;


干杯

排除明显的:在运行oracle软件的服务器(计算机)上创建了(Windows)目录
C:\Users\oracle\Documents\authscript
?是的,在oracle服务器中排除明显的:在服务器(计算机)上创建了(Windows)目录
C:\Users\oracle\Documents\authscript
Oracle软件在哪里运行?是的,它在Oracle服务器中。我已检查了Oracle用户,并授予了该文件的读取权限。仍然会发生异常请重新检查C:\Users\oracle\Documents\authscript\common.auth.script是否存在,以及它是否为操作系统专用。是的,文件和权限在那里。我已检查oracle用户,并已授予该文件的读取权限。仍然出现异常请重新检查C:\Users\oracle\Documents\authscript\common.auth.script是否存在,以及它是否为OS privs。是的,文件和权限在那里。当我在授予权限时尝试更改用户时,它表示用户或角色“oracle”不存在,因此您试图表示您的用户不存在?您的用户名是什么?只需在grant命令中替换它并执行它即可。是的,我确实替换了它。我应该将其替换为运行oracle的用户,对吗?不。您应该创建目录,并从运行oracle的用户处授予该目录。替换由您自己的登录用户完成。运行oracle的用户-这是指登录数据库的用户还是运行oracle的操作系统用户?不太清楚您所说的“自己的用户”是什么意思?当我在授予特权时尝试更改用户时,它会说用户或角色“ORACLE”不存在,所以您试图说您的用户不存在?您的用户名是什么?只需在grant命令中替换它并执行它即可。是的,我确实替换了它。我应该将其替换为运行oracle的用户,对吗?不。您应该创建目录,并从运行oracle的用户处授予该目录。替换由您自己的登录用户完成。运行oracle的用户-这是指登录数据库的用户还是运行oracle的操作系统用户?不太清楚自己的用户是什么意思?