Oracle PL/SQL-读取外部表
我已经动态创建了一个表,并从.csv文件中写入了数据。我在一个将创建的表名作为参数传递的过程中完成了这项工作。现在,我想从这个表中读取一个数据,或者理想情况下,我想在相同的过程中将这个表中的整个数据写入游标或数组,就像我需要从数据库中存储的数据中比较它们一样。我曾尝试创建动态游标和数组,但没有成功。有什么方法可以做到这一点吗Oracle PL/SQL-读取外部表,oracle,plsql,dynamic-sql,external-tables,Oracle,Plsql,Dynamic Sql,External Tables,我已经动态创建了一个表,并从.csv文件中写入了数据。我在一个将创建的表名作为参数传递的过程中完成了这项工作。现在,我想从这个表中读取一个数据,或者理想情况下,我想在相同的过程中将这个表中的整个数据写入游标或数组,就像我需要从数据库中存储的数据中比较它们一样。我曾尝试创建动态游标和数组,但没有成功。有什么方法可以做到这一点吗 CREATE OR REPLACE PROCEDURE My_procedure (p_ext_table_name VARCHAR2,
CREATE OR REPLACE PROCEDURE My_procedure (p_ext_table_name VARCHAR2,
p_file_name VARCHAR2)
AS
v_ext_create VARCHAR2 (10000);
v_ext_table_name varchar2(100);
--emp_refcur SYS_REFCURSOR;
--type ext_tab is table of EXT_table%rowtype;
--emp_tab ext_tab;
BEGIN
v_ext_table_name := p_ext_table_name;
v_ext_create :=
'CREATE TABLE ' || p_ext_table_name || q'! (
CUSTOMER_ID NUMBER,
CUSTOMER_MAILING CHAR(2 BYTE))
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY MY_DIRECTORY
ACCESS PARAMETERS
( RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY ','
MISSING FIELD VALUES ARE NULL
( Customer_ID,
New_Customer_Mailing ))
LOCATION (MY_DIRECTORY:'!' || p_file_name || q'!')
)
REJECT LIMIT UNLIMITED
PARALLEL ( DEGREE 5 INSTANCES 1 )!';
EXECUTE IMMEDIATE v_ext_create;
END;
我的想法是:
/*open emp_refcur 'select CUSTOMER_ID from' || v_ext_table_name|| USING CUSTOMER_ID;
LOOP
FETCH EMP_REFCUR INTO CUSTOMER_ID;
EXIT WHEN EMP_REFCUR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(CUSTOMER_ID);
END LOOP;
CLOSE EMP_REFCUR;*/ didn't work
在PL/SQL中动态创建表通常是不好的做法。它会产生各种各样的问题:SQL是一种强类型语言,正如您所发现的,很难编写代码来编译和运行只在运行时存在的对象 您尚未解释您的总体业务需求,但似乎不需要动态创建表。可能您只需要更改表所指向的文件。如果是这样的话:
在PL/SQL中动态创建表通常是不好的做法。它会产生各种各样的问题:SQL是一种强类型语言,正如您所发现的,很难编写代码来编译和运行只在运行时存在的对象 您尚未解释您的总体业务需求,但似乎不需要动态创建表。可能您只需要更改表所指向的文件。如果是这样的话:
create or replace procedure change_ext_table_file (p_file_name in varchar2) ) is
begin
execute immediate 'ALTER TABLE your_ext_table LOCATION (''' || p_file_name || ''')';
end;