Pasar una variable de Access(frontend) a Oracle(back-end) Procedimiento almacenado
vba access-vba (1)
Estoy importando un archivo csv a la tabla de Oracle, escribí el procedimiento en pl / sql que tiene un parámetro de entrada que pasa el nombre del archivo al procedimiento. Quiero dar ese valor de parámetro IN desde ms access (frontend), estoy llamando al procedimiento mediante la consulta de paso a paso, en el que escribí
call EXT_TABLE()
, ¿cómo call EXT_TABLE()
pasar el parámetro IN aquí ... mi código plsql está escrito debajo
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;
Importar es directorio, mprn es mi nombre de archivo que tiene solo una columna. Quiero ese file_name de MS ACCESS que puedo pasar al procedimiento y puedo importarlo
No abuse de SQL dinámico, pruebe algo como:
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;
Para ejecutar este procedimiento, ejecuta: execute EXT_TABLE(file_name => ''my_new_file_name'');
Para ejecutar este procedimiento desde MS ACCESS, debe usar VBA
- Configure su conexión ODBC
- Cree un procedimiento que ejecutará el Procedimiento almacenado de Oracle.