创建目录?

时间:2010-03-20 09:07:53

标签: oracle directory oracle9i

当我使用sytem用户创建目录时(vin.txt是我的文件)

create directory emp_dir1 
     AS "'C:\Documents and Settings\Administrator\Desktop\vin.txt'";

它创造了它。

当我使用用户Scott执行相同操作时,它会为文件路径

提供错误
"Identifier is too long"

但是当我把这个文件路径放在单引号而不是scott的双引号时,就会创建它。

背后的原因是什么?

2 个答案:

答案 0 :(得分:1)

你为什么使用双qoutes?

Oracle中的字符串有单引号,而双引号可用于列名和表名。


我尝试使用Oracle 10.2(周围没有任何9g),我无法重现这一点。无论我使用什么用户,它都无法正常工作。

当字符串与你的字符串一样长时,我总是得到

  

ORA-00972:标识符太长

当我尝试更短的路径(CREATE DIRECTORY emp_dir1 As "C:\vin.txt";)时,我得到了

  

ORA-01780:需要字符串文字

答案 1 :(得分:1)

有些事情让我担心你的问题。

首先,SCOTT等常规用户不应该创建目录。 CREATE ANY DIRECTORY非常强大,因为它赋予oracle帐户可访问的任何操作系统目录的读/写权限;这是一个巨大的安全漏洞。

其次,目录路径必须只是路径,没有文件。我们使用UTL_FILE,Data Pump或其他任何东西创建文件。如果传递的DIRECTORY实际上是文件的路径而不是OS目录,则对UTL_FILE.FOPEN()的调用将失败。

我无法解释为什么由SCOTT执行时由SYSTEM成功执行的同一语句失败。我手上没有9i,所以我无法测试它。请切断'整个SQL * Plus输出,以便我们可以看到会发生什么。正如彼得所指出的那样,你的问题似乎包含了一个拼写错误,所以目前我们无法确定你认为发生的事情正在发生的事情。