Oracle ‐ SQL*Plus - shinsuzuki/learn GitHub Wiki
> sqlplus /nolog
> connect {user}/{password}
> sqlplus {user}/{password}
SQL> exit
https://github.com/mv/mvdba/blob/master/demo/demobld.sql
※日付のフォーマット修正が必要だった
SQL> clear screen
SQL> describe emp
<結果>
名前 NULL? 型
----------------------------------------- -------- ----------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> connect {usre}/{password}
SQL> show all
<結果>
appinfoはOFFであり、設定先は "SQL*Plus"です。
arraysize 15
autocommit OFF
autoprint OFF
autorecovery OFF
autotrace OFF
blockterminator "." (hex 2e)
btitle OFFであり、次のSELECT文の先頭から数文字です。
:
SQL> set {システム変数名} {設定する値}
<1行の表示サイズを80から200へ変更>
SQL> set linesize 200
<ページサイズを変更>
SQL> set pagesize 100
SQL> start my-select.sql
<my-select.sql>
connect dbuser/sasa
set line 200
set pagesize 1000
select * from emp
RUN
<結果>
接続されました。
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80-12-17 800 20
7499 ALLEN SALESMAN 7698 81-02-20 1600 300 30
7521 WARD SALESMAN 7698 81-02-22 1250 500 30
7566 JONES MANAGER 7839 81-04-02 2975 20
7654 MARTIN SALESMAN 7698 81-09-28 1250 1400 30
7698 BLAKE MANAGER 7839 81-05-01 2850 30
7782 CLARK MANAGER 7839 81-06-09 2450 10
7788 SCOTT ANALYST 7566 82-12-09 3000 20
7839 KING PRESIDENT 81-11-17 5000 10
7844 TURNER SALESMAN 7698 81-09-08 1500 0 30
7876 ADAMS CLERK 7788 83-01-12 1100 20
7900 JAMES CLERK 7698 81-12-03 950 30
7902 FORD ANALYST 7566 81-12-03 3000 20
7934 MILLER CLERK 7782 82-01-23 1300 10
14行が選択されました。
> sqlplus {user}/{password} @my-select.sql
※@の場合はSQL*Plusを実行したディレクトリが検索され、@@の場合は呼び出し元のSQLスクリプトが存在する場所が検索される。
<結果>
接続されました。
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80-12-17 800 20
7499 ALLEN SALESMAN 7698 81-02-20 1600 300 30
7521 WARD SALESMAN 7698 81-02-22 1250 500 30
7566 JONES MANAGER 7839 81-04-02 2975 20
7654 MARTIN SALESMAN 7698 81-09-28 1250 1400 30
7698 BLAKE MANAGER 7839 81-05-01 2850 30
7782 CLARK MANAGER 7839 81-06-09 2450 10
7788 SCOTT ANALYST 7566 82-12-09 3000 20
7839 KING PRESIDENT 81-11-17 5000 10
7844 TURNER SALESMAN 7698 81-09-08 1500 0 30
7876 ADAMS CLERK 7788 83-01-12 1100 20
7900 JAMES CLERK 7698 81-12-03 950 30
7902 FORD ANALYST 7566 81-12-03 3000 20
7934 MILLER CLERK 7782 82-01-23 1300 10
14行が選択されました。
SQL> spool result.txt
SQL> select * from emp;
SQL> spool off
<結果>
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80-12-17 800 20
7499 ALLEN SALESMAN 7698 81-02-20 1600 300 30
7521 WARD SALESMAN 7698 81-02-22 1250 500 30
7566 JONES MANAGER 7839 81-04-02 2975 20
7654 MARTIN SALESMAN 7698 81-09-28 1250 1400 30
7698 BLAKE MANAGER 7839 81-05-01 2850 30
7782 CLARK MANAGER 7839 81-06-09 2450 10
7788 SCOTT ANALYST 7566 82-12-09 3000 20
7839 KING PRESIDENT 81-11-17 5000 10
7844 TURNER SALESMAN 7698 81-09-08 1500 0 30
7876 ADAMS CLERK 7788 83-01-12 1100 20
7900 JAMES CLERK 7698 81-12-03 950 30
7902 FORD ANALYST 7566 81-12-03 3000 20
7934 MILLER CLERK 7782 82-01-23 1300 10
14行が選択されました。
SQL> spool off
SQLスクリプトファイルの先頭にエラーハンドリグの記述。
whenever sqlerror exit {success|failure|warning|整数|変数} {commit|rollback}
例)
whenever sqlerror exit 1 rollback
SQL> set timing on
SQL> select * from emp;
:
:
経過: 00:00:00.00
SQL> set timing off
SQL> timing start no1
SQL> select * from emp;
SQL> timing start no2
SQL> select * from emp;
SQL> timing stop
no2のタイミング。
経過: 00:00:06.80
SQL> timing stop
no1のタイミング。
経過: 00:00:27.21
SQL> set time on
15:47:41 SQL>
SQL> set time off
<データ数を変数へ設定>
SQL> col emp_record new_value v_emp_record
SQL> select count(*) as emp_record from emp;
EMP_RECORD
----------
14
SQL> define v_emp_record
DEFINE V_EMP_RECORD = 14 (NUMBER)
<ファイル名に時間を設定>
SQL> col now_time new_value v_now_time
SQL> select to_char(sysdate, 'YYYYMMdd-HH24MISS') now_time from dual;
NOW_TIME
---------------
20250406-160830
SQL> spool result_&v_now_time..txt
SQL> select * from emp;
SQL> spool off
<検索結果のみをファイルへ出力>
col now_time new_value v_now_time;
select to_char(sysdate, 'YYYYMMdd-HH24MISS') now_time from dual;
spool result_&v_now_time..txt;
select * from emp;
spool off;
<出力ファイルの内容>
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ---- -------- ---- ---- ------
7369 SMITH CLERK 7902 80-12-17 800 20
7499 ALLEN SALESMAN 7698 81-02-20 1600 300 30
7521 WARD SALESMAN 7698 81-02-22 1250 500 30
7566 JONES MANAGER 7839 81-04-02 2975 20
7654 MARTIN SALESMAN 7698 81-09-28 1250 1400 30
7698 BLAKE MANAGER 7839 81-05-01 2850 30
7782 CLARK MANAGER 7839 81-06-09 2450 10
7788 SCOTT ANALYST 7566 82-12-09 3000 20
7839 KING PRESIDENT 81-11-17 5000 10
7844 TURNER SALESMAN 7698 81-09-08 1500 0 30
7876 ADAMS CLERK 7788 83-01-12 1100 20
7900 JAMES CLERK 7698 81-12-03 950 30
7902 FORD ANALYST 7566 81-12-03 3000 20
7934 MILLER CLERK 7782 82-01-23 1300 10