SQL勉強
相関サブクエリ
相関サブクエリとは、
SELECT区の中の相関サブクエリ
スカラサブクエリが便利
SQL 外部結合と等価なスカラサブクエリについて - カタカタブログ
第4回 行か列か,それが問題だ~スカラサブクエリの使い方 (4)スカラサブクエリとNULL :SQLアタマアカデミー|gihyo.jp … 技術評論社
『SQLパズル 第2版』サポートページ
SQL実践講座(8):サブクエリーの応用「相関サブクエリー」 - @IT
SQL の相関サブクエリ (4) - SELECT 句で使う | すぐに忘れる脳みそのためのメモ
【 SQL 備忘録 】相関サブクエリ ~ 理解に挫折したとき & 忘れたときに 訪れると すごくわかりやすい入門者向け 解説ウェブサイトへのインデックス - Qiita
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;
行数指定(すぐ忘れるから)
select * from all_tables where rownum <= 10
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
おわり
PL/SQLに関して
■基本的な書き方
DECLARE n NUMBER; BEGIN 処理; END; /
IF 条件 THEN ELSE END IF;