sytem
当我使用用户创建目录时(vin.txt
是我的文件)
create directory emp_dir1
AS "'C:\Documents and Settings\Administrator\Desktop\vin.txt'";
它创造了它。
当我使用用户执行相同操作Scott
时,它会给出文件路径错误
"Identifier is too long"
但是当我将此文件路径放在单引号而不是双引号中时,它会创建它。
背后的原因是什么?
你为什么使用双引号?
Oracle 中的字符串有单引号,而双引号可用于列名和表名。
我尝试使用它Oracle 10.2
(9g
周围没有),但我无法重现它。无论我使用什么用户,它都无法正常工作。
当字符串和你的一样长时,我总是得到
ORA-00972: 标识符太长
当我尝试更短的路径(CREATE DIRECTORY emp_dir1 As "C:\vin.txt";
)时,我得到
ORA-01780: 需要字符串文字
关于你的问题,有几件事让我担心。
首先,像 SCOTT 这样的普通用户不应该创建目录。CREATE ANY DIRECTORY 功能非常强大,因为它授予oracle
帐户可访问的任何操作系统目录的读/写权限;这是一个巨大的安全漏洞。
其次,目录路径必须只是路径,没有文件。我们使用 UTL_FILE、Data Pump 或其他工具创建文件。UTL_FILE.FOPEN()
如果传递的 DIRECTORY 实际上是文件的路径而不是 OS 目录,则调用将失败。
我无法解释为什么 SYSTEM 成功执行的同一语句在 SCOTT 执行时会失败。我手头没有 9i,所以我无法测试它。请剪切'n'粘贴整个 SQL*Plus 输出,以便我们查看发生了什么。正如彼得所指出的,您的问题似乎包含一个错字,因此目前我们无法确定您认为正在发生的事情实际上就是正在发生的事情。