テーブルフィールド属性を変更するためのOracleシーケンスとテーブルの作成

詳細なOracleデータベースシーケンス

データベース内のシーケンス

 

シーケンスパラメータの概要:

CREATE SEQUENCE sequence //创建序列名称
[INCREMENT BY n] //递增的序列值是 n 如果 n 是正数就递增,如果是负数就递减 默认是 1
[START WITH n] //开始的值,递增默认是 minvalue 递减是 maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值  
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循环/不循环
[{CACHE n | NOCACHE}];//分配并存入到内存中

テーブル作成の例:

-- create table
create table user.t_table_name_des
(
id number(36) not null,
fund_code varchar2(10) not null,
fund_name varchar2(64),
recommended_topic varchar2(1000) not null,
link_url varchar2(255) not null,
icon_url varchar2(255),
push_status number(1) default 0 not null,
client_ids CLOB,
create_date date not null,
update_date date not null,
constraint pk_table_name_des primary key (id)
);

-- add comments
comment on table user.t_table_name_des is '表名称';
comment on column user.t_table_name_des.id is '主键';
comment on column user.t_table_name_des.fund_code is '字段描述';
comment on column ...

-- create sequence
create sequence user.seq_table_name_des
minvalue 1
nomaxvalue 
start with 1
increment by 1 
cache 20 
order;

備考:

varchar(256)の代わりにvarchar(255)を定義します  

In contrast to CHAR, VARCHAR values are stored as a 1-byte or 2-byte length prefix plus data. The length prefix indicates the number of bytes in the value. A column uses one length byte if values require no more than 255 bytes, two length bytes if values may require more than 255 bytes.

与CHAR不同,VARCHAR值存储为1字节或2字节长度的前缀加上数据。长度前缀表示值中的字节数。如果值需要不超过255个字节,则列使用一个长度字节,如果值需要超过255个字节,则使用两个长度字节。

CLOBとBLOBの違い

BLOBとCLOBはどちらもラージフィールドタイプであり、BLOBはバイナリで格納され、CLOBはテキストを直接格納できます。実際、この2つは交換可能です。または、LOBフィールドを直接使用して2つを置き換えることができます。ただし、ORACLEデータベースをより適切に管理するために、通常、画像、ファイル、音楽などの情報はBLOBフィールドに格納され、ファイルは最初にバイナリに変換されてから格納されます。記事や長いテキストの場合、CLOBはストレージに使用されます。これにより、将来のクエリ、更新、ストレージ、およびその他の操作に非常に便利です。

テーブルフィールド属性の変更:

--添加字段
ALTER TABLE
    T_TABLE_NAME ADD(
        MODULE_TYPE NUMBER(4) default 1  NOT NULL,
        TOP_RANKING CHAR(2) default '0' NOT NULL
    );


--修改字段描述
COMMENT ON COLUMN T_TABLE_NAME.MODULE_TYPE is '字段描述';  
COMMENT ON COLUMN T_TABLE_NAME.TOP_RANKING is '字段描述'; 


--修改默认值
ALTER TABLE T_TABLE_NAME modify SORT_DIRECTION default '0'


--修改字段名
alter table T_TABLE_NAME rename column code to factor_code;


--修改字段类型属性
alter table T_TABLE_NAME modify(lab_name varchar2(64));

OracleはSQLレポートを手動で実行しますORA-01400:xxx.IDにNULLを挿入できません問題:

SQL AUTOINCREMENTフィールド

OracleINSERTステートメントの概要

Oracleトリガーの使用例の詳細

ORA-01400:NULLを挿入できません

  • テーブルに対応するシーケンスを作成し、シーケンス名.NEXTVALを使用して、追加時にIDパラメーターに値を割り当てます。
--从DUAL表中查看对应序列最新的值
SELECT SEQ_TABLE_NAME.NEXTVAL FROM SYS.DUAL;

INSERT
INTO T_TABLE_NAME
  (
    ID,
    FUND_CODE,
    FUND_NAME,
    SUBJECT,
    LINK_URL,
    ICON_URL,
    ONLINE_DATE,
    OFFLINE_DATE,
    IS_EFFECTIVE,
    CREATE_DATE,
    UPDATE_DATE
  )
  VALUES
  (
    SEQ_TABLE_NAME.NEXTVAL, 
    '888888',
    '名称',
    'XXX',
    'XXX',
    'XXX',
    to_date('06-1月 -21','DD-MON-RR'),
    to_date('11-1月 -21','DD-MON-RR'),
    0,
    to_date('11-1月 -21','DD-MON-RR'),
    to_date('11-1月 -21','DD-MON-RR')
  );
  • テーブルに対応するシーケンスを確立し、トリガーを作成します(トリガーは新しく追加されたデータにIDを割り当てます)

      現時点では、データを追加し、IDパラメータを指定することはできません

// 触发器SQL 待补充


INSERT
INTO T_TABLE_NAME
  (
    FUND_CODE,
    FUND_NAME,
    SUBJECT,
    LINK_URL,
    ICON_URL,
    ONLINE_DATE,
    OFFLINE_DATE,
    IS_EFFECTIVE,
    CREATE_DATE,
    UPDATE_DATE
  )
  VALUES
  (
    '888888',
    '名称',
    'XXX',
    'XXX',
    'XXX',
    to_date('06-1月 -21','DD-MON-RR'),
    to_date('11-1月 -21','DD-MON-RR'),
    0,
    to_date('11-1月 -21','DD-MON-RR'),
    to_date('11-1月 -21','DD-MON-RR')
  );

対応するエンティティ:

@Data
@Entity
@Table(name = "T_TABLE_NAME")
public class TTableName extends XxxBaseEntity {
    private static final long serialVersionUID = -588668888958562391L;

    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_TABLE_NAME")
    @SequenceGenerator(name = "SEQ_TABLE_NAME", sequenceName = "SEQ_TABLE_NAME", allocationSize = 1)
    private Long id;

    /**
     * XXX
     */
    @Column(name = "FUND_CODE")
    private String fundCode;
    /**
     * XXX
     */
    @Column(name = "FUND_NAME")
    private String fundName;
    /**
     * XXX
     */
    @Transient //不存储到数据库,做临时变量
    private List<String> clientIds;
 
}

 

 

おすすめ

転載: blog.csdn.net/xiangwang2016/article/details/112470229