2014-10-03 145 views
2

我正在將csv文件導入到oracle表中,我在pl/sql中寫入過程,該過程有一個將文件名傳遞給過程的輸入參數。我想從毫秒訪問(前端)給我的IN參數值,我打電話通過查詢傳遞過程中,我寫從Access(前端)到Oracle(後端)傳遞變量存儲過程

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; 

導入是目錄,mprn是我的文件名,它只有一列。 我想從MS訪問FILE_NAME,我可以傳遞給過程和進口可以做到

回答

2

不要過度使用動態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

  1. 設置您的ODBC連接
  2. 創建一個將執行Oracle存儲過程的過程。
+0

我怎樣才能從MS ACCESS傳遞參數,我是新的MS訪問,我必須通過IN參數從MS訪問窗體 – 2014-10-03 13:45:52

+0

您可以使用VBA嗎? – zaratustra 2014-10-03 13:48:44

+0

是的,我可以使用但不知道如何通過?我正在通過查詢傳遞過程。如果你建議某種方式,這將是一個很大的幫助 – 2014-10-03 13:50:09