将变量从 Access(前端)传递到 Oracle(后端)存储过程

Posted

技术标签:

【中文标题】将变量从 Access(前端)传递到 Oracle(后端)存储过程【英文标题】:Passing a variable from Access (frontend) to Oracle(backend) Stored Procedure 【发布时间】:2014-10-03 11:04:45 【问题描述】:

我正在将 csv 文件导入到 oracle 表中,我在 pl/sql 中编写了一个程序,该程序有一个输入参数,可以将文件名传递给程序。我想从 ms 访问(前端)给出那个 IN 参数值,我通过查询调用过程,因为我写了

call EXT_TABLE(),我怎么能在这里传递IN参数..我的plsql代码写在下面

CREATE OR REPLACE PROCEDURE EXT_TABLE (file_name in varchar2)
AS 
L_QUERY VARCHAR2(1000) := NULL;
L_DROP VARCHAR2(10000) := NULL;

BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE IMPORT_TEST
   ( EMP_ID NUMBER (10)
    )
  ORGANIZATION EXTERNAL 
    ( TYPE ORACLE_LOADER
      DEFAULT DIRECTORY IMPORT
      ACCESS PARAMETERS 
        ( RECORDS DELIMITED BY NEWLINE 
          FIELDS  TERMINATED BY '',''
          MISSING FIELD VALUES ARE NULL
        )
          LOCATION ('''||file_name ||''')
        )reject limit unlimited';

L_QUERY:= 'INSERT INTO MPRN SELECT * FROM IMPORT_TEST';
EXECUTE IMMEDIATE L_QUERY;
L_DROP := 'drop table IMPORT_TEST ';
execute immediate L_DROP; 
 commit;
END EXT_TABLE;

Import 是目录,mprn 是我的文件名,它只有一列。 我想要来自 MS ACCESS 的文件名,我可以将其传递给程序并可以完成导入

【问题讨论】:

【参考方案1】:

不要过度使用动态 SQL,尝试类似:

CREATE TABLE IMPORT_TEST(
    EMP_ID NUMBER (10)
)
ORGANIZATION EXTERNAL 
( TYPE ORACLE_LOADER
  DEFAULT DIRECTORY IMPORT
  ACCESS PARAMETERS 
( RECORDS DELIMITED BY NEWLINE 
  FIELDS  TERMINATED BY '',''
  MISSING FIELD VALUES ARE NULL
)
  LOCATION ('some_default_filename')
)reject limit unlimited
;

CREATE OR REPLACE PROCEDURE EXT_TABLE(file_name in varchar2)
AS 
BEGIN
    EXECUTE IMMEDIATE 'ALTER TABLE IMPORT_TEST LOCATION ('''||file_name ||''')';
    INSERT INTO MPRN SELECT * FROM IMPORT_TEST;
END EXT_TABLE;

要运行此过程,请运行:execute EXT_TABLE(file_name => 'my_new_file_name');

要从 MS ACCESS 运行此过程,您需要使用 VBA

    设置您的 ODBC 连接 创建一个将执行 Oracle 存储过程的过程。

【讨论】:

如何从 MS ACCESS 传递参数,我是 ms 访问的新手,我必须从 MS 访问表单传递 IN 参数 是的,我可以使用但不知道如何通过?我正在通过查询调用程序。如果您提出一些建议,那将是一个很大的帮助 看看我贴在我帖子上的链接,有一篇关于从 MS ACCESS 执行 Oracle 存储过程的好论文。 当我尝试传递参数时,运行时错误来了 odbc connection failed 检查用户名/密码,检查监听器是否启动并运行。

以上是关于将变量从 Access(前端)传递到 Oracle(后端)存储过程的主要内容,如果未能解决你的问题,请参考以下文章

如何将错误信息从 oracle 传递给访问

MSoft Access - 将变量从一种形式传递到另一种形式

使用 GET 路由将变量从 ReactJS 前端传递到 NodeJS 后端

java.sql.SQLException同时将变量从java传递到oracle过程

是否可以将数据库从 Approach 转换为 Access、SQL Server 或 Oracle / 其他?

将数据从 Access 中的表单传递到 Word 中的邮件合并