在oracle中没有自动递增列的表中复制数据

时间:2017-12-19 10:56:54

标签: oracle create-table

我已将表从本地数据库复制到生产数据库。但是这里发生的事情是我的自动递增列值也被复制了。我不想那样。

此处我的自动递增列在表RRSOC_ID中为TBL_RRSOC_STORE_INFO

那么我现在应该怎么做才能在没有该列的情况下复制它。我试过这样但数据没有被复制。

create table TBL_RRSOC_STORE_INFO1 as ( select * from TBL_RRSOC_STORE_INFO where 1=0);

下面是我的表结构。

CREATE TABLE "APP_WFM"."TBL_RRSOC_STORE_INFO" 
  ( "RRSOC_ID" NUMBER, 
"STORE_CODE" NVARCHAR2(55), 
"STATE" NVARCHAR2(55), 
"CITY" NVARCHAR2(55), 
"SITE_STORE_FORMAT" NVARCHAR2(155), 
"STORE_SITENAME" NVARCHAR2(255), 
"STORE_SITENAME_LANDL_1" NVARCHAR2(155), 
"STORE_SITENAME_LANDL_2" NVARCHAR2(155), 
"STORE_ASST_MANAGER_NAME" NVARCHAR2(155), 
"STORE_ASST_MANAGER_MOBNO" NVARCHAR2(100), 
"STORE_MANAGER_NAME" NVARCHAR2(155), 
"MANAGER_MOBNO" NVARCHAR2(100), 
"EMP_NEAREST_STORE" NVARCHAR2(155), 
"EMP_NEAREST_STORE_MOBNO" NVARCHAR2(100), 
"SUPERVISOR_NAME" NVARCHAR2(155), 
"SUPERVISOR_MOBNO" NVARCHAR2(155), 
"SECURITY_SUP_NAME_STORE" NVARCHAR2(155), 
"SECURITY_SUP_MOBNO_STORE" NVARCHAR2(155), 
"NAME_ALIGNED_LPO" NVARCHAR2(155), 
"LPO_MOBILENO" NVARCHAR2(100), 
"ALPM_ALPO_NAME" NVARCHAR2(155), 
"ALPM_ALPO_MOBNO" NVARCHAR2(155), 
"AREA_MANAGER_NAME" NVARCHAR2(155), 
"AREA_MANAGER_MOBNO" NVARCHAR2(155), 
"ZONAL_HEAD_NAME" NVARCHAR2(155), 
"ZONAL_HEAD_NO" NVARCHAR2(155), 
"DVR_IP_ADDRESS" NVARCHAR2(255), 
"SIGNET_IP_ADDRESS" NVARCHAR2(155), 
"NEAREST_POLICE_STN_NAME" NVARCHAR2(255), 
"NEAREST_POLICE_STN_CONTNO" NVARCHAR2(255), 
"NEAREST_HOSP_NAME" NVARCHAR2(255), 
"NEAREST_HOSP_CONTNO" NVARCHAR2(255), 
"NEAREST_FIRE_STN_CONTNAME" NVARCHAR2(255), 
"NEAREST_FIRE_STN_CONTNO" NVARCHAR2(255), 
"STORE_SPACE_SQFT" NVARCHAR2(155), 
"STORE_ADDRESS" NVARCHAR2(555), 
"LAUNCH_DATE" DATE, 
"CST_TIN_NO" NVARCHAR2(55), 
"STORE_EMAILID" NVARCHAR2(155), 
"NO_OF_POS" NVARCHAR2(155), 
"NO_OF_CAMERA" NVARCHAR2(155), 
"DVR_MODEL_GESECURITY" NVARCHAR2(155), 
"CAMERA_MODEL" NVARCHAR2(155), 
"ALIGNED_LPO_MAILDID" NVARCHAR2(155), 
"FACILTY_TEAMNAME" NVARCHAR2(155), 
"FACILITY_TEAMNO" NVARCHAR2(155), 
"STATE_HEAD_OPS_NAME" NVARCHAR2(255), 
"STATE_HEAD_OPS_NO" NVARCHAR2(355), 
"LPA" NVARCHAR2(255), 
"SLP_STATE_HEAD" NVARCHAR2(255), 
"SLP_STATE_HEAD_NO" NVARCHAR2(255), 
"CREATED_BY" NVARCHAR2(255), 
"CREATED_DATE" DATE, 
"LAST_UPDATED_BY" NVARCHAR2(155), 
"LAST_UPDATED_DATE" DATE, 
"ISACTIVE" CHAR(1 BYTE), 
"LATITUDE" NVARCHAR2(100), 
"LONGITUDE" NVARCHAR2(100), 
"DELETED_BY" NVARCHAR2(255)
 ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
 STORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
 TABLESPACE "APP_WFM" ;

1 个答案:

答案 0 :(得分:0)

使用

select * from TBL_RRSOC_STORE_INFO where 1=0

将创建具有相同列的表,并且数据类型是原始的,但没有数据。源表中的任何行都不会匹配where 1=0,但仍会确定结果集的元数据,并用于在CTAS语句中创建新表。

如果您想要创建没有其中一列的新表,您可以列出 要明确要求的列:

create table TBL_RRSOC_STORE_INFO1 as
select STORE_CODE, STATE, CITY, ...
from TBL_RRSOC_STORE_INFO;

如果要包含该列而不包含其值,可以将其包含在虚拟值中:

create table TBL_RRSOC_STORE_INFO1 as
select cast(null as number) as RRSOC_ID, STORE_CODE, STATE, CITY, ...
from TBL_RRSOC_STORE_INFO;

如果您有问题列出了您可以从数据字典中生成的所有列,例如:

select 'create table TBL_RRSOC_STORE_INFO1 as select '
  || listagg(column_name, ',') within group (order by column_id)
  || ' from TBL_RRSOC_STORE_INFO;'
from user_tab_columns
where table_name = 'TBL_RRSOC_STORE_INFO'
and column_name != 'RRSOC_ID';

然后运行生成的语句(当然,在检查之后)。

或者,您可以复制整个表格,然后删除RRSOC_ID列,或将其更新为null,或者您想要的任何新值。

请注意,表约束和触发器不会自动重新创建,因此即使RRSOC_ID是原始表中的主键,您也可以在新表中将其设置或更改为null。 / p>