【发布时间】:2020-02-08 07:14:16
【问题描述】:
使用元数据表 USER_TAB_COLUMNS 我已经获得了我的一张表的列名和数据类型,如下所示:
SELECT column_name, data_type
FROM USER_TAB_COLUMNS
WHERE table_name = 'BACKUP'
AND column_name NOT IN ('ID', 'ENV_ID');
结果如下:
COLUMN_NAME |DATA_TYPE
--------------------------------------
SESSION_STATION NVARCHAR2
user NVARCHAR2
type NCHAR
date DATE
hour NVARCHAR2
我要做的是使用这些列名和数据类型创建一个新的外部表,例如:
CREATE TABLE new_table
(
SESSION_STATION NVARCHAR2
user NVARCHAR2
type NCHAR
date DATE
hour NVARCHAR2
)
organization external
(
...
);
我想通过在创建新表期间使用先前选择的结果来执行此操作,而不是手动将其输入到查询中。
我希望像这样简单地这样做,但显然行不通:
CREATE TABLE new_table
(
SELECT column_name, data_type
FROM USER_TAB_COLUMNS
WHERE table_name = 'BACKUP'
AND column_name NOT IN ('ID', 'ENV_ID');
)
注意我不能使用“CREATE TABLE new_table AS”,因为在将其创建为外部表时它不适用于“组织外部”。
这样做的最终目标是让客户端应用程序向数据库发送查询,以通过仅更改每个查询中的表和 csv 文件名来将不同的 csv 文件导入到不同的表中。
欢迎提出建议,谢谢!
【问题讨论】:
-
您从哪里获得
organization external子句所需的信息,例如文件夹名称。 -
@WernfriedDomscheit csv 目录由客户端应用程序在前面的查询中管理,如果尚未创建目录,则其余部分大部分是静态的(日期格式除外,我仍然需要计算一种制作通用的方法)
标签: sql oracle select create-table external-tables