xykj-plus/xykj-admin-plus/script/sql/update/oracle/update_contract_table.sql
2026-06-13 13:48:51 +08:00

188 lines
5.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ----------------------------
-- 合同表结构更新脚本 (Oracle)
-- 说明:此脚本用于将旧的合同表结构更新为新的结构
-- 请根据实际情况谨慎执行,建议先备份数据
-- ----------------------------
-- ----------------------------
-- 第一步:备份原有数据(可选,建议执行)
-- ----------------------------
-- create table biz_contract_backup as select * from biz_contract;
-- ----------------------------
-- 第二步:添加新字段
-- Oracle 不支持 if not exists需要先检查列是否存在
-- ----------------------------
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'PARTY_A_NAME';
if v_count = 0 then
execute immediate 'alter table BIZ_CONTRACT add PARTY_A_NAME varchar2(200)';
end if;
end;
/
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'PARTY_B_NAME';
if v_count = 0 then
execute immediate 'alter table BIZ_CONTRACT add PARTY_B_NAME varchar2(200)';
end if;
end;
/
-- ----------------------------
-- 第三步:迁移数据(如果需要)
-- 如果需要从旧字段迁移数据到新字段
-- ----------------------------
-- update BIZ_CONTRACT set PARTY_A_NAME = CUSTOMER_NAME where PARTY_A_NAME is null;
-- update BIZ_CONTRACT set PARTY_B_NAME = SIGNING_ENTITY where PARTY_B_NAME is null;
-- commit;
-- ----------------------------
-- 第四步:设置新字段为非空
-- ----------------------------
-- alter table BIZ_CONTRACT modify PARTY_A_NAME varchar2(200) not null;
-- alter table BIZ_CONTRACT modify PARTY_B_NAME varchar2(200) not null;
-- ----------------------------
-- 第五步:删除旧字段
-- ----------------------------
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'DELIVERY_DEPT_ID';
if v_count > 0 then
execute immediate 'alter table BIZ_CONTRACT drop column DELIVERY_DEPT_ID';
end if;
end;
/
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'SALES_USER_ID';
if v_count > 0 then
execute immediate 'alter table BIZ_CONTRACT drop column SALES_USER_ID';
end if;
end;
/
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'ACCOUNTING_TYPE';
if v_count > 0 then
execute immediate 'alter table BIZ_CONTRACT drop column ACCOUNTING_TYPE';
end if;
end;
/
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'CUSTOMER_NAME';
if v_count > 0 then
execute immediate 'alter table BIZ_CONTRACT drop column CUSTOMER_NAME';
end if;
end;
/
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'SIGNING_ENTITY';
if v_count > 0 then
execute immediate 'alter table BIZ_CONTRACT drop column SIGNING_ENTITY';
end if;
end;
/
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'TARGET_PROFIT_RATE';
if v_count > 0 then
execute immediate 'alter table BIZ_CONTRACT drop column TARGET_PROFIT_RATE';
end if;
end;
/
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'BUSINESS_TAGS';
if v_count > 0 then
execute immediate 'alter table BIZ_CONTRACT drop column BUSINESS_TAGS';
end if;
end;
/
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'PAID_AMOUNT';
if v_count > 0 then
execute immediate 'alter table BIZ_CONTRACT drop column PAID_AMOUNT';
end if;
end;
/
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'UNPAID_AMOUNT';
if v_count > 0 then
execute immediate 'alter table BIZ_CONTRACT drop column UNPAID_AMOUNT';
end if;
end;
/
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'REMARK';
if v_count > 0 then
execute immediate 'alter table BIZ_CONTRACT drop column REMARK';
end if;
end;
/
-- ----------------------------
-- 第六步:添加转包相关字段
-- ----------------------------
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'IS_SUBCONTRACT';
if v_count = 0 then
execute immediate 'alter table BIZ_CONTRACT add IS_SUBCONTRACT varchar2(1) default ''0''';
execute immediate 'comment on column BIZ_CONTRACT.IS_SUBCONTRACT is ''是否转包(0否 1是)''';
end if;
end;
/
declare
v_count number;
begin
select count(*) into v_count from user_tab_columns where table_name = 'BIZ_CONTRACT' and column_name = 'SUBCONTRACT_FROM_ID';
if v_count = 0 then
execute immediate 'alter table BIZ_CONTRACT add SUBCONTRACT_FROM_ID number(20)';
execute immediate 'comment on column BIZ_CONTRACT.SUBCONTRACT_FROM_ID is ''转包来源合同ID''';
end if;
end;
/
-- 添加外键约束(可选)
-- declare
-- v_count number;
-- begin
-- select count(*) into v_count from user_constraints where table_name = 'BIZ_CONTRACT' and constraint_name = 'FK_CONTRACT_SUBCONTRACT_FROM';
-- if v_count = 0 then
-- execute immediate 'alter table BIZ_CONTRACT add constraint FK_CONTRACT_SUBCONTRACT_FROM foreign key (SUBCONTRACT_FROM_ID) references BIZ_CONTRACT(CONTRACT_ID)';
-- end if;
-- end;
-- /