oracle可重複執行指令碼
阿新 • • 發佈:2019-01-26
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; /
適用於升級型增量指令碼。