Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何在SQL Developer中读取本地文件?_Oracle_Input_Plsql_Oracle Sqldeveloper_Utl File - Fatal编程技术网

Oracle 如何在SQL Developer中读取本地文件?

Oracle 如何在SQL Developer中读取本地文件?,oracle,input,plsql,oracle-sqldeveloper,utl-file,Oracle,Input,Plsql,Oracle Sqldeveloper,Utl File,在Oracle SQL developer中执行查询时,我希望在本地计算机上读取包含查询参数的文件。到目前为止,我在网上找到的例子并不充分。当我执行以下代码时,我不断收到“ORA-29283:无效文件操作”错误: CREATE DIRECTORY SAMPLEDATA2 AS 'C:'; GRANT READ, WRITE ON DIRECTORY SAMPLEDATA2 TO PUBLIC; declare f utl_file.file_type; s varchar2(200); c

在Oracle SQL developer中执行查询时,我希望在本地计算机上读取包含查询参数的文件。到目前为止,我在网上找到的例子并不充分。当我执行以下代码时,我不断收到“ORA-29283:无效文件操作”错误:

CREATE DIRECTORY SAMPLEDATA2 AS 'C:';
GRANT READ, WRITE ON DIRECTORY SAMPLEDATA2 TO PUBLIC;


declare
f utl_file.file_type;
s varchar2(200);
c number := 0;

BEGIN

f := utl_file.fopen('SAMPLEDATA2','sample2.txt','R');
loop
    utl_file.get_line(f,s);
    dbms_output.put_line(s);
    c := c + 1;
end loop;

exception
    when NO_DATA_FOUND then
        utl_file.fclose(f);
        dbms_output.put_line('Number of lines: ' || c);
end;

UTL_文件
只能从数据库服务器上存储的文件中读取数据。因为它是PL/SQL代码,所以它在数据库服务器上运行,并且只能访问数据库服务器上Oracle进程可用的资源

“我想在我的本地计算机上读取一个文件 包含查询参数的计算机 在Oracle SQL中执行查询时 开发商。”

这似乎是一个不同寻常的——我要说的是“奇特的”——架构决策。这些价值观来自哪里?为什么它们必须存储在文件中?他们多久换一次

将本地PC文件的内容公开给远程数据库服务器将是非常困难的(即,我们正在讨论使用
ftp
或涉及WinSCP之类的手动过程来实现自动化)


另一方面,将一些查询参数应用于查询可能非常简单;例如,通过使用SYS_上下文和名称空间。但我需要知道更多细节,然后才能提供替代解决方案

好吧,这就是为什么失败的原因,谢谢。有没有其他方法可以用来读取本地文件并将其发送到数据库?@user786149-不太可能。您可以使用SQLLoader将文件写入数据库表中的CLOB列,然后使用
DBMS\u LOB
包从CLOB读取数据。但这将是完全不同的语义。通常,您最好将文件复制到数据库服务器,并使用
UTL\u file
读取文件(当然,假设您使用SQLLoader将数据从文件加载到表中不会更好)。可能重复的是一次数据迁移过程,涉及十几个不同的表和大约1500个不连续的不同日期。我将所有信息都存储在一个平面文件中,因此我认为将该平面文件作为迁移脚本的输入是最简单的。好吧,见鬼,如果是一次性加载,请将数据转换为一组insert语句的脚本,然后将其全部放入临时表中,以便以后进一步处理。(我个人使用Excel进行此操作。)