使用过程参数值 PLSQL 创建 table

Creating a table with procedure parameter values PLSQL

我的任务是将值列表从excel传输到Oracle,并根据它们创建一个table。 正如我看到的解决方案:我需要一个带有输入参数的过程 - 逗号分隔值。例如:parameter1 := 'aaa','bbb','ccc'等不超过100个值。 和第二个具有相同数量值的参数parameter2 := 'xxx','yyy','jjj'... 因此,Oracle中应该有一个table,输入参数有两个列和值。 我知道你可以创建一个类型 table,像这样:

CREATE TABLE Tab1 (col VARCHAR2(3));
 
CREATE TYPE t_Tab1 IS TABLE OF VARCHAR2(3) ; 
 
DECLARE 
 
v_tbl t_Tab1 := t_Tab1 ('aaa','bbb','ccc');
 
BEGIN
  
INSERT INTO Tab1
SELECT VALUE (t)
FROM TABLE (v_tbl) t;
 
COMMIT;
END;

但我不知道如何添加第二列并从过程参数中接受值。或许还有更方便的选择,谢谢帮助。

  1. 创建包含所需数量的列的 table(即匹配 Excel)。根据数据质量,您可以将所有列创建为 VARCHAR2(4000),即使它看起来像日期或数字。大多数 Excel 文件在日期或数字列中有 non-numeric 数据

  2. 如果行数很少(比如 < 10000),可以使用 Excel 公式生成插入语句,例如 ="INSERT INTO MYTABLE VALUES ('" & B1 & "', '" & B2 & ... & "');"

  3. 如果有很多行(比如几十万行),你可以保存为CSV并使用SQL加载器加载数据。由于 Oracle 12c 有一个快速模式 (12.2 doc),这使得这个任务变得容易,命令类似于

    sqlldr hr TABLE=mytable CSV=WITH_EMBEDDED DATA=mydata.csv

很可能某些行在步骤 2 或 3 中失败。因此,请准备好截断 table 并进行微调。