1. 程式人生 > 實用技巧 >ORACLE 建立sql

ORACLE 建立sql

1.新建表

-- Create table
create table TC_BUDGETMOVEINFO_FILE
(
  ta_01 VARCHAR2(50 BYTE) not null,
  ta_02 VARCHAR2(50 BYTE) not null,
  ta_03 VARCHAR2(50 BYTE) not null,
  ta_04 VARCHAR2(50 BYTE) not null,
  ta_05 VARCHAR2(50 BYTE) not null,
  ta_06 VARCHAR2(50 BYTE),
  ta_07 VARCHAR2(50 BYTE),
  ta_08 VARCHAR2(50 BYTE),
  ta_09 VARCHAR2(50 BYTE),
  ta_10 VARCHAR2(50 BYTE),
  ta_11 VARCHAR2(50 BYTE),
  ta_12 VARCHAR2(400 BYTE),
  ta_13 VARCHAR2(50 BYTE),
  ta_14 VARCHAR2(50 BYTE),
  ta_15 VARCHAR2(100 BYTE),
  ta_16 VARCHAR2(50 BYTE),
  ta_17 VARCHAR2(100 BYTE),
  ta_18 VARCHAR2(50 BYTE),
  ta_19 VARCHAR2(100 BYTE),
  ta_20 VARCHAR2(100 BYTE),
  ta_21 VARCHAR2(100 BYTE),
  ta_22 VARCHAR2(100 BYTE),
  ta_23 VARCHAR2(100 BYTE),
  ta_24 VARCHAR2(100 BYTE),
  ta_25 VARCHAR2(100 BYTE),
  ta_26 VARCHAR2(100 BYTE),
  ta_27 VARCHAR2(100 BYTE),
  ta_28 VARCHAR2(100 BYTE),
  ta_29 VARCHAR2(100 BYTE),
  ta_30 VARCHAR2(100 BYTE),
  ta_31 VARCHAR2(100 BYTE),
  ta_32 VARCHAR2(100 BYTE),
  ta_33 VARCHAR2(100 BYTE),
  ta_34 VARCHAR2(100 BYTE),
  ta_35 VARCHAR2(100 BYTE),
  ta_36 VARCHAR2(100 BYTE),
  ta_37 VARCHAR2(100 BYTE),
  ta_38 VARCHAR2(100 BYTE),
  ta_39 VARCHAR2(100 BYTE),
  ta_40 VARCHAR2(100 BYTE),
  ta_41 VARCHAR2(100 BYTE)
)
tablespace DBS1
  pctfree 10
  initrans 1
  maxtrans 255;

  二.給對應的列,列註解

comment on column TC_BUDGETMOVEINFO_FILE.ta_01   is '項次';

對應的正則表示式為:根據表結構來儲存資料正則匹配
(ta_\d\d)(  )(\S.+) comment on column TC_BUDGETMOVEINFO_FILE.$1  is '$3';

三.給表新增主鍵

alter table TC_BUDGETMOVEINFO_FILE --表名
  add constraint TC_BUDGETmove_PK primary key (TA_01, TA_02, TA_03, TA_04) --對應的主鍵名稱
using index --(注意上面這塊,主鍵名稱是這個使用者下面是唯一的,請注意,例如TC_BUDGETmove_PK唯一) tablespace DBS1 pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited );

四.表的授權

grant select, insert, update, delete, references, alter, index on TC_BUDGETMOVEINFO_FILE to
PUBLIC;

五.修改表的欄位

  

5.1 修改表的欄位大小

alter table 表名 modify 欄位名 varchar(100);

5.2修改表的欄位類

--這裡需要注意分兩種情況
---1.修改表的該欄位,列值為空
    alter table 表名 modify (欄位名 nvarchar2(20));--可以Number,Date
    (注意這塊char 和varchar2 即使有資料也可以相互轉化)
---2.修改表的該欄位,列值不為空
    欄位有資料,則改為varchar2(40)執行時會彈出:“ORA-01439:要更改資料型別,則要修改的列必須為空”,這時     要用下面方法來解決這個問題:
    1.修改原有列名
    alter table 表名 rename column name to name_tmp; --原列名改為原列名+tmp,name為表中的一個屬性
    2.新增列名
    alter table 表名 add name varchar2(40);
    3.更新資料
    update 表名 set name=trim(name_tmp);
    4.刪除臨時欄位
    alter table 表名 drop column name_tmp;

總結:

  1. 建立表,需要根據格式,要有規範

  2. 當欄位沒有資料或者要修改的新型別和原型別相容時,可以直接modify修改。

  3. 當欄位有資料並用要修改的新型別和原型別不相容時,要間接新建欄位來轉移

CREATE  TABLE  SEOrder(
          FInterId  INT NOT  NULL ,
          FBillNo  VARCHAR(50)  NOT  NULL,
        KKK  VARCHAR(50),
          FBillerID  INT  DEFAULT(0),
          FDepart  INT  NOT  NULL
 ) 
alter table SEOrder add constraint SEOrder_PK primary key (FInterId);
ALTER  TABLE  SEOrder ADD  FDate  VARCHAR(50)
ALTER  TABLE  SEOrder    DROP  COLUMN  KKK;
ALTER  TABLE  SEOrder  MODIFY    (FDate  DATE );