我的表有一個日期型列,但我需要看到GMT信息我的想法是改變時間戳列。如何更改已經有值填充的列?甲骨文變更日期到時間戳
create table PRO_TFESTIVO (oid_festivo NUMBER(10) not null, fecha_hora_envio DATE to TIMESTAMP);
謝謝大家!
我的表有一個日期型列,但我需要看到GMT信息我的想法是改變時間戳列。如何更改已經有值填充的列?甲骨文變更日期到時間戳
create table PRO_TFESTIVO (oid_festivo NUMBER(10) not null, fecha_hora_envio DATE to TIMESTAMP);
謝謝大家!
你不能沒有更改日期/ TIMESTAMP類型:
轉換日期爲WITH TIME ZONE TIMESTAMP:
ALTER TABLE pro_tfestivo RENAME COLUMN FECHA_HORA_ENVIO TO OLD_FECHA_HORA_ENVIO;
ALTER TABLE pro_tfestivo ADD FECHA_HORA_ENVIO TIMESTAMP WITH TIME ZONE;
UPDATE pro_tfestivo SET FECHA_HORA_ENVIO = FROM_TZ(CAST(OLD_FECHA_HORA_ENVIO AS TIMESTAMP), 'GMT');
ALTER TABLE pro_tfestivo DROP COLUMN OLD_FECHA_HORA_ENVIO;
加:)轉換TIMESTAMP WITH TIME ZONE爲DATE:
ALTER TABLE pro_tfestivo RENAME COLUMN FECHA_HORA_ENVIO TO OLD_FECHA_HORA_ENVIO;
ALTER TABLE pro_tfestivo ADD FECHA_HORA_ENVIO DATE;
UPDATE pro_tfestivo SET FECHA_HORA_ENVIO = CAST(to_timestamp_tz(OLD_FECHA_HORA_ENVIO, 'dd/mm/yyyy hh24:mi:ssXFF TZR') at time zone 'GMT' AS DATE);
ALTER TABLE pro_tfestivo DROP COLUMN OLD_FECHA_HORA_ENVIO;
如果你的運氣足夠有「高級複製」牌,另一種方式來做到這一點是使用DBMS_REDEFINITION程序包
--your existing table
create table MY_SCHEMA.MY_TABLE (START_DATE DATE);
INSERT INTO MY_TABLE VALUES (SYSDATE);
commit;
--The new Structure of your table
create table MY_TABLE_NEW (START_DATE TIMESTAMP);
begin
dbms_redefinition.start_redef_table(
uname=>'MY_SCHEMA',
orig_table =>'MY_TABLE',
int_table =>'MY_TABLE_NEW',
col_mapping =>'cast(START_DATE as timestamp) START_DATE',
options_flag =>dbms_redefinition.cons_use_rowid);
end;
/
exec dbms_redefinition.finish_redef_table('MY_SCHEMA','MY_TABLE','MY_TABLE_NEW');
之後,您的原始表(它將保留它的名稱爲MY_TABLE)應該將其列從DATE更改爲TIMESTAMP,並且所有數據都是即時轉換的。其優點是,你的原始表的過程中保持可用於其他應用程序,所以你可能會做它在生產中沒有任何服務中斷
PS:我沒有在我的測試數據庫的許可證,所以我不能現在測試它,但它應該工作