我当前在尝试将数据从 .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
。
我尝试过(我搜索的大部分答案都是基于权限问题):
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 用户。
location
是相对于目录对象的,而不是完整路径;所以
LOCATION (''\\directory\path\your_file.csv'')
应该只是
LOCATION (''your_file.csv'')