Sql 如何将一个有4列的表拆分为两个各有2列的表
我试图将一个包含100列的表拆分为20个表,它们都是按列拆分的,例如一个表中的第1列到第5列,第二个表中的第6列到第10列……等等Sql 如何将一个有4列的表拆分为两个各有2列的表,sql,oracle,Sql,Oracle,我试图将一个包含100列的表拆分为20个表,它们都是按列拆分的,例如一个表中的第1列到第5列,第二个表中的第6列到第10列……等等 我想为每个分区添加一个外键字段,可以将每个分区与另一个分区连接起来,这样分区表将包括第1列到第5列+一个新的外键列,可以将每个分区与下一个分区连接起来。您可以使用sql生成两个sql脚本。一个用于创建表,另一个用于将数据复制到目标表中。为了关联数据,表上必须有一个主键。PK_COLUMN_LIST是主键列的列表,如EMPLOYEE_ID、MANAGER_ID。PK_
我想为每个分区添加一个外键字段,可以将每个分区与另一个分区连接起来,这样分区表将包括第1列到第5列+一个新的外键列,可以将每个分区与下一个分区连接起来。您可以使用sql生成两个sql脚本。一个用于创建表,另一个用于将数据复制到目标表中。为了关联数据,表上必须有一个主键。PK_COLUMN_LIST是主键列的列表,如EMPLOYEE_ID、MANAGER_ID。PK_COLUMN_LIST_QUOTED是主键列的列表,但被引用,例如“EMPLOYEE_ID”、“MANAGER_ID”。如果没有主键,请添加一列并为每行指定一个序列
select 'CREATE TABLE <TABLE_NAME>'|| min(c.column_id)|| ' as select
<PK_COLUMN_LIST> '||listagg(column_name,',')within group(order by c.column_id )
||' from <TABLE_NAME> where 1=0;'
from user_tab_columns c where table_name = '<TABLE_NAME>'
and c.COLUMN_NAME not in (<PK_COLUMN_LIST_QUOTED>)
group by mod(c.COLUMN_ID, 20);
这些sql语句的输出可以在脚本中运行,或者如果您需要自动化过程,您可以选择变量并立即执行或使用dbms_sql。请尝试构建一个示例表,例如4列,包含一些记录,并尝试解释您需要获得的内容,甚至发布您想要创建的表,它们的约束和数据。事实上,很难理解你的需要并帮助你
select 'INSERT ALL' from dual
union all
select ' INTO <TABLE_NAME>'|| min(c.column_id)|| ' ( <PK_COLUMN_LIST>'||
listagg(column_name,',')within group(order by c.column_id )
|| ') values ( <PK_COLUMN_LIST> ,'|| listagg(column_name,',')within group(order by c.column_id ) ||' )'
from user_tab_columns c where table_name = '<TABLE_NAME>'
and c.COLUMN_NAME not in (<PK_COLUMN_LIST_QUOTED>)
group by mod(c.COLUMN_ID, 20)
union all select
'select t.* from <TABLE_NAME> t' from dual;