月別アーカイブ: 2014年12月

集合演算子

オラクルのdual表を用いて一時的な表を二つ作成し、集合演算子の確認をする。

SQL

select 1,2 from dual
union all
select 2,3 from dual
union all
select 3,4 from dual
union all
select 4,5 from dual

実行結果

	 2	    3
---------- ----------
	 2	    3
	 3	    4
	 4	    5
	 5	    6

SQL

select 2,3 from dual
union all
select 3,4 from dual
union all
select 4,5 from dual
union all
select 5,6 from dual

実行結果

	 1	    2
---------- ----------
	 1	    2
	 2	    3
	 3	    4
	 4	    5

以上2つのクエリを用いて、以下にunion, union all, intersect, exceptの実行結果を示す。PostgreSQLではminusについてexceptを用いる。

1.union
SQL

(select 1,2 from dual
union all
select 2,3 from dual
union all
select 3,4 from dual
union all
select 4,5 from dual
)
union
(select 2,3 from dual
union all
select 3,4 from dual
union all
select 4,5 from dual
union all
select 5,6 from dual
)

実行結果

	 1	    2
---------- ----------
	 1	    2
	 2	    3
	 3	    4
	 4	    5
	 5	    6

2.union all
SQL

(select 1,2 from dual
union all
select 2,3 from dual
union all
select 3,4 from dual
union all
select 4,5 from dual
)
union all
(select 2,3 from dual
union all
select 3,4 from dual
union all
select 4,5 from dual
union all
select 5,6 from dual
)

実行結果

	 1	    2
---------- ----------
	 1	    2
	 2	    3
	 3	    4
	 4	    5
	 2	    3
	 3	    4
	 4	    5
	 5	    6

3.intersect
SQL

(select 1,2 from dual
union all
select 2,3 from dual
union all
select 3,4 from dual
union all
select 4,5 from dual
)
intersect
(select 2,3 from dual
union all
select 3,4 from dual
union all
select 4,5 from dual
union all
select 5,6 from dual
)

実行結果

	 1	    2
---------- ----------
	 2	    3
	 3	    4
	 4	    5

4.minus
SQL

(select 1,2 from dual
union all
select 2,3 from dual
union all
select 3,4 from dual
union all
select 4,5 from dual
)
minus
(select 2,3 from dual
union all
select 3,4 from dual
union all
select 4,5 from dual
union all
select 5,6 from dual
)

実行結果

	 1	    2
---------- ----------
	 1	    2

yahoo query language

yahooにはquery languageなるサービスが用意されている。
URL引数にSQLを埋め込んで、好きなデータを取得できるというもの。
使うのは結構面倒。一応天気予報を取得できるjavascript & jQueryのコードを以下に紹介しておく。

//id=weatherの要素をbodyに追加
$(document).ready(function(){ $(“body”).append(“

“); });

// zipコードと場所を指定
var zipCode = “JAXX0034”;
var country = “Kasugai”;
var unit = “c”; // c or f (for Celsius or Fahrenheit)

// 天気予報を表示するwoeidを取得
if (zipCode != “” && country != “”) {
// 天気予報を表示するwoeidを取得するquery
var query = escape(‘SELECT woeid FROM geo.places WHERE text=”‘ + zipCode + ‘ ‘ + country + ‘” LIMIT 1’), url = “http://query.yahooapis.com/v1/public/yql?q=” + query + “&format=json&callback=?”;

$.getJSON(url, function(data) {
var woeID = data.query.results.place.woeid;
//取得したwoeidから天気予報情報を取得するquery
var query = escape(‘SELECT image,item, item.forecast,location FROM weather.forecast WHERE woeid=”‘ + woeID + ‘” AND u=”‘ + unit + ‘”‘), url = “http://query.yahooapis.com/v1/public/yql?q=” + query + “&format=json&callback=?”;

$.getJSON(url,function(data){
$(“#weather”).append(data.query.results.channel[0].location.city + “
“);
$(“#weather”).append(data.query.results.channel[0].item.forecast.date + “|”);
$(“#weather”).append(data.query.results.channel[0].item.forecast.day + “|”);
$(“#weather”).append(data.query.results.channel[0].item.forecast.high + “|”);
$(“#weather”).append(data.query.results.channel[0].item.forecast.low + “|”);
$(“#weather”).append(data.query.results.channel[0].item.forecast.text + “
“);
$(“#weather”).append(data.query.results.channel[1].item.forecast.date + “|”);
$(“#weather”).append(data.query.results.channel[1].item.forecast.day + “|”);
$(“#weather”).append(data.query.results.channel[1].item.forecast.high + “|”);
$(“#weather”).append(data.query.results.channel[1].item.forecast.low + “|”);
$(“#weather”).append(data.query.results.channel[1].item.forecast.text + “
“);
$(“#weather”).append(data.query.results.channel[2].item.forecast.date + “|”);
$(“#weather”).append(data.query.results.channel[2].item.forecast.day + “|”);
$(“#weather”).append(data.query.results.channel[2].item.forecast.high + “|”);
$(“#weather”).append(data.query.results.channel[2].item.forecast.low + “|”);
$(“#weather”).append(data.query.results.channel[2].item.forecast.text + “
“);
$(“#weather”).append(data.query.results.channel[3].item.forecast.date + “|”);
$(“#weather”).append(data.query.results.channel[3].item.forecast.day + “|”);
$(“#weather”).append(data.query.results.channel[3].item.forecast.high + “|”);
$(“#weather”).append(data.query.results.channel[3].item.forecast.low + “|”);
$(“#weather”).append(data.query.results.channel[3].item.forecast.text + “
“);
});
});

}

オラクル データディクショナリ

オラクルにはテーブルやソースなどの情報をデータディクショナリとして記録してある。

データディクショナリの種類

DBA_*	データベース内全てのオブジェクトに関する情報
ALL_*	自分がアクセスできるオブジェクトに関する情報
USER_*	自分の所有するオブジェクト(自スキーマのオブジェクト)に関する情報
その他	セッションやロール、言語環境に関する情報

主要なデータディクショナリ

DAU	表名	         説明
***	CATALOG	         表・ビュー・索引・シノニムの情報を調べる
***	COL_COMMENTS	 表の列に付けられたコメント情報を調べる(便利!)
**	COL_PRIVS_MADE	 表の列にアクセスできるユーザを調べる
**	COL_PRIVS_RECD	 アクセスできるスキーマの表の列を調べる
***	CONSTRAINTS	 制約の情報を調べる
***	CONS_COLUMNS	 制約が定義されている列の情報を調べる
*	DATA_FILES	 データファイルの情報を調べる
***	ERRORS	         解決されていないエラー情報を調べる
**	EXTENTS	         セグメントに割り当てられたエクステントの情報
**	FREE_SPACE	 表領域内の使用可能エクステント情報
***	INDEXES	         索引の情報
***	IND_COLUMNS	 索引がひも付いている表・列を調べる
***	OBJECTS	         オブジェクトの情報
***	PROCEDURES	 プロシージャに関する情報
*	PROFILES	 プロファイルに関する情報
*	ROLES	         ロールに関する情報
**	ROLE_PRIVS	 ユーザやロールに付与されたロールを調べる
***	SOURCES	         ストアドやファンクションのソースを確認する(便利!)
**	SEGMENTS	 セグメントに割り当てられたエクステントとブロック数を調べる
***	SEQUENCES	 シーケンスに関する情報
***	SYNONYMS	 USER_:プライベートシノニムを確認する
**	SYS_PRIVS	 ユーザとロールに付与されたシステム権限の情報を示す
***	TABLES	         表に関する情報
**	TABLESPACES	 表領域に関する情報
***	TAB_COLUMNS	 表の列に関する情報
***	TAB_COMMENTS	 表に付けられたコメントに関する情報(便利!)
**	TAB_PRIVS_MADE	 スキーマにアクセスできるユーザを調べる
**	TAB_PRIVS_RECD	 アクセスできるスキーマを調べる
*	TEMP_FILES	 一時表領域に属するファイル情報を調べる
***	TRIGGERS	 トリガーに関する情報
**	TS_QUOTAS	 ユーザの表領域に対する領域割り当て制限情報
***	TYPES	         タイプに関する情報
***	USERS	         ユーザに関する情報
***	VIEWS	         ビューに関する情報

例えばパッケージPK_TESTのソースを取得したいときは、
select TEXT from all_sources where NAME=’PK_TEST’

Applescript

1. applescript editorを開く
2. スクリプトを書く
  例:display dialog “Hello World”
    
tell application “Numbers” to open (“Users:h-ito:R:DAT:out.csv”)
※パスはコロンなので注意!

3. 実行ファイルとして書き出す

terminalにて
osascript -e ‘tell application “iTunes” to play’
※display dialogのようなものは直接呼び出せない

SQL 基本(select以外)

create table TEST_TABLE(val1 number,val2 varchar(10)var3 date)
drop table TEST_TABLE

insert into TEST_TABLE(val1,val2) values(10,’val2′)
insert into TEST_TABLE values(10,’val2′,sysdate)

update TEST_TABLE set val2=’updated’,val3=sysdate where val1=10

delete from TEST_TABLE where val1=10

delte from TEST_TABLE where (val1,val2,val3…)IN
( select val1,val2,val3…
from …
)

alter table TEST_TABLE add(val4 number)
alter table TEST_TABLE modify(val4 date)
alter table TEST_TABLE drop(val4)
alter table TEST_TABLE RENAME COLUMN val3 to day

alter table TEST_TABLE add primary key (
val1,
val2,
val3,

)

文字コード変換

①vimを利用する
1. ファイルに文字コードshift-jisを指定して開き直す
:e ++enc=sjis

起動時にコマンドを指定する方法もある
>vim temp.txt -c “e ++enc=sjis”
または
>vim “+e ++enc=sjis temp.txt”

2. ファイルの文字コードをutf-8に変更する
:set fileencoding=utf-8
3. 保存
:wq

一連の操作をsjis-utf8.vimというファイルにしておけば
sjis-utf8.vim
e ++enc=sjis
set fileencoding=utf-8
wq

次のコマンドで一度で変換できる
>vim sjis.txt -c “source sjis-utf8.vim”

②nkfを利用する
>sudo port install nkf

>nkf -g temp.txt
UTF-8

オラクルはSHIFT-JISなので、temp.sqlはSHIFT-JISしか受け付けない。
temp.sqlがUTF-8だった場合
>nkf -s temp.sql > temp.sql
でファイルの文字コードを変換する

ターミナルがutf-8の設定の場合実行するときにパイプで変換
>sqlplus temp.sql | nkf -w

Mac 起動時オプション

起動または再起動時

C :CD、DVD、USBの起動ディスクから起動

option+command+P+R :NVRAMのリセット
[使用例]
メモリ増設時

option :ボリューム選択(デュアルブートのときなど)
eject :工学ドライブを排出
shift :セーフモード
command+V :Verboseモード

command+S :シングルユーザーモード
[使用例]
①sudoersの権限を0440に戻せないとき。sudoersは0440でないと読めない。書き直して変更したら戻せなくなる
  1.reboot -> single user mode
2.mount -uw /
3.chmod 0440 /private/etc/sudoers
4.reboot

②修復
/sbin/fsck -fy
これで修復されなければ、問題のディスクは表示されるので、fsck_hfsを用いて修復
umount /dev/diskname
fsck_hfs -r /dev/diskname