我正在尝试将查询中的数据导出到安装在Windows Server 2008计算机上的Oracle Enterprise Express的csv文件中.
我找到了这个解决方案:
http://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:235814350980
它基本上编写一个函数并使用UTIL_FILE对象来创建和写入文件并添加分隔符.
当我尝试在Oracle SQL Developer中创建函数时收到以下错误:
PLS-00201: identifier UTIL_FILE must be declared.
Run Code Online (Sandbox Code Playgroud)
当我运行以下命令时:
select owner, object_type from all_objects where object_name = 'UTL_FILE'
Run Code Online (Sandbox Code Playgroud)
结果是:
OWNER Object Type
--------- -----------
PUBLIC SYNONYM
Run Code Online (Sandbox Code Playgroud)
编辑:
运行:
GRANT EXECUTE ON UTL_FILE TO PUBLIC
Run Code Online (Sandbox Code Playgroud)
得到:
Error starting at line 2 in command:
GRANT EXECUTE ON UTL_FILE TO PUBLIC
Error report:
SQL Error: ORA-00942: table or view does not exist
00942. 00000 - "table or view does not exist"
*Cause:
*Action:
Run Code Online (Sandbox Code Playgroud)
问题是什么?
Prz*_*lej 12
似乎对我缺乏特权.PUBLIC用户通常会EXECUTE在该程序包上授予权限,但可以撤消该权限.
您可以PUBLIC通过发出以下查询来检查是否具有该权限:
SELECT * FROM all_tab_privs WHERE grantee = 'PUBLIC' AND table_name = 'UTL_FILE';
Run Code Online (Sandbox Code Playgroud)
如果没有返回任何行,请尝试将执行权限授予您记录为的用户,或者PUBLIC作为某个特权用户授予执行权限,例如SYS:
GRANT EXECUTE ON SYS.utl_file TO user_name;
Run Code Online (Sandbox Code Playgroud)
编辑
您必须在记录时授予该权限,例如,SYS用户.
默认情况下,用户没有UTL_FILE的执行权限。要使用 UTL_FILE,ADMIN 用户或实例管理员必须显式授予其 GRANT EXECUTE 权限,如下例所示:
GRANT EXECUTE ON SYS.UTL_FILE TO scott;
Run Code Online (Sandbox Code Playgroud)