Oracle19c中无法执行存储过程

问题描述 投票:0回答:1

我当前在尝试将数据从 .csv 文件导入 OracleDB 时遇到问题(下面是错误代码)。现在,我有一个存储过程,以便我可以轻松地调用它。现在,每次我尝试运行或调用存储过程时,都会出现错误(错误代码如下)

所以这是我的存储过程,名为

load_csv_into_employee
;

CREATE OR REPLACE PROCEDURE load_csv_into_employee AS
   v_count NUMBER;
BEGIN
   -- Check if the external table already exists
   SELECT COUNT(*)
   INTO v_count
   FROM user_tables
   WHERE table_name = 'CSV_TABLE';

   -- If the external table doesn't exist, create it
   IF v_count = 0 THEN
      EXECUTE IMMEDIATE '
         CREATE TABLE csv_table (
            EMPLOYEE_ID VARCHAR2(50),
            FIRST_NAME VARCHAR2(100),
            LAST_NAME VARCHAR2(100),
            DEPARTMENT VARCHAR2(200)
         )
         ORGANIZATION EXTERNAL (
            TYPE ORACLE_LOADER
            DEFAULT DIRECTORY csv_dir
            ACCESS PARAMETERS (
               RECORDS DELIMITED BY NEWLINE
               FIELDS TERMINATED BY '',''
               MISSING FIELD VALUES ARE NULL
            )
            LOCATION (''\\directory\path\your_file.csv'')
         )';
   END IF;

   -- Insert data into EMPLOYEE
   EXECUTE IMMEDIATE '
      INSERT INTO EMPLOYEE
      SELECT * FROM csv_table';

   -- Drop the external table
   EXECUTE IMMEDIATE 'DROP TABLE csv_table';

   COMMIT;
EXCEPTION
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END load_csv_into_employee;
/

但是每次执行时都会出现此错误:

Error: ORA-29913: error in executing ODCIEXTTABLEOPEN callout

我尝试过(我搜索的大部分答案都是基于权限问题):

  1. 我尝试在这里进行研究,发现可能存在权限问题。所以我确保我已经使用语法创建了
    csv_dir
    CREATE DIRECTORY csv_dir AS '\\dir\path\your_file.csv';
    并确保我已获得许可。
     GRANT READ, WRITE ON DIRECTORY csv_dir TO MyUserName;
    。我使用
    sys as sysdba
    用户授予此权限

注意:我目前只是想测试和学习,所以我必须使用 SYS 用户。

oracle stored-procedures import oracle19c external-tables
1个回答
0
投票

location
是相对于目录对象的,而不是完整路径;所以

LOCATION (''\\directory\path\your_file.csv'')

应该只是

LOCATION (''your_file.csv'')
© www.soinside.com 2019 - 2024. All rights reserved.