将变量从 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(后端)存储过程的主要内容,如果未能解决你的问题,请参考以下文章
MSoft Access - 将变量从一种形式传递到另一种形式
使用 GET 路由将变量从 ReactJS 前端传递到 NodeJS 后端
java.sql.SQLException同时将变量从java传递到oracle过程