SE日記 https://oreno-it.info Oracle,SQL,チューニングを中心に Wed, 29 Jul 2020 01:57:01 +0000 ja hourly 1 https://wordpress.org/?v=5.3.11 https://oreno-it.info/wp-content/uploads/2019/03/cropped-computer_side_man-32x32.png SE日記 https://oreno-it.info 32 32 149923770 【PL/SQL】おすすめの参考書まとめ https://oreno-it.info/archives/9390 Tue, 05 May 2020 08:02:03 +0000 https://oreno-it.info/?p=9390 ここではORACLE社が提供するPL/SQL言語を学習するためのおすすめの参考書をまとめて紹介しています。 PL/SQLとは何か、基礎から知りたい方は↓で解説していますので参考にしてください。>>【入門】PL/SQLとは […]

The post 【PL/SQL】おすすめの参考書まとめ first appeared on SE日記.]]>


ここではORACLE社が提供するPL/SQL言語を学習するためのおすすめの参考書をまとめて紹介しています。

PL/SQLとは何か、基礎から知りたい方は↓で解説していますので参考にしてください。
>>【入門】PL/SQLとは何か基礎から解説

おすすめの選定基準

今回は初心者の方でも、取っつきやすいもの、かつ解説が詳しく、長く使えるものを独断と偏見で選定してみました。

できるだけ大きくて重たい本は避けました。

基礎から詳しく学べる1冊

こちらの「プロとしてのOracle PL/SQL入門」は、タイトルに「プロとして~」とありますが、非常に基礎的な内容から分かりやすく記述されているので初めての方でも読みやすいと思います。

そしてそこまで重たくないので持ち歩きもできるので、隙間時間に勉強するのにも使えますし、サンプルソースも豊富なので現場に持っていくにも便利です。

基礎から学べるもう1冊


こちらは黒本と呼ばれるORACLE MASTER SILVER資格の教科書になります。内容としては基本的な内容をしっかりと押さえています。

ただし、初学者の方には分かりづらい表現もあるため、「プロとしてのOracle PL/SQL入門」で学習した後に更に基礎固めをするときにおすすめです。

もちろん、資格試験を受験する方はマストアイテムになります。

もう少し学びたい人向けの1冊



「プロとしてのOracle PL/SQL入門」もしくはORACLE MASTER SILVERの黒本で基礎を学んだ後で、更にもう少し勉強したいと思った方はORACLE MASTER GOLDの黒本をおすすめします。

より詳しく解説されていて試験対策にもなるのでお得です。

開発現場にあると便利な1冊


こちらはポケットリファレンスです。
基礎を学んだ方で、実際に開発現場で使うときに重宝する1冊です。

持ち運ぶにも許容範囲のサイズと重さなので、PL/SQLで開発案件がある場合は1冊持っておきましょう。

チューニングが必要なときの1冊


PL/SQLで開発したプログラムが遅くてチューニングが必要な場合はこちらの「プロとしてのSQLチューニング」がおすすめです。

PL/SQLはSQLの拡張言語なので、当然ながらSQLがボトルネックとなって性能悪化していることが多いです。こちらの書籍でSQLチューニングの基本的な内容について学ぶと良いです。

SQLチューニングよりデータベース側のチューニングに重きを置く場合は↓のExpert試験の黒本などが役立ちます。

The post 【PL/SQL】おすすめの参考書まとめ first appeared on SE日記.]]>
9390
【ORACLE】文字列関数 https://oreno-it.info/archives/7857 Sat, 18 Apr 2020 07:43:11 +0000 https://oreno-it.info/?p=7857 ここではORACLEデータベースの文字列関数についてまとめて紹介しています。 ASCII関数 ASCII関数を使うことで、文字をASCIIコードに変換することができます。※ASCII関数に文字列を引数として渡した場合は最 […]

The post 【ORACLE】文字列関数 first appeared on SE日記.]]>


ここではORACLEデータベースの文字列関数についてまとめて紹介しています。

ASCII関数

ASCII関数を使うことで、文字をASCIIコードに変換することができます。
※ASCII関数に文字列を引数として渡した場合は最初の一文字目の文字コードが返されます。

ASCII関数では、変換したい文字(式)または列名を指定します。

ASCII(文字)

次のSQLでは、文字の’a’をASCIIコードに変換しています。

SELECT ASCII('a') FROM dual;
ASCII('a')
------------
97

CHR関数

CHR関数を使うことで、ASCIIコードを文字に変換することができます。

CHR関数では、変換したい数値(式)を指定します。

CHR(数値)

次のSQLでは、ASCIIコードの97を文字に変換しています。

SELECT CHR(97) FROM dual;
CHR(97)
------------
a

CONCAT関数

CONCAT関数を使うことで、2つの文字列を結合することができます。
※3つ以上の文字列を結合する場合は「||」で結合します。

CONCAT関数では、結合したい文字列を順番に指定します。
文字列1と文字列2を結合した文字列を結果として返します。

CONCAT(文字列1,文字列2)

CONCAT:文字リテラルの結合

次のSQLでは、文字列ABCと文字列DEFを結合しています。

SELECT CONCAT('ABC','DEF') FROM dual;
CONCAT('ABC','DEF')
------------
ABCDEF

CONCAT:文字列の列の結合

次のSQLでは、COL1列とCOL2列の文字列を結合しています。

SELECT CONCAT('ABC','DEF') FROM dual;
CONCAT('ABC','DEF')
------------
ABCDEF

CONCAT:3つ以上の文字列の結合

SELECT 'ABC' || 'DEF' || 'GHI' FROM dual;
'ABC' || 'DEF' || 'GHI'
-----------------------
ABCDEFGHI

CONCAT:(注意点)引数がNULLの場合

文字列1がNULLの場合は文字列2を返します。

文字列2がNULLの場合は文字列2を返します。

文字列1と文字列2が両方NULLの場合は、NULLを返します。

INITCAP関数

INITCAP関数を使うことで、文字列の先頭を大文字に変換することができます。

INITCAP関数では、先頭を大文字に変換したい文字列を指定します。

INITCAP(文字列)

次の例では、文字列’abc def’のように半角スペースが入った場合はabcとdefを別の単語として認識し、先頭の文字を大文字に変換します。

SELECT INITCAP('abc'),INITCAP('abc def') FROM dual;

INITCAP('abc') INITCAP('abc def')
---------------------------------
Abc                       Abc Def

LENGTH関数

LENGTH関数を使うことで、文字列の長さを求めることができます。

LENGTH関数では、長さを求めたい文字列(式)を指定します。

LENGTH(文字列)

実行結果は次のようになります。

SELECT LENGTH('ABC') FROM dual;

LENGTH('ABC')
-------------
            3

LOWER関数

LOWER関数を使うことで、文字列を小文字に変換することができます。

LOWER関数では、小文字に変換したい文字列を指定します。

LOWER(文字列)

実行結果は次のようになります。

SELECT LOWER('ABC'),LOWER('ABC DEF') FROM dual;

LOWER('ABC') LOWER('ABC DEF')
---------------------------------
abc                       abc def

LPAD関数

LPAD関数を使うことで、文字列を指定した長さまで、任意の文字列で左から埋めることが出来ます。

[,文字列2]を指定すると任意の文字列で埋めることができます。指定しない場合は半角スペースで埋めます。

LPAD(文字列1,長さ[,文字列2])

LPAD:左端から半角スペースで埋める

SELECT LPAD('ABC',10) FROM dual;

LPAD('ABC',10)
-----------
       ABC

LPAD:左端から指定した文字列で埋める

SELECT LPAD('ABC',10,'X') FROM dual;

LPAD('ABC',10,'X')
-----------
XXXXXXXABC

LPAD:左端から0で埋める

SELECT LPAD('ABC',10,'0') FROM dual;

LPAD('ABC',10,'0')
-----------
0000000ABC

LTRIM関数

LTRIM関数を使うことで、文字列の左から空白(半角スペース)を削除することが出来ます。

第二引数を指定することで、指定した文字列を左から削除することができます。

[,文字列2]を指定することで、文字列1の左から文字列2を削除することが出来ます。

LTRIM(文字列1[,文字列2])

LTRIM:半角スペースの削除

LTRIMでは文字列の左から連続する半角スペースが削除されます。
文字列中の半角スペースは削除されません。

SELECT LTRIM(' ABC '),LTRIM('D E F') FROM dual;

LTRIM('ABC') LTRIM('D E F')
---------------------------
        ABC           D E F

LTRIM:指定した文字列の削除

SELECT LTRIM('ABC','AB') FROM dual;

LTRIM('ABC','AB')
-----------------
                C

NCHAR関数

NCHR関数を使うことで、ユニコードを文字に変換することができます。

NCHR関数では、変換したい数値(式)を指定します。

NCHR(数値)

次のSQLでは、ユニコードの97を文字に変換しています。

SELECT NCHR(97) FROM dual;
NCHR(97)
------------
a

REPLACE関数

REPLACE関数を使うことで、文字列中の文字を別の文字に置換することが出来ます。

REPLACE(文字列,置換前の文字列,置換後の文字列)

実行結果は次のようになります。

SELECT REPLACE('ABC ABC','A','S') FROM dual;

REPLACE('ABC ABC','A','S')
--------------------------
                   SBC SBC

SELECT REPLACE('ABC ABC','ABC','X') FROM dual;

REPLACE('ABC ABC','ABC','XXX')
------------------------------
                       XXX XXX

RPAD関数

RPAD関数を使うことで、文字列を指定した長さまで、任意の文字列で右から埋めることが出来ます。

[,文字列2]を指定すると任意の文字列で埋めることができます。指定しない場合は半角スペースで埋めます。

RPAD(文字列1,長さ[,文字列2])

RPAD:右端から半角スペースで埋める

SELECT RPAD('ABC',10) FROM dual;

RPAD('ABC',10)
-----------
ABC       

RPAD:右端から指定した文字列で埋める

SELECT RPAD('ABC',10,'X') FROM dual;

RPAD('ABC',10,'X')
-----------
ABCXXXXXXX

RPAD:右端から0で埋める

SELECT RPAD('ABC',10,'0') FROM dual;

RPAD('ABC',10,'0')
-----------
ABC0000000

RTRIM関数

RTRIM関数を使うことで、文字列の右から空白(半角スペース)を削除することが出来ます。

第二引数を指定することで、指定した文字列を右から削除することができます。

[,文字列2]を指定することで、文字列1の左から文字列2を削除することが出来ます。

RTRIM(文字列1[,文字列2])

RTRIM:半角スペースの削除

RTRIMでは文字列の左から連続する半角スペースが削除されます。
文字列中の半角スペースは削除されません。

SELECT RTRIM(' ABC '),RTRIM('D E F') FROM dual;

RTRIM(' ABC ')RTRIM('D E F')
----------------------------
           ABC         D E F

RTRIM:指定した文字列の削除

SELECT RTRIM('ABC','C') FROM dual;

RTRIM('ABC','C')
----------------
              AB

SUBSTR関数

SUBSTR関数を使うことで、文字列を指定した位置から、任意の文字数を切り取ることが出来ます。

文字列を指定した切り取り開始位置から、任意の文字数分で切り取ります。

SUBSTR(文字列,切り取り開始位置,文字数)

SUBSTR:先頭からn文字を切り取る

SELECT SUBSTR('ABCDEF',1,3) FROM dual;

SUBSTR('ABCDEF',1,3)
--------------------
                 ABC

SUBSTR:3文字目から文字を切り取る

SELECT SUBSTR('ABCDEF',3,5) FROM dual;

SUBSTR('ABCDEF',3,5)
--------------------
                 CDE

SUBSTR:3文字目以降の文字を切り取る

SELECT SUBSTR('ABCDEF',3) FROM dual;

SUBSTR('ABCDEF',3)
------------------
              CDEF

SUBSTR:後ろからn番目の文字を切り取る

SELECT SUBSTR('ABCDEF',-3,3) FROM dual;

SUBSTR('ABCDEF',-3,3)
---------------------
                  DEF

TRIM関数

TRIM関数を使うことで、文字列から指定した文字列を削除することができます。

[文字列2 FROM ]を指定することで、文字列1から文字列2を削除することが出来ます。

[文字列2 FROM ]を指定しない場合は、文字列1から半角スペースが削除されます。

TRIM([文字列2 FROM ] 文字列1)

TRIM:半角スペースの削除

TRIMでは文字列の前後にある半角スペースが削除されます。
文字列中の半角スペースは削除されません。

SELECT TRIM(' ABC '),TRIM('D E F') FROM dual;

TRIM('ABC') TRIM('D E F')
-------------------------
        ABC         D E F

TRIM:指定した文字列の削除

SELECT TRIM('A' FROM 'ABC') FROM dual;

TRIM('ABC')
-----------
         BC

UNICODE関数

UNICODE関数を使うことで、文字をユニコードに変換することができます。
※UNICODE関数に文字列を引数として渡した場合は最初の一文字目の文字コードが返されます。

UNICODE関数では、変換したい文字(式)または列名を指定します。

UNICODE(文字)

次のSQLでは、文字の’a’をユニコードに変換しています。

SELECT UNICODE('a') FROM dual;
UNICODE('a')
------------
97

UPPER関数

UPPER関数を使うことで、文字列を大文字に変換することができます。

UPPER関数では、大文字に変換したい文字列を指定します。

UPPER(文字列)

実行結果は次のようになります。

SELECT UPPER('abc'),UPPER('abc def') FROM dual;

UPPER('abc') UPPER('abc def')
---------------------------------
ABC                       ABC DEF
The post 【ORACLE】文字列関数 first appeared on SE日記.]]>
7857
【ORACLE】数学関数 https://oreno-it.info/archives/7839 Sat, 18 Apr 2020 03:03:36 +0000 https://oreno-it.info/?p=7839 ここではORACLEデータベースの数学関数についてまとめて紹介しています。 ACOS関数 ACOS関数を使うことで、指定した値の逆コサインを求めることが出来ます。 実行結果は次のようになります。 ASIN関数 ASIN関 […]

The post 【ORACLE】数学関数 first appeared on SE日記.]]>


ここではORACLEデータベースの数学関数についてまとめて紹介しています。

ACOS関数

ACOS関数を使うことで、指定した値の逆コサインを求めることが出来ます。

ACOS(値)

実行結果は次のようになります。

SELECT col1,ACOS(col1) FROM tab1;

col1 ACOS(col1)
--------------
0    1.5707963
1    0.0

ASIN関数

ASIN関数を使うことで、指定した値の逆サインを求めることが出来ます。

ASIN(値)

実行結果は次のようになります。

SELECT col1,ASIN(col1) FROM tab1;

col1 ASIN(col1)
--------------
0    0.0
1    1.5707963

ATAN関数

ATAN関数を使うことで、指定した値の逆タンジェントを求めることが出来ます。

ATAN(値)

実行結果は次のようになります。

SELECT col1,ATAN(col1) FROM tab1;

col1 ATAN(col1)
--------------
0    0.0
1    0.7853981

ATAN2関数

ATAN2関数を使うことで、指定した2つの値から逆タンジェントを求めることが出来ます。

ATAN2(値)

実行結果は次のようになります。

SELECT ATAN2(1,1) FROM dual;

ATAN2(1,1)
----------
0.7853982

COS関数

COS関数を使うことで、指定した値のコサインを求めることが出来ます。

COS(値)

実行結果は次のようになります。

SELECT col1,COS(col1) FROM tab1;

col1 COS(col1)
--------------
0    1.0000000
1    0.5403023
2    -0.416146

EXP関数

EXP関数を使うことで、指定した値の指数を求めることが出来ます。

EXP(値)

実行結果は次のようになります。

SELECT col1,EXP(col1) FROM tab1;

col1 EXP(col1)
--------------
0.0  1.0
1.0  2.7182818
2.0  7.3890561

LN関数

LN関数を使うことで、指定した値の自然対数を求めることが出来ます。

LN(値)

実行結果は次のようになります。

SELECT col1,LN(col1) FROM tab1;

col1 LN(col1)
---------------
1.0  0.0
2.0  0.69314718

POWER関数

POWER関数を使うことで、指定した値のべき乗を求めることが出来ます。

POWER(値1,値2)

実行結果は次のようになります。

SELECT col1,col2,POWER(col1,col2) FROM dual;

col1 col2 POWER(col1,col2)
--------------------------
   1    1                1
   2    0                2
   2    2                4

SIN関数

SIN関数を使うことで、指定した値のサインを求めることが出来ます。

SIN(値)

実行結果は次のようになります。

SELECT col1,SIN(col1) FROM tab1;

col1 SIN(col1)
--------------
0    0
1    0.8414709
2    0.9092974

SQRT関数

SQRT関数を使うことで、指定した値の平方根を求めることが出来ます。

SQRT(値)

実行結果は次のようになります。

SELECT col1,SQRT(col1) FROM dual;

col1 SQRT(col1)
--------------
1.0  1.0
2.0  1.412136

TAN関数

TAN関数を使うことで、指定した値のタンジェントを求めることが出来ます。

TAN(値)

実行結果は次のようになります。

SELECT col1,TAN(col1) FROM dual;

col1 TAN(col1)
--------------
0    0.0000000
1    1.5574077
2    -2.185039
The post 【ORACLE】数学関数 first appeared on SE日記.]]>
7839
【ORACLE】変換関数 https://oreno-it.info/archives/7827 Sat, 18 Apr 2020 02:41:56 +0000 https://oreno-it.info/?p=7827 ここではORACEデータベースの変換関数をまとめて紹介しています。 CAST関数 CAST関数を使うことで、指定した値を、任意の型に変換することが出来ます。 実行結果は次のようになります。 COALESCE関数 COAL […]

The post 【ORACLE】変換関数 first appeared on SE日記.]]>


ここではORACEデータベースの変換関数をまとめて紹介しています。

CAST関数

CAST関数を使うことで、指定した値を、任意の型に変換することが出来ます。

CAST(値 AS 変換する型名)

実行結果は次のようになります。

SELECT CAST(12345 AS VARCHAR2(5)) FROM dual;

CAST(12345 AS VARCHAR2(5))
--------------------------
12345

SELECT CAST(123456789 AS VARCHAR2(5)) FROM dual;

CAST(123456789 AS VARCHAR2(5))
------------------------------
12345

SELECT CAST('19/09/09′ AS DATE) FROM dual;

CAST('19/09/09′ AS DATE)
------------------------
2019-09-09 00:00:00.000

COALESCE関数

COALESCE関数を使うことで、指定した列・式の値のうち、NULLでない初めの値を返します。

COALESCE(列名1[,列名2・・・])

実行結果は次のようになります。

SELECT COALESCE(NULL,1,NULL,2,3),COALESCE(2,3) FROM dual;

COALESCE(NULL,1,NULL,2,3)
-------------------------
1

SELECT COALESCE(2,3) FROM dual;

COALESCE(2,3)
--------------
2

SELECT COALESCE(NULL,NULL) FROM dual;

COALESCE(NULL,NULL)
-------------------
NULL

DECODE関数

DECODE関数を使うことで、条件分岐させて値を変換することが出来ます。

DECODE関数は、列の値によって条件分岐させて値を変換することが出来ます。

DECODE関数の基本文法は次の通りです。
列の値が、検索値1に一致するとき結果1を返します。検索値1に一致せず検索値2に一致する場合は結果2を返します、どの値にも一致しなかった場合は結果3を返します。

DECODE(列名,検索値1,結果1,検索値2,結果2, 結果3)

DECODE関数についてはサンプルがたくさんあるので↓のページでまとめて紹介しています。参考にしてください。
>>【ORACLE】DECODE関数の書き方:サンプル多数あり

NULLIF関数

NULLIF関数を使うことで、指定した2つの列・式の値が等しい場合にNULL値を返します。

指定した2つの値が等しくない場合は、1つ目に指定した値を返します。

NULLIF(列名1,列名2)

実行結果は次のようになります。

SELECT NULLIF(1,1),NULLIF(1,2) FROM dual;

NULLIF(1,1)  NULLIF(1,2)
--------------------------
NULL         1

NVL関数

NVL関数を使うことで、NULL値を変換することが出来ます。

指定した列の値がNULLではない場合は、そのまま列の値が返されます。

NVL(列名,NULL値を変換する値)

実行結果は次のようになります。

SELECT col1,NVL(col1,0) FROM tab1;

col1  NVL(col1,0)
-------------------
test  test
NULL  0

TO_CHAR関数

TO_CHAR関数を使うことで、指定した値(数値または日付)を、文字列型に変換することが出来ます。

--数値→文字列への変換
TO_CHAR(値)

--日付→文字列への変換
TO_CHAR(値[,日付のフォーマット])

実行結果は次のようになります。

SELECT TO_CHAR(12345) FROM dual;

TO_CHAR(12345)
--------------
12345

SELECT TO_CHAR(col1,'YYYY/MM/DD') FROM dual;

TO_CHAR(col1,'YYYY/MM/DD')
---------------------------
2019/09/09

SELECT TO_CHAR(col1,'YYYYMMDD') FROM dual;

TO_CHAR(col1,'YYYYMMDD')
---------------------------
20190909

SELECT TO_CHAR(col1,'YYYY/MM/DD HH24:MI:SS') FROM dual;

TO_CHAR(col1,'YYYY/MM/DD HH24:MI:SS')
--------------------------------------
2019/09/09 11:00:00

TO_DATE関数

TO_DATE関数を使うことで、文字列を日付型に変換することが出来ます。

--文字列→日付への変換
TO_DATE(文字列)

--フォーマットの指定
TO_DATE(文字列[,日付のフォーマット])

実行結果は次のようになります。

SELECT col1,TO_DATE(col1,'YYYY/MM/DD') FROM dual;

col1     TO_DATE(col1,'YYYY/MM/DD')
-----------------------------------
20191001                 2019/10/01

SELECT col1,TO_DATE(col1,'YYYY/MM/DD HH24:MI:SS') FROM dual;

col1           TO_DATE(col1,'YYYY/MM/DD HH24:MI:SS')
-----------------------------------------------------
20191001101010                    2019/10/01 10:10:10

TO_NUMBER関数

TO_NUMBER関数を使うことで、文字列を数値型に変換することが出来ます。

--文字列→数値への変換
TO_NUMBER(文字列)

--フォーマットの指定
TO_NUMBER(文字列[,数値のフォーマット])

実行結果は次のようになります。

SELECT col1,TO_NUMBER(col1) FROM dual;

col1    TO_NUMBER(col1)
-----------------------
12345             12345
-123               -123

SELECT col1,TO_NUMBER(col1,'999.9') FROM dual;

col1   TO_NUMBER(col1,'999.9')
-------------------------------
1234.5                   1234.5
The post 【ORACLE】変換関数 first appeared on SE日記.]]>
7827
【ORACLE】算術関数 https://oreno-it.info/archives/7814 Sat, 18 Apr 2020 02:13:12 +0000 https://oreno-it.info/?p=7814 ここではORACELデータベースの算術関数についてまとめて紹介しています。 ABS関数 ABS関数を使うことで、指定した値の絶対値を求めることが出来ます。 実行結果は次のようになります。 CEIL関数 CEIL関数を使う […]

The post 【ORACLE】算術関数 first appeared on SE日記.]]>


ここではORACELデータベースの算術関数についてまとめて紹介しています。

ABS関数

ABS関数を使うことで、指定した値の絶対値を求めることが出来ます。

ABS(値)

実行結果は次のようになります。

SELECT col1,ABS(col1) FROM tab1;

col1   ABS(col1)
----------------
    0          0
12345      12345
-123         123

CEIL関数

CEIL関数を使うことで、指定した値以上で最も小さい整数を求めることが出来ます。

CEIL(値)

実行結果は次のようになります。

SELECT col1,CEIL(col1) FROM tab1;

col1 CEIL(col1)
---------------
 0.5          1
 1.5          2
-2.5         -2

FLOOR関数

FLOOR関数を使うことで、指定した値以下で最も大きい整数を求めることが出来ます。

FLOOR(数値)

実行結果は次のようになります。

SELECT col1,FLOOR(col1) FROM tab1;

col1    FLOOR(col1)
-------------------
1.2345            1
-1.234           -2

GREATEST関数

GREATEST関数を使うことで、指定した引数の中で最も大きな値を求めることが出来ます。

GREATEST(値1,値2[,値3...])

実行結果は次のようになります。

SELECT col1,col2,GREATEST(col1,col2) FROM tab1;

col1 col2 GREATEST(col1,col2)
-----------------------------
   1    2                   2
   4    3                   4
   5 null                null

SELECT col1,col2,col3,GREATEST(col1,col2,col3) FROM tab1;

col1 col2 col3 GREATEST(col1,col2,col3)
---------------------------------------
   1    2    3                        3
   4    6    5                        6
   5 null    7                     null

LEAST関数

LEAST関数を使うことで、指定した引数の中で最も小さな値を求めることが出来ます。

LEASTT(値1,値2[,値3...])

実行結果は次のようになります。

SELECT col1,col2,LEAST(col1,col2) FROM tab1;

col1 col2 LEAST(col1,col2)
--------------------------
   1    2                1
   4    3                3
   5 null             null

SELECT col1,col2,col3,LEAST(col1,col2,col3) FROM tab1;

col1 col2 col3 LEAST(col1,col2,col3)
------------------------------------
   1    2    3                     1
   5    6    4                     4
   5 null    7                  null

MOD関数

MOD関数を使うことで、指定した値の剰余(割り算した余り)を求めることが出来ます。

値1を値2で割った余り(剰余)を求めます。

MOD(値1,値2)

実行結果は次のようになります。


SELECT col1,col2,ROUND(col1,col2) FROM tab1;

col1 col2 ROUND(col1,col2)
---------------------------
10   10   0
10    9   1
10    8   2

ROUND関数

ROUND関数を使うことで、指定した値を四捨五入した値を求めることが出来ます。

ROUND(数値[,桁数])

実行結果は次のようになります。

SELECT col1,ROUND(col1) FROM tab1;

col1    ROUND(col1)
-------------------
1.2345            1

SELECT col1,ROUND(col1,2) FROM tab1;

col1    ROUND(col1,2)
----------------------
1.238             1.24

SIGN関数

SIGN関数を使うことで、指定した値の符号を求めることが出来ます。

SIGN(値)

実行結果は次のようになります。

SELECT col1,SIGN(col1) FROM tab1;

col1   SIGN(col1)
-----------------
    0           0
12345           1
-123           -1

TRUNC関数

TRUNC関数を使うことで、指定した値の小数点以下を切り捨てた値を求めることが出来ます。

小数点以下で切り捨てる桁数を指定することが出来ます。
指定しない場合は小数点以下を切り捨てます。

TUNC(数値[,桁数])

実行結果は次のようになります。

SELECT col1,TRUNC(col1) FROM tab1;

col1    TRUNC(col1)
-------------------
1.2345            1
0.52              0

SELECT col1,TRUNC(col1,1) FROM tab1;

col1    TRUNC(col1)
-------------------
1.2345          1.2
0.52            0.5
The post 【ORACLE】算術関数 first appeared on SE日記.]]>
7814
【ORACLE】日付関数 https://oreno-it.info/archives/7804 Sat, 18 Apr 2020 01:53:25 +0000 https://oreno-it.info/?p=7804 ここではORACLEデータベースの日付関数の使い方を紹介しています。 CURRENT_DATE関数 CURRENT_DATE関数を使うことで、現在の日付を取得することが出来ます。 実行すると次のように結果を返します。 C […]

The post 【ORACLE】日付関数 first appeared on SE日記.]]>


ここではORACLEデータベースの日付関数の使い方を紹介しています。

CURRENT_DATE関数

CURRENT_DATE関数を使うことで、現在の日付を取得することが出来ます。

CURRENT_DATE

実行すると次のように結果を返します。

SELECT CURRENT_DATE FROM dual;

CURRENT_DATE
-------------------
2019-09-09

CURRENT_TIMESTAMP関数

CURRENT_TIMESTAMP関数を使うことで、現在の日時を取得することが出来ます。

CURRENT_TIMESTAMP

実行すると次のように結果を返します。

SELECT CURRENT_TIMESTAMP FROM dual;

CURRENT_TIMESTAMP
-------------------
2019-09-09 10:00:00

LAST_DAY関数

LAST_DAY関数を使うことで、月末の日を取得することが出来ます。

LAST_DAY(日付)

実行すると次のように結果を返します。

SELECT SYSDATE FROM dual;

SYSDATE
-------------------
2019-09-09 10:00:00

SELECT LAS_TDAY(SYSDATE) FROM dual;

LAS_TDAY(SYSDATE)
-------------------
2019-09-30 10:00:00

SELECT TO_CHAR(LAS_TDAY(SYSDATE),'YYYY/MM/DD') FROM dual;

TO_CHAR(LAS_TDAY(SYSDATE),'YYYY/MM/DD')
---------------------------------------
2019/09/30

MONTHS_BETWEEN関数

MONTHS_BETWEEN関数を使うことで、日付の差(月の単位)を求めることが出来ます。

日付1から日付1を引いた差を月単位に求めることが出来ます。

MONTHS_BETWEEN(日付1,日付2)

実行すると次のように結果を返します。

SELECT dt1,dt2,MONTHS_BETWEEN(dt1,dt2) FROM test;

dt1       dt2       MONTHS_BETWEEN(dt1,dT2)
-------------------------------------------
19-10-01  09-09-01  1
19-09-25  09-10-01  -1

NEXT_DAY関数

NEXT_DAY関数を使うことで、ある日付の翌日以降で、指定した曜日の日付を求めることが出来ます。

NEXT_DAY(日付,曜日)

次のSQLでは、2019年9月1日の翌日以降で、次の月曜日の日付を取得しています。

SELECT NEXT_DAY(TO_DATE('2019/09/01','yyyy/mm/dd'),'monday') NEXT1 FROM dual;

NEXT1
-------------------
2019-09-02 00:00:00

SELECT NEXT_DAY(TO_DATE('2019/09/01','yyyy/mm/dd'),'月曜日') NEXT1 FROM dual;

NEXT1
-------------------
2019-09-02 00:00:00

SYSDATE関数

SYSDATE関数を使うことで、現在の日付・時刻を取得することが出来ます。
SYSDATEはSELECT句やWHERE句で使うことが出来ます。

SYSDATE

実行すると次のように結果を返します。

SELECT SYSDATE FROM dual;

SYSDATE
-------------------
2019-09-09 10:00:00

SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD') FROM dual;

TO_CHAR(SYSDATE,'YYYY/MM/DD')
------------------------------
2019/09/09
The post 【ORACLE】日付関数 first appeared on SE日記.]]>
7804
【ORACLE】集計関数 https://oreno-it.info/archives/7788 Fri, 17 Apr 2020 10:45:43 +0000 https://oreno-it.info/?p=7788 ここではORACLEデータベースのSQLで、集計関数の使い方を紹介しています。 AVG関数 AVG関数では、平均値を計算したい数値または列名を指定します。 ・DISTINCT/ALL DISTINCTを指定すると重複値を […]

The post 【ORACLE】集計関数 first appeared on SE日記.]]>


ここではORACLEデータベースのSQLで、集計関数の使い方を紹介しています。

AVG関数

AVG関数では、平均値を計算したい数値または列名を指定します。

・DISTINCT/ALL
 DISTINCTを指定すると重複値を除いた平均値を求めます。ALLを指定すると全ての値の平均値を求めます。デフォルト値はALLです。

AVG([DISTINCT | ALL]式)

AVG:レコード全体から平均値を求める

レコード全体から平均値を求める場合は、GROUP BYを指定せずにAVG関数を使います。

GROUP BYを使わずにAVG関数を記述した場合、SELECT結果全体を1つのグループとして捉え、SELECT結果全体から平均値を計算します。

SELECT AVG(age) FROM employee;

AVG:グループごとの平均値を求める

次のSQLでは、EMPLOYEE表でdept_cdでグループ化し、AGE列の平均値を計算しています。

SELECT dept_cd,AVG(age) FROM employee GROUP BY dept_cd;

複数の列でグループ化した結果の平均値を求めることもできます。
次のSQLでは、DEPT_CDとJOB_IDごとのAGE列の平均値を計算しています。

SELECT dept_cd,job_id,AVG(age) FROM employee GROUP BY dept_cd,job_id;

AVG:重複値を除いた平均値を求める

重複値を除く場合は、AVG関数でDISTINCTを指定します。

SELECT AVG(DISTINCT age) FROM employee;

AVG:特定のレコードから平均値を求める

AVG関数を使うSQLでも、通常のSELECT文と同じようにWHERE句に条件を書くことが出来ます。

次のSQLでは、WHERE句でDEPT_CDが001または002のレコードを対象として、DEPT_CDグループ化し、平均値を求めています。

SELECT AVG(age) FROM employee WHERE dept_cd in ('001','002');

WHERE句の条件には、EXISTSや副問合せを使うこともできます。
次のSQLではEMPLOYEE表のレコードで、SALES表に該当するレコードが存在するレコードを対象として、AGE列の平均値を求めています。

--EXISTSの例
SELECT
    AVG(a.age)
FROM
    employee a
WHERE
    EXISTS (SELECT
                'x'
            FROM
                 sales b
            WHERE
                 a.id = b.id);

--サブクエリーの例
SELECT
    AVG(a.age)
FROM
    employee a
WHERE
    a.id (SELECT DISTINCT
              b.id
          FROM
              sales b);

AVG:(注意点)NULL値のレコードについて

AVG関数では、NULL値のレコードは平均値の計算に含まれません。

グループ内のレコードが全てNULLの場合は、NULLが返されます。

COUNT関数

COUNT関数では、行数をカウントしたい式または列名を指定します。

・DISTINCT/ALL
 DISTINCTを指定すると重複値を除いた行数を求めます。ALLを指定すると全ての行数を求めます。デフォルト値はALLです。

COUNT([DISTINCT | ALL] 式)

COUNT:テーブル全体の行数を求める

テーブル全体から行数を求める場合は、GROUP BYを指定せずにCOUNT関数を使います。

SELECT COUNT(*) FROM employee;

COUNT:グループごとの行数を求める

次のSQLでは、EMPLOYEE表でdept_cdでグループ化し、行数を計算しています。

SELECT dept_cd,COUNT(*) FROM employee GROUP BY dept_cd;

複数の列でグループ化した結果の行数を求めることもできます。
次のSQLでは、DEPT_CDとJOB_IDごとの行数を計算しています。

SELECT dept_cd,job_id,COUNT(*) FROM employee GROUP BY dept_cd,job_id;

COUNT:特定の列の行数を求める

次のSQLでは、AGE列の行数を求めています。

COUNT関数では、NULL値は無視されるので、NULL値以外の値の個数が返されます。

SELECT COUNT(age) FROM employee;

COUNT:重複値を除いた行数を求める

重複値を除く場合は、COUNT関数でDISTINCTを指定します。

SELECT COUNT(DISTINCT age) FROM employee;

COUNT:特定のレコードから行数を求める

COUNT関数を使うSQLでも、通常のSELECT文と同じようにWHERE句に条件を書くことが出来ます。

次のSQLでは、WHERE句でDEPT_CDが001または002のレコードを対象として、DEPT_CDグループ化し、行数を求めています。

SELECT COUNT(*) FROM employee WHERE dept_cd in ('001','002');

WHERE句の条件には、EXISTSや副問合せを使うこともできます。

次のSQLではEMPLOYEE表のレコードで、SALES表に該当するレコードが存在するレコードを対象として、AGE列の行数を求めています。

--EXISTSの例
SELECT
    COUNT(*)
FROM
    employee a
WHERE
    EXISTS (SELECT
                'x'
            FROM
                 sales b
            WHERE
                 a.id = b.id);

--サブクエリーの例
SELECT
    COUNT(*)
FROM
    employee a
WHERE
    a.id (SELECT DISTINCT
              b.id
          FROM
              sales b);

COUNT:(注意点)NULL値のレコードについて

COUNT関数では、NULL値のレコードは行数の計算に含まれません。

全てのレコードがNULLの場合は0を返します。

MAX関数

MAX関数では、最大値を計算したい式または列名を指定します。

MAX関数では数値、文字列、日付型を指定することが出来ます。

GROUP BYを指定しない場合は、SELECT結果全体を1つのグループとして集計します。

MAX(式) 

MAX:レコード全体から最大値を求める

レコード全体から最大値を求める場合は、GROUP BYを指定せずにMAX関数を使います。

GROUP BYを使わずにMAX関数を記述した場合、SELECT結果全体を1つのグループとして捉え、SELECT結果全体から最大値を計算します。

SELECT MAX(age) FROM employee;

MAX:グループごとの最大値を求める

次のSQLでは、EMPLOYEE表でdept_cdでグループ化し、AGE列の最大値を計算しています。

SELECT dept_cd,MAX(age) FROM employee GROUP BY dept_cd;

複数の列でグループ化した結果の最大値を求めることもできます。
次のSQLでは、DEPT_CDとJOB_IDごとのAGE列の最大値を計算しています。

SELECT dept_cd,job_id,MAX(age) FROM employee GROUP BY dept_cd,job_id;

MAX:特定のレコードから最大値を求める

MAX関数を使うSQLでも、通常のSELECT文と同じようにWHERE句に条件を書くことが出来ます。

次のSQLでは、WHERE句でDEPT_CDが001または002のレコードを対象として、DEPT_CDグループ化し、最大値を求めています。

SELECT MAX(age) FROM employee WHERE dept_cd in ('001','002');

WHERE句の条件には、EXISTSや副問合せを使うこともできます。
次のSQLではEMPLOYEE表のレコードで、SALES表に該当するレコードが存在するレコードを対象として、AGE列の最大値を求めています。

--EXISTSの例
SELECT
    MAX(a.age)
FROM
    employee a
WHERE
    EXISTS (SELECT
                'x'
            FROM
                 sales b
            WHERE
                 a.id = b.id);

--サブクエリーの例
SELECT
    MAX(a.age)
FROM
    employee a
WHERE
    a.id (SELECT DISTINCT
              b.id
          FROM
              sales b);

MAX:(注意点)NULL値のレコードについて

MAX関数では、NULL値のレコードは最大値の計算に含まれません。

グループ内のレコードが全てNULLの場合は、NULLが返されます。

MIN関数

MIN関数では、最小値を計算したい式または列名を指定します。

MIN関数では数値、文字列、日付型を指定することが出来ます。

GROUP BYを指定しない場合は、SELECT結果全体を1つのグループとして集計します。

MIN(式)

MIN:レコード全体から最小値を求める

レコード全体から最小値を求める場合は、GROUP BYを指定せずにMIN関数を使います。

GROUP BYを使わずにMIN関数を記述した場合、SELECT結果全体を1つのグループとして捉え、SELECT結果全体から最小値を計算します。

SELECT MIN(age) FROM employee;

MIN:グループごとの最小値を求める

次のSQLでは、EMPLOYEE表でdept_cdでグループ化し、AGE列の最小値を計算しています。

SELECT dept_cd,MIN(age) FROM employee GROUP BY dept_cd;

MIN:特定のレコードから最小値を求める

MIN関数を使うSQLでも、通常のSELECT文と同じようにWHERE句に条件を書くことが出来ます。

次のSQLでは、WHERE句でDEPT_CDが001または002のレコードを対象として、DEPT_CDグループ化し、最小値を求めています。

SELECT MIN(age) FROM employee WHERE dept_cd in ('001','002');

WHERE句の条件には、EXISTSや副問合せを使うこともできます。
次のSQLではEMPLOYEE表のレコードで、SALES表に該当するレコードが存在するレコードを対象として、AGE列の最小値を求めています。

--EXISTSの例
SELECT
    MIN(a.age)
FROM
    employee a
WHERE
    EXISTS (SELECT
                'x'
            FROM
                 sales b
            WHERE
                 a.id = b.id);

--サブクエリーの例
SELECT
    MIN(a.age)
FROM
    employee a
WHERE
    a.id (SELECT DISTINCT
              b.id
          FROM
              sales b);

MIN:(注意点)NULL値のレコードについて

MIN関数では、NULL値のレコードは最小値の計算に含まれません。

グループ内のレコードが全てNULLの場合は、NULLが返されます。

SUM関数

SUM関数では、合計値を計算したい数値または列名を指定します。

・DISTINCT/ALL
 DISTINCTを指定すると重複値を除いた合計値を求めます。ALLを指定すると全ての値の合計値を求めます。デフォルト値はALLです。

SUM([DISTINCT | ALL]式)

MIN:レコード全体から合計値を求める

レコード全体から合計値を求める場合は、GROUP BYを指定せずにSUM関数を使います。

GROUP BYを使わずにSUM関数を記述した場合、SELECT結果全体を1つのグループとして捉え、SELECT結果全体から合計値を計算します。

SELECT SUM(age) FROM employee;

MIN:グループごとの合計値を求める

次のSQLでは、EMPLOYEE表でdept_cdでグループ化し、AGE列の合計値を計算しています。

SELECT dept_cd,SUM(age) FROM employee GROUP BY dept_cd;

複数の列でグループ化した結果の合計値を求めることもできます。
次のSQLでは、DEPT_CDとJOB_IDごとのAGE列の合計値を計算しています。

SELECT dept_cd,job_id,SUM(age) FROM employee GROUP BY dept_cd,job_id;

MIN:重複値を除いた合計値を求める

重複値を除く場合は、SUM関数でDISTINCTを指定します。

SELECT SUM(DISTINCT age) FROM employee;

MIN:特定のレコードから合計値を求める

SUM関数を使うSQLでも、通常のSELECT文と同じようにWHERE句に条件を書くことが出来ます。

次のSQLでは、WHERE句でDEPT_CDが001または002のレコードを対象として、DEPT_CDグループ化し、合計値を求めています。

SELECT SUM(age) FROM employee WHERE dept_cd in ('001','002');

WHERE句の条件には、EXISTSや副問合せを使うこともできます。
次のSQLではEMPLOYEE表のレコードで、SALES表に該当するレコードが存在するレコードを対象として、AGE列の合計値を求めています。

--EXISTSの例
SELECT
    SUM(a.age)
FROM
    employee a
WHERE
    EXISTS (SELECT
                'x'
            FROM
                 sales b
            WHERE
                 a.id = b.id);

--サブクエリーの例
SELECT
    SUM(a.age)
FROM
    employee a
WHERE
    a.id (SELECT DISTINCT
              b.id
          FROM
              sales b);

MIN:(注意点)NULL値のレコードについて

SUM関数では、NULL値のレコードは合計値の計算に含まれません。

グループ内のレコードが全てNULLの場合は、NULLが返されます。

The post 【ORACLE】集計関数 first appeared on SE日記.]]>
7788
ORACLEデータベースの使い方 https://oreno-it.info/archives/7712 Thu, 16 Apr 2020 08:25:03 +0000 https://oreno-it.info/?p=7712 このページでは、ORACLEデータベース、SQLの基礎知識からチューニングに関する情報など、実際に使えるサンプルを多数紹介しています。 ORACLEデータベースの使い方 ORACLEデータベースの基礎知識・【初心者向け】 […]

The post ORACLEデータベースの使い方 first appeared on SE日記.]]>


このページでは、ORACLEデータベース、SQLの基礎知識からチューニングに関する情報など、実際に使えるサンプルを多数紹介しています。

ORACLEデータベースの使い方

ORACLEデータベースの基礎知識
【初心者向け】SQLとは?基礎から分かりやすく解説
バックグラウンドプロセスとは
データベースバッファキャッシュと共有プール
SGAとPGA

ORACLEの起動・停止
インスタンスの起動と停止コマンド
リスナーの起動と停止
OEM(OracleEnterpriseManager)の起動と停止方法

SQLの基本構文
SELECT文の書き方:サンプル多数あり
INSERT文の書き方:サンプル多数あり
UPDATE文の書き方:サンプル多数あり
DELETE文の書き方:サンプル多数あり
LIKE条件の書き方:サンプル多数あり
CASE式の書き方:サンプル多数あり
DECODE関数の書き方:サンプル多数あり
IN条件の書き方
BETWEEN条件の書き方
WITH句の書き方や使い方
【SQL整形】ルールや方法まとめ:サンプル多数あり
やりがちな外部結合のミスや誤り

データベース
データベースを作成・削除するSQL
グローバルデータベース名を確認・変更するSQL

ユーザー
ユーザー(スキーマ)を作成・変更・削除するSQL
ユーザー(スキーマ)を丸ごとコピーする方法
ユーザー(スキーマ)の一覧を確認するSQL

オブジェクト・システム権限
権限とは?システム・オブジェクト権限について
システム権限を付与・取消するSQL
オブジェクト権限を付与・取消するSQL
ユーザに付与されている権限を確認するSQL
システム権限の一覧
オブジェクト権限を確認するSQL

ロール
ロールを作成・変更・削除するSQL
ロールを付与・取消するSQL
ロールの一覧を確認するSQL
ロールに付与されている権限を確認するSQL
ユーザに付与されているロールを確認するSQL

プロファイル
プロファイルを作成・変更・削除するSQL
プロファイルの一覧を確認するSQL

表領域
表領域を作成・変更・サイズ拡張・削除する方法
表領域の一覧や使用率を確認するSQL
一時表領域を作成・変更・サイズ拡張・解放・削除する方法

テーブル
テーブルを作成・変更・削除するSQL
テーブルの一覧やサイズを確認するSQL
テーブルの定義、列名一覧、名前(コメント)、DDLの確認方法
テーブルの列(カラム)を追加・変更・削除するSQL
計算せずにレコード件数、最大値、最小値、NULL値の個数を確認する方法
パーティションテーブルの一覧・件数・設定内容を確認するSQL
一時テーブルを作成するSQL

インデックス
インデックス(索引)を作成・変更・削除するSQL
インデックスの一覧を確認するSQL
ビットマップ・ファンクション・逆キー・パーティションインデックスの作成
グローバル索引とローカル索引の違いについて

ビュー
ビューを作成・更新・削除するSQL
マテリアライズドビューを作成・リフレッシュ・削除するSQL
ビューやマテリアライズドビューの一覧や定義を確認するSQL
マテリアライズドビューのリフレッシュ時にSELECTするとどうなるか。

シーケンス
シーケンスを作成・変更・削除するSQL
シーケンスの一覧を確認するSQL

トリガー
トリガーを作成・変更・削除するSQL
トリガーの一覧や定義を確認するSQL

プロシージャー・ファンクション・パッケージ
 →PL/SQLの使い方

シノニム
シノニムを作成・変更・削除するSQL
シノニムの一覧を確認するSQL

データベースリンク
データベースリンクを作成・変更・削除するSQL
データベースリンクの一覧を確認するSQL

ディレクトリ
ディレクトリオブジェクトを作成・変更・削除するSQL
ディレクトリオブジェクトの一覧を確認するSQL

ORACLE関数
文字列関数
集計関数
算術関数
日付関数
変換関数
数学関数

データの取得
SELECT文の書き方:サンプル多数あり
SELECTした列名を別名(エイリアス)に変更する方法
asでテーブル名やカラム名を別名に変更する方法
任意の文字数と一致・以上・以下のデータを抽出する方法
文字列を結合・連結する方法
列の値やNULL値を置き換える方法
空白やスペース、0、特定の文字を削除する方法
トリムで空白(スペース)を削除する方法
SUBSTR関数で文字列の一部を切り取り・抽出するSQL
SQLで変更されたレコードの差分・差異を取得
SELECT文でバインド変数を使って検索する方法
並び順を指定し、レコードを昇順・降順に並び替える方法
NULL値のソートの順を指定する方法

データの追加
INSERTで日付を登録する方法:サンプル多数あり
INSERT-SELECTの使い方:サンプル多数あり
INSERT文でNULLを置き換えて登録する方法
INSERTで列の値を空白埋めや0埋めする方法
レコードが存在しない場合だけINSERTする方法
INSERT文で重複を無視・チェック・回避する方法
INSERT文を自動作成する方法
DELETE-INSERTとUPDATEの違いや注意点
INSERTしたレコードが0件でもエラーにならない
INSERTでレコードが追加されないときの原因と対処
同じ値や同じデータのINSERTはできる?
INSERTでソート(sort)・並び替えは無効
INSERTで「値の個数が多すぎます」の対処法
INSERTで「値の個数が不足しています」の対処法
INSERT,UPDATE,DELETE文の取り消し

データの更新
文字列を一括置換する方法
UPDATEでNULL値に更新する方法
UPDATEでNULL値を空文字にする方法
UPDATEでNULLだったら更新しない方法
UPDATEで同じテーブルの値・別のテーブルの値で更新する方法
UPDATEでCASE式を使って更新する方法
UPDATEでテーブル名に別名(エイリアス)をつける
UPDATE文で更新対象なし0件でもエラーにならない
UPDATEで「nullには更新できません」の対処法

データの削除
DELETE文でNULLレコードを削除する方法
DELETEである表に存在しないデータを削除する方法
DELETE文でサブクエリ(副問合せ)を使う方法
DELETEとTRUNCATE・DROPテーブルの違い
DELETEで対象なし0件でもエラーにならない

データベース管理
ORACLEバージョンを確認するSQL
ORACLEクライアントのバージョンを確認する方法
オブジェクト(表や索引)の一覧やDDL文の確認方法
行ロック待ちセッションやロックされたテーブルの確認
起動中のプロセスやセッションの確認と強制終了(キル)する方法
エクスポート・インポートする方法

ツール
SQL実行ツールosqleditのオススメ設定
WindowsバッチでsqlplusからSQLを実行する方法
Windowsバッチでsqlplusの取得結果をCSVファイルに出力する方法
スナップショットの取得と設定変更

SQLが遅くなる原因
SQLが突然遅くなる原因と対応方法
SQLのレスポンスが遅い原因3つ
SQLで集約関数LISTAGGを使うと遅い!?
JOINを使って表結合するとSQLが遅い!?

パフォーマンスの調査
遅いSQL(処理時間が長い)と実行回数の多いSQLの確認方法
DISK読取回数の多いSQL(I/O負荷の高い)の確認する方法
SQLの実行計画を取得する方法
表や索引の統計情報を取得する方法
表の統計情報取得日を確認するSQL
PGA使用量を確認するSQL
ハードパースされた回数を確認する方法
本番環境に影響を与えずに索引を検証する方法

チューニングの基礎知識
テーブルやインデックスの統計情報とは
「統計情報が古い」とはどういうことか
オプティマイザと実行計画について
SQLの実行計画の見方
SQLのヒントとは
SQLヒントの書き方:サンプル多数あり
SQLに実装すべき3つのSQLヒント
実際に現場で使ったSQLのヒント句
SQLに複数のヒントの書き方
SQLにヒント句を追加するリスクやデメリット
インデックスの項目の順番の正しい付け方
索引(インデックス)を作成するリスクやデメリット
ハードパースとは
パフォーマンスを左右する待機イベント
SQLプロファイルとは
インデックスが使用されないケース
SQLがパラレル実行されない原因
1つのSQLにテーブルは何個まで書いて良い?
ブロックサイズによるI/O性能の違い
非標準ブロックサイズの表領域を作る方法
SQLチューニングアドバイザの結果は信頼できるのか?
KEEPバッファにインデックス(INDEX)を置くべきかどうか
バッチ処理でSQLは遅くないけど、処理に時間がかかる原因
DBサーバのメモリを増やした方がいい理由

チューニング
SQLチューニングのコツ
SQLをパラレル実行する方法
SQLを変更せずにソートをチューニングする方法
ハードパースを削減する方法
レスポンスを遅くするソート処理が発生する原因
ソート処理が遅いときのチューニング方法
副問合せを使うSQLをチューニングする方法
GROUP BYが遅いときのチューニング方法
EXISTSを使って遅い場合のチューニング方法
WITHを使って遅い場合のチューニング方法
IN句をEXISTS句に置き換えするチューニング方法
OR句の置き換えによるチューニング方法
アクセスの無駄をなくしてSQLを高速化する方法
ワークテーブルを使ってSQLチューニングする方法
インデックスを高速に作成・再構築する方法
表の断片化を解消する3つの方法

SELECT文のチューニング
SELECT文のチューニング方法まとめ
SELECT文が遅いときのインデックス作成によるチューニング方法
ビュー(VIEW)が遅い原因とSQLチューニング方法
マテリアライズドビューが遅い原因とSQLチューニング
テーブルアクセスフルスキャンを無くしてチューニングする方法
ExadataでSQLをチューニングする方法

INSERT文のチューニング
INSERT文のチューニング方法まとめ
たまに遅い&大量のINSERT処理のチューニング方法
主キーにシーケンスを使っている表へのINSERTのチューニング方法

UPDATE文のチューニング
UPDATE文が遅いときのチューニング方法

DELETE文のチューニング
DELETE文が遅いときのチューニング方法
テーブルのデータを全件高速に削除する方法

エラー
アーカイブログが一杯でDISK容量パンクの対処法
ORA-4031は共有プールの断片化が原因の可能性あり
バッチ処理が一時表領域不足で異常終了したときのレアな原因と対処法
LISTENERのポート番号の変更が上手くいかないときの対処法
エラー「java.sql.SQLException:クローズされた接続です」の原因
データベース暗号化(TDE)に伴う性能劣化

学習方法
【独学可能】SQLの勉強方法とおすすめの本:分かりやすく解説
自宅で勉強用にORACLEデータベースを無償でダウンロードし構築する方法
おすすめのORACLE参考書まとめ
初心者にオススメのチューニングの参考書
DBのチューニング勉強方法
OracleMasterSilverに一ヵ月で合格した勉強方法
OracleMasterGold12cに一ヵ月で合格した勉強方法
OracleMasterExpertパフォチューに一ヵ月で合格した勉強方法

The post ORACLEデータベースの使い方 first appeared on SE日記.]]>
7712
【ORACLE】バックグラウンドプロセスとは https://oreno-it.info/archives/4229 Sat, 24 Aug 2019 19:00:56 +0000 https://oreno-it.info/?p=4229 ここではORACLEデータベースのバックグラウンドプロセスとは何か紹介しています。 起動中のプロセスを確認する方法は↓で紹介していますので参考にしてください。>>【ORACLE】起動中のプロセスを確認するSQL バックグ […]

The post 【ORACLE】バックグラウンドプロセスとは first appeared on SE日記.]]>


ここではORACLEデータベースのバックグラウンドプロセスとは何か紹介しています。

起動中のプロセスを確認する方法は↓で紹介していますので参考にしてください。
>>【ORACLE】起動中のプロセスを確認するSQL

バックグラウンドプロセスとは

ORACLEデータベースのインスタンスは、メモリ領域であるSGAとバックグラウンドプロセスから成ります。

バックグラウンドプロセスはいくつか存在し、それぞれが定められた役割をもち実行していきます。

主なバックグラウンドプロセス

名前 読み方 役割
DBWn データベース・ライター データベースの更新内容をデータファイルに書き込みます。
LGWR ログ・ライター データベースの更新情報をREDOログファイルに書き込みます
CKPT チェックポイント チェックポイントが発生したとき、DBWnに書き込み指示を出します。
PMON プロセス・モニター プロセスやロックの監視を行います。
SMON システム・モニター データベースの整合性チェックを行います。
ARCH アーカイバー アーカイブログモードに設定している場合に有効で、アーカイブログを出力します。
RECO リカバラ 分散データベース設定の場合にリカバリを実行します。
The post 【ORACLE】バックグラウンドプロセスとは first appeared on SE日記.]]>
4229
【ORACLE】起動中のプロセスやセッションの確認と強制終了(キル)する方法 https://oreno-it.info/archives/4232 Sat, 24 Aug 2019 19:00:49 +0000 https://oreno-it.info/?p=4232 ここではORACLEデータベースで、起動・接続中のプロセスの確認と強制終了(キル)する方法を紹介します。 バックグラウンドプロセスについては↓で詳しく解説していますので参考にしてください。>>【ORACLE】バックグラウ […]

The post 【ORACLE】起動中のプロセスやセッションの確認と強制終了(キル)する方法 first appeared on SE日記.]]>


ここではORACLEデータベースで、起動・接続中のプロセスの確認と強制終了(キル)する方法を紹介します。

バックグラウンドプロセスについては↓で詳しく解説していますので参考にしてください。
>>【ORACLE】バックグラウンドプロセスとは

起動中のプロセスを確認する方法

起動中のプロセスはv$processから確認することが出来ます。

SELECT * FROM v$process;
列名 意味
ADDR プロセスのアドレス
PID ORACLEracleプロセス識別子
SPID OSのプロセス識別子
PNAME プロセスの名前
USERNAME OSのプロセスユーザー名。
SERIAL# プロセスシリアル番号
TERMINAL OSの端末識別子
PROGRAM 進行中のプログラム
TRACEID トレースファイル識別子
TRACEFILE プロセスのトレースファイル名
BACKGROUND 1はSYSTEMバックグラウンド・プロセス
NULLはフォアグラウンド・プロセスまたはSYSTEM以外のバックグラウンド・プロセス
LATCHWAIT プロセスが待機しているラッチのアドレス
ラッチがない場合はNULL
PGA_USED_MEM プロセスで現在使用されているPGAメモリ(バイト)
PGA_ALLOC_MEM プロセスによって現在割り当てられているPGAメモリ(バイト)
PGA_FREEABLE_MEM 解放できる割当て済PGAメモリ(バイト)
PGA_MAX_MEM プロセスによってこれまでに割り当てられた最大PGAメモリ(バイト)

接続中のセッションを確認する方法

接続されているセッションはv$sessionで確認することが出来ます。

・セッション情報を確認する方法
select * from v$session where type = 'USER';

セッションを強制終了する方法

セッションを強制終了するときはALTER SYSTEM KILL SESSION文で、SIDとSERIALを指定して実行します。

・強制終了する方法
alter system kill session '100,200';
※例はsidが100、serialが200のセッションをキルしています。
The post 【ORACLE】起動中のプロセスやセッションの確認と強制終了(キル)する方法 first appeared on SE日記.]]>
4232