Daily Grind

システム開発関連の忘備録です

SQLメモ

SQLメモ

■カラムの型の変更

ALTER TABLE my_table MODIFY (COL_A NUMBER(10));

カラム名の変更

ALTER TABLE my_table RENAME COLUMN time_col TO date_col ;

■カラムの削除

ALTER TABLE my_table DROP (char_col , number_col)

-- 以下はオプションなので必須ではない
CASCADE CONSTRAINT INVALIDATE;

■テーブル名の変更

ALTER TABLE table_A RENAME TO table_B;

■テーブルにつけた制約名の変更

ALTER TABLE my_table RENAME CONSTRAINT Z00X1T_PK TO Z00X2T_PK;

■カラムの追加(位置指定なし)

ALTER TABLE my_table ADD (
char_col VARCHAR2(200 byte) DEFAULT 'xxx' NOT NULL ,
number_col NUMBER(10)
);

■テーブル削除(制約も削除、ごみ箱に入れず完全削除)

DROP TABLE my_table CASCADE CONSTRAINTS PURGE ;

■テーブルからテーブル作成

CREATE TABLE table_name AS SELECT * FROM other_table;

■同じ定義のテーブルへ全コピー

INSERT into tblB SELECT * FROM tblA;

■シノニム作成

<XXXX側でシノニム作成>
CREATE OR REPLACE SYNONYM "XXXX"."TABLE_A" FOR "YYYY"."TABLE_B";

<YYYY側でXXXXにselect権限を付与>
GRANT SELECT ON "XXXX"."TABLE_A" TO YYYY ;

■シーケンス作成

CREATE SEQUENCE "XXXX"."XXXXSEQ_001"
MINVALUE 1 MAXVALUE 9999999999
INCREMENT BY 1
START WITH 1
NOCACHE NOORDER CYCLE ;

■登録日時とユーザの更新

update my_table set TS = '2017-12-22', USR = 'SYSTEM';

PL/SQLで例外を発生させる

RAISE_APPLICATION_ERROR(-20000, '独自のエラーメッセージ');

■Date型での検索

select begin_time, end_time, undotsn from dba_hist_undostat
where begin_time >= to_date('2018/02/05 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
and begin_time <= to_date('2018/02/05 23:59:59', 'yyyy/mm/dd hh24:mi:ss');

■日付書式

 to_char(SYSDATE, 'YYYY"年"MM"月"DD"日"')
 --2018年05月23日

 --FM 接頭辞 字詰めモード (スペース/ゼロを挿入するのを無効にする)
 select to_char(now(),'YYYY/FMmm/FMdd');
 --2009/7/3

■BLOBのカラムの表領域変更

alter table テーブル名 move
lob(BLOBカラム名) store as ( tablespace テーブルスペース名);