Database Support Blog

Database Support Blog>SQL*Plusと互換性のある「EDB*Plus」を使ってみよう

  • EDB Postgres
2018.05.23

SQL*Plusと互換性のある「EDB*Plus」を使ってみよう

SQL*Plusと互換性のある「EDB*Plus」を使ってみよう

EDB Postgres Advanced Server(EPAS)のコマンドライン・インターフェースには、psql(edb-psql)の他にEDB*Plusがあります。EDB*Plusは、Oracle DatabaseのSQL*Plusと互換性があるため、Oracle Databaseに慣れている方はそちらのほうが使いやすいでしょう。今回は、EDB*Plusの簡単な使用方法と、SQL*Plusとの違いをご紹介します。

EDB*Plusとは

EDB*Plusは、EPAS上でコマンドライン・インターフェースを提供するユーティリティです。EDB*Plusでは、SQLコマンド、Oracle PL/SQLと互換性のあるSQL Procedural Language(SPL)無名ブロック、EDB*Plusコマンドを使うことができます。

EDB*PlusコマンドはOracleのSQL*Plusコマンドと互換性があり、以下のような様々な機能を提供します。

- データベースオブジェクトにクエリを発行
- ストアドプロシージャを実行
- SQLコマンドの出力を整形
- バッチスクリプトを実行
- OSコマンドを実行
- 出力を記録


EDB*Plusのインストール方法

EPAS9.6以前

EPAS9.6以前のバージョンをご利用の場合、デフォルトの設定でEPASをインストールすることによりEDB*Plusはインストールされます。EPASのインストール手順については、弊社作成の「 はじめてのEDB Postgres (製品概要・構築編) 」または マニュアル をご参考になさってください。

EPAS10以降

EPAS10以降のバージョンをご利用の場合、EDB*PlusはEPASインストール時にインストールされないため、EPASをインストール後にyum(Linuxのみ)またはStackBuilder Plusからインストールします。yumやStackBuilder PlusからEDB*Plusをインストールする詳細な手順については、 マニュアル をご参考になさってください。


EDB*Plusの簡単な使用方法

EDB*Plus は、GUIのアプリケーションメニューから選択するか、OSコマンドから直接EDB*Plus(Windowsの場合:edbplus.bat、Linuxの場合:edbplus.sh)を起動することで使用できます。

OSコマンドから直接EDB*Plusを実行する場合、Windows環境では実行ファイルの拡張子を付けずにEDB*Plusを使用できますが、Linux環境ではデフォルトで拡張子を付けて実行する必要があります。Linux環境でも実行ファイルの拡張子を付けずにEDB*Plusを使用するには、aliasコマンドで拡張子無しのedbplusコマンドを作成します。

以下では、Linux環境でEDB*PlusからEPASに接続してemp.sqlというEMP表を参照するバッチスクリプトを実行するまでの手順をご紹介します。

検証環境

OS:Oracle Enterprise Linux 6.4 64bit
DB:EDB Postgres Advanced Server 10.3.8
EDB*Plus:v10.36.0.0

--aliasコマンドでedbplusコマンドを作成 ※この手順は任意です。

 
 # su - enterprisedb
 $ source /opt/edb/as10/pgplus_env.sh #EPAS関連の各種環境変数の設定。
$ alias edbplus='/opt/edb/as10/edbplus/edbplus.sh' $ edbplus /nolog EDB*Plus: Release 10 (Build 36.0.0) Copyright (c) 2008-2017, EnterpriseDB Corporation. All rights reserved. SQL> SQL> exit  

--edbデータベースへの接続情報を格納する$EDBHOME/edbplus/login.sqlを確認

 
 $ cat $EDBHOME/edbplus/login.sql
 define edb="localhost:51001/edb" 
 #login.sqlでは、Oracleのtnsnames.oraで設定する接続識別子と同様にデータベースへの接続情報を設定。
 #define <接続識別子名>=host[:port][/dbname]の構文で接続情報を設定。
 #portがデフォルトの5444の場合、portとdbname(デフォルトはedb)の指定は必須ではない。

--emp.sqlの内容を確認 ※事前に$EDBHOME/edbplusディレクトリ配下に以下の内容で作成しています。

 
 $ cd $EDBHOME/edbplus
 $ cat emp.sql
 set linesize 100
 set pagesize 100
 describe emp
 select * from emp;
 

--edbデータベースに接続

 
 $ cd $EDBHOME/edbplus 
 #@<接続識別子>を使用して接続する場合、$EDBHOME/edbplusディレクトリでedbplus username/passwordコマンドを実行する必要がある。
$ edbplus enterprisedb/oracle@edb Connected to EnterpriseDB 10.3.8 (localhost:51001/edb) AS enterprisedb EDB*Plus: Release 10 (Build 36.0.0) Copyright (c) 2008-2017, EnterpriseDB Corporation. All rights reserved. SQL>  

--EDB*Plusからemp.sqlを実行

 
 SQL> @emp
  
  Name                                                   Null?    Data Type
  ------------------------------------------------------ -------- -----------------------------------
  EMPNO                                                  NOT NULL NUMBER(4)
  ENAME                                                           VARCHAR2(10)
  JOB                                                             VARCHAR2(9)
  MGR                                                             NUMBER(4)
  HIREDATE                                                        TIMESTAMP(6)
  SAL                                                             NUMBER(7,2)
  COMM                                                            NUMBER(7,2)
  DEPTNO                                                          NUMBER(2)
  
  
 EMPNO ENAME      JOB         MGR HIREDATE                            SAL      COMM DEPTNO
 ----- ---------- --------- ----- ----------------------------- --------- --------- ------
  7369 SMITH      CLERK      7902 1980-12-17 00:00:00              800.00               20
  7499 ALLEN      SALESMAN   7698 1981-02-20 00:00:00             1600.00    300.00     30
  7521 WARD       SALESMAN   7698 1981-02-22 00:00:00             1250.00    500.00     30
  7566 JONES      MANAGER    7839 1981-04-02 00:00:00             2975.00               20
  7654 MARTIN     SALESMAN   7698 1981-09-28 00:00:00             1250.00   1400.00     30
  7698 BLAKE      MANAGER    7839 1981-05-01 00:00:00             2850.00               30
  7782 CLARK      MANAGER    7839 1981-06-09 00:00:00             2450.00               10
  7788 SCOTT      ANALYST    7566 1987-04-19 00:00:00             3000.00               20
  7839 KING       PRESIDENT       1981-11-17 00:00:00             5000.00               10
  7844 TURNER     SALESMAN   7698 1981-09-08 00:00:00             1500.00      0.00     30
  7876 ADAMS      CLERK      7788 1987-05-23 00:00:00             1100.00               20
  7900 JAMES      CLERK      7698 1981-12-03 00:00:00              950.00               30
  7902 FORD       ANALYST    7566 1981-12-03 00:00:00             3000.00               20
  7934 MILLER     CLERK      7782 1982-01-23 00:00:00             1300.00               10
  
 14 rows retrieved.
 

以上のように、EDB*PlusではSQL*Plusと同様に@<スクリプトファイル名>でのバッチスクリプト実行、DESCRIBEコマンド実行ができます。


EDB*PlusとSQL*Plusの異なる点

EDB*Plus では"!"(=HOST)が使用できない

EDB*Plus上でHOSTコマンドでOSコマンドを実行することはできますが、"!"でOSコマンドを実行することはできません。

 
 SQL> host pwd
 /home/enterprisedb
 SQL> host id
 uid=525(enterprisedb) gid=525(enterprisedb) 所属グループ=525(enterprisedb) context=unconfined_u:unconfined_r:unconfined_java_t:s0-s0:c0.c1023
 SQL> ! id
   2
   3

全てのSQL*Plusコマンドに互換性があるわけではない

SQL*Plusコマンドと互換性のあるEDB*Plusコマンドもありますが、全てのSQL*Plusコマンドに対応しているわけではありません。以下が、EDB*Plusコマンドの内容です。

 
 SQL> help index
 Type 'HELP [topic]' for command line help.
 @              ACCEPT         APPEND         CHANGE
 CLEAR          COLUMN         CONNECT        DEFINE
 DEL            DESCRIBE       DISCONNECT     EDBPLUS
 EDIT           EXIT           GET            HELP
 HOST           INDEX          INPUT          LIST
 PASSWORD       PAUSE          PRINT          PROMPT
 QUIT           REMARK         SAVE           SET
 SHOW           SPOOL          START          TRIMS
 UNDEFINE       VARIABLE
  

【補足】EDB*Plusとpsql(edb-psql)の異なる点

EDB*PlusはSQL*Plusとの互換性を意識して開発されているため、psql(edb-psql)との互換性がなくなっている部分があります。以下に、psql(edb-psql)との互換性がない部分をご紹介します。

デフォルトの設定で自動コミットは無効

psql(edb-psql)ではデフォルトの設定で自動コミットは有効ですが、EDB*Plusではデフォルトの設定で無効です。EDB*Plusで自動コミットを有効にしたい場合には以下のコマンドを実行する必要があります。

 
 SQL> SET AUTOCOMMIT ON
 SQL> 
 

SETコマンドでは変数を設定

psql(edb-psql)ではSETコマンドによりセッション単位でEPASのパラメーターを設定/変更できましたが、EDB*PlusのSETコマンドはSQL*Plusと同様にシステム変数などの設定を行うコマンドであるため、EPASのパラメーターを設定/変更することはできません。EDB*Plusを使用してセッション単位でEPASのパラメーターを設定/変更する場合にはALTER SESSION文を実行する必要があります。

以下の例では、EDB*Plusを使用してclient_encodingパラメーターの設定をSJISに設定しています。

 
 SQL> ALTER SESSION SET client_encoding=SJIS;
  
 Session altered.
 

SHOW ALLコマンドでは変数の設定を表示

psql(edb-psql)ではSHOW ALLコマンドでEPASのパラメーター設定を確認できましたが、EDB*PlusのSHOW ALLコマンドは変数の設定を確認するコマンドであるため、EPASのパラメーター設定を確認することができません。EDB*PlusでSHOWコマンドを使用してパラメーター設定を確認する場合にはSHOW PARAMETERコマンドを実行する必要があります。

 
 SQL> SHOW PARAMETER
 NAME                                    VALUE
 --------------------------------------- ---------------------------------------
 DateStyle                               ISO, DMY
 IntervalStyle                           postgres
 TimeZone                                Asia/Tokyo
 allow_system_table_mods                 off
 ...(以降省略)
  

まとめ

今回はEDB*Plusの簡単な使用方法と合わせてSQL*Plusと異なる点についてもご紹介しました。EDB*Plusは、SQL*Plusと互換性があるものの今回ご紹介したように一部異なる点もあるため、本ブログを参考に相違点を認識した上で使用してみてください。


執筆者情報

家島 拓也

サービス事業部 サポートセンター

2007年にアシストに入社して以来、ORACLE製品やPostgreSQL・EDB Postgres製品のサポートに従事してきました。このブログではサポート対応で得た知識を元に、お客様がお困りになることが多い問題や各製品の新機能に関する検証結果などを紹介します。


データベースのサポートならアシスト

関連している記事

  • PostgreSQL
  • EDB Postgres
2017.12.20

PostgreSQL10へのアップグレード前に押さえておきたい3つの注意点

PostgreSQL10へのアップグレード前に押さえておきたい3つの注意点をご紹介します。

  • EDB Postgres
2017.07.31

SQL*Loader互換のEDB*Loaderを使ってみよう

EDB*LoaderではSQL*Loaderの基本機能は移植されていますので、殆ど制御ファイルを書き換えずにご利用いただけます。

  • PostgreSQL
  • EDB Postgres
2017.07.13

EDB PostgresでPL/Python3を始めよう

EDB PostgresでPL/Python3をセットアップして実際に使うまでの手順を紹介します。

アシストサポートセンターのご紹介 Oracle Database研修

ページの先頭へ戻る