4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Oracle Database 23c Free - Developer Releaseと戯れる(その1)

Last updated at Posted at 2023-04-21

はじめに

Oracle Database 23cでは、SQLがシンプルに書けるような変更が加えられています。
地味ですがちょっと嬉しい変更を試してみました。
PostgreSQLとOracleの両方を使っている方、PostgreSQLからの移行を検討されている方向けにも助かる変更かと思います。

1. FROM dual 句なしのSELECT文が利用可能に

これまでは、定数や計算式、sysdate等の関数、シーケンスの順序疑似列などをSELECT文で取得する際にはFROM dual句が必要でしたが、Oracle Databse 23cではFROM dual句なしでも実行が可能になりました。

19c
SQL> SELECT sysdate FROM dual;
SYSDATE
-------------------
2023/04/22 07:03:29

SQL> SELECT sysdate;
SELECT sysdate
             *
1でエラーが発生しました。:
ORA-00923: FROMキーワードが指定の位置にありません。


SQL> CREATE SEQUENCE seq1;
順序が作成されました。

SQL> SELECT seq1.nextval FROM dual;

   NEXTVAL
----------
	     1

SQL> SELECT seq1.nextval;
SELECT seq1.nextval
                  *
1でエラーが発生しました。:
ORA-00923: FROMキーワードが指定の位置にありません。


SQL> 
23c
SQL> SELECT sysdate FROM dual;

SYSDATE
-------------------
2023/04/22 07:04:33

SQL> SELECT sysdate;

SYSDATE
-------------------
2023/04/22 07:04:34

SQL> CREATE SEQUENCE seq1;

順序が作成されました。

SQL> SELECT seq1.nextval FROM dual;

   NEXTVAL
----------
	     1

SQL> SELECT seq1.nextval;

   NEXTVAL
----------
	     2

SQL>

2. GROUP BY 句で列の別名が利用可能に

これまではGROUP BY句で列の別名を使用することができませんでしたが、23cではGROUP BY句で列の別名が使用できるようになりました。

19c
SQL> SELECT LOWER(a.tablespace_name) ts, SUM(b.bytes)/1024/1024 mb
  2  FROM dba_tablespaces a, dba_data_files b
  3  WHERE a.tablespace_name = b.tablespace_name
  4  GROUP BY LOWER(a.tablespace_name)
  5  ORDER BY mb DESC;

TS				                       MB
------------------------------ ----------
sampleschema			           204800
sysaux				              3505.25
undotbs1			                 1195
data				                 1124
system				                 1061
dbfs_data			                  100
undo_7				               95.375

7行が選択されました。

SQL> SELECT LOWER(a.tablespace_name) ts, SUM(b.bytes)/1024/1024 mb
  2  FROM dba_tablespaces a, dba_data_files b
  3  WHERE a.tablespace_name = b.tablespace_name
  4  GROUP BY ts
  5  ORDER BY mb DESC;
GROUP BY ts
         *
4でエラーが発生しました。:
ORA-00904: "TS": 無効な識別子です。


SQL>

23cでは、GROUP BY句で列の別名(ここではts)が使用できるようになりました。

23c
SQL> SELECT LOWER(a.tablespace_name) ts, SUM(b.bytes)/1024/1024 mb
  2  FROM dba_tablespaces a, dba_data_files b
  3  WHERE a.tablespace_name = b.tablespace_name
  4  GROUP BY LOWER(a.tablespace_name)
  5  ORDER BY mb DESC;

TS				                       MB
------------------------------ ----------
sysaux				                  340
system				                  290
undotbs1			                  100
users					                5

SQL> SELECT LOWER(a.tablespace_name) ts, SUM(b.bytes)/1024/1024 mb
  2  FROM dba_tablespaces a, dba_data_files b
  3  WHERE a.tablespace_name = b.tablespace_name
  4  GROUP BY ts
  5  ORDER BY mb DESC;

TS				                       MB
------------------------------ ----------
sysaux				                  340
system				                  290
undotbs1			                  100
users					                5

SQL> 
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?