【 SQL 備忘録 】相関サブクエリ ~ 理解に挫折したとき & 忘れたときに 訪れると すごくわかりやすい入門者向け 解説ウェブサイトへのインデックス - Qiita

【 SQL 備忘録 】相関サブクエリ ~ 理解に挫折したとき & 忘れたときに 訪れると すごくわかりやすい入門者向け 解説ウェブサイトへのインデックス - Qiita

SQL勉強

サブクエリ

サブクエリとは、メインクエリのSQLの評価を実行する前にサブクエリの評価を実施した結果を用いメインクエリのSQLの実施を行うもの。

SPOOLファイル作成用PLSQL

PLSQLのお勉強用

#!/bin/ksh

for i in SERVER
do
 echo "sqlplus";
 sqlplus -s appadm/appadm @a $i  > ${i}.sql
done
SET SERVEROUTPUT ON;
SET FEEDBACK OFF;
SET verify off;
DECLARE
        cursor cursor_a is
                 select * from all_tab_columns where table_name = '&1' order by column_id;
        cursor_b cursor_a%ROWTYPE;
        nom number;
        aaa number;

        -- SETコマンドのためのPROCEDURE
        PROCEDURE echo_set IS
        BEGIN
                dbms_output.put_line('SET HEAD OFF');
                dbms_output.put_line('SET LINE 20000');
                dbms_output.put_line('SET PAGES 0');
                dbms_output.put_line('SET FEEDBACK OFF');
        END;

BEGIN
        --テーブル存在チェック
        SELECT 1 INTO aaa FROM SERVER where rownum <= 1;
        echo_set;


        SELECT count(1) INTO nom from all_tab_columns where table_name = 'SERVER' order by column_id;

                dbms_output.put_line('SELECT');
        for cursor_b in cursor_a loop
                dbms_output.put_line('  ' || cursor_b.COLUMN_NAME || ',');
                IF(cursor_a%ROWCOUNT = nom) THEN
                        dbms_output.put_line('  ' || cursor_b.COLUMN_NAME);
                END IF;
        end loop;
                dbms_output.put_line('FROM');
                dbms_output.put_line('SERVER');

END;
/
exit;

オラクルの環境設定をファイルに残す方法

会社でデータ取得の時に煩わしいと思っていたのが、setで設定した値が残ってしまうこと。
STOREコマンドで外部に環境設定を出力すれば良い。

STORE set oracle

これで、カレントディレクトリにoracle.sqlというファイルが作成される。
読み込むときには、

@ oracle.sql

と実行すれば、もとの環境設定に戻る。

便利。

sqlplusのgetが便利

sqlplusを使用するとき、いつも悶々としていたが効率的な方法にようやく辿り着いた。
使用するコマンドは、以下5つ

HOST
GET
LIST
RUN
SAVE

①sqlplusの状態で、コマンド実行をする。
作成したSQL文に問題がある場合、以下のようにして保存することが出来る。

SQL>SAVE example
file example.sqlが作成されました。

カレントディレクトリにexampl.sqlというファイルが作成される。
UNIXに移ってファイルを編集する。

SQL>HOST
$vi example.sql

③修正したらexitでsqlplusへ復帰する

$exit
SQL>

④GETでファイルをバッファーに読み込み

SQL>GET example.sql
  1  BEGIN
  2  INSERT INTO DEPT values (50,'test','aaaa');
  3* END;

⑤LISTで確認

SQL>l
  1  BEGIN
  2  INSERT INTO DEPT values (50,'test','aaaa');
  3* END;

⑥RUNで実行

SQL>r
SQL> r
  1  BEGIN
  2  INSERT INTO DEPT values (50,'test','aaaa');
  3* END;
BEGIN
*
行1でエラーが発生しました。:
ORA-00001: 一意制約(BPSUT01.SYS_C006987)に反しています ORA-06512:
行2

おわり