oracle可重复执行脚本

DECLARE
  V_FLAG NUMBER;--数量标志
BEGIN
  
  --建表
  SELECT COUNT(*) INTO V_FLAG FROM USER_TABLES UT WHERE UT.TABLE_NAME = 'TABLE_NAME_DEMO';
  IF V_FLAG = 0 THEN
    EXECUTE IMMEDIATE '
        CREATE TABLE TABLE_NAME_DEMO(
          ID VARCHAR2(30),
          NAME VARCHAR2(50),          
          CONSTRAINT PK_TABLE_NAME_DEMO PRIMARY KEY (ID)
        )
    ';
    EXECUTE IMMEDIATE 'comment on table TABLE_NAME_DEMO is ''可重复执行sql''';
    EXECUTE IMMEDIATE 'comment on column TABLE_NAME_DEMO.id is ''ID列''';
    EXECUTE IMMEDIATE 'comment on column TABLE_NAME_DEMO.name is ''名称列''';
  END IF;
  
  --加字段
  SELECT COUNT(*) INTO V_FLAG FROM USER_TAB_COLUMNS UC WHERE UC.TABLE_NAME = 'TABLE_NAME_DEMO' AND UC.COLUMN_NAME = 'AGE';
  IF V_FLAG = 0 THEN
    EXECUTE IMMEDIATE 'ALTER TABLE TABLE_NAME_DEMO ADD AGE VARCHAR2(20)';
    EXECUTE IMMEDIATE 'comment on column TABLE_NAME_DEMO.age is ''年龄20''';
  END IF;
  
  --改字段
  SELECT COUNT(*) INTO V_FLAG FROM USER_TAB_COLUMNS UC WHERE UC.TABLE_NAME = 'TABLE_NAME_DEMO' AND UC.COLUMN_NAME = 'AGE';
  IF V_FLAG = 1 THEN
    EXECUTE IMMEDIATE 'alter table TABLE_NAME_DEMO modify age varchar2(50)';
    EXECUTE IMMEDIATE 'comment on column TABLE_NAME_DEMO.AGE is ''年龄50''';
  END IF;
  
  --删除字段
  SELECT COUNT(*) INTO V_FLAG FROM USER_TAB_COLUMNS UC WHERE UC.TABLE_NAME = 'TABLE_NAME_DEMO' AND UC.COLUMN_NAME = 'SCORE';
  IF V_FLAG = 1 THEN
    EXECUTE IMMEDIATE 'alter table TABLE_NAME_DEMO drop column SCORE';
  END IF;
 
  --插入数据(根据主键)
  SELECT COUNT(*) INTO V_FLAG FROM TABLE_NAME_DEMO TB WHERE TB.ID = '123';
  IF V_FLAG = 0 THEN
    INSERT INTO TABLE_NAME_DEMO(ID,NAME) VALUES('123','123的名称');
  END IF;
  
END;
/

适用于升级型增量脚本。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值