Oracle/RDBのTIPS & FAQ集

36.
 

35.iSQLplusの起動法
 10g以降で使えます。webベースなのでutf-8 (unicode) に対応しています。

   http://hostname:5560/isqlplus/

 当然サーバー側でサービスが動いていて、5560ポートがファイアウォールで閉じられていない必要があります。

34.
 リコンパイルは次のSQLで実行可能です。

ALTER VIEW view_name COMPILE;
ALTER FUNCTION function_name COMPILE;
ALTER PROCEDURE procedure_name COMPILE;
ALTER PACKAGE package_name COMPILE;

33. 多国語変換
 convert文とdump文で各国語のコードを取得可能 (Oracle9i以降)。下記はutf8インスタンスからの取得例。
 
   select dump(convert(item,'WE8ISO8859P1','utf8'),16) from master_file where id=1;

   DUMP(CONVERT(item,'WE8ISO8859P1','UTF8'),16)
   --------------------------------------------------------------------------------
   Typ=1 Len=3: fc,e4,eb

  指定するキャラクタセットの例

   ASCII US7ASCII
   SJIS JA16SJIS
   中国語 ZHS16CGB231280
   西欧語 WE8ISO8859P1
   ロシア語 CL8ISO8859P5
   トルコ語 WE8ISO8859P9

32. 同時接続数を知る
 select count(*) from v$session where username is not null;

31.大文字・小文字
 Oracleの検索で大文字・小文字を意識させたくない時があります。こんな場合はUPPER関数を使います。しかしこの関数を使うと検索のパフォーマンスは当然落ちるので注意が必要です。

  select * from aaa where UPPER(bbb) = UPPER('aBc');

30. Select権限でViewを作成
 まず対象ユーザーabcにSelect権限を与えます。
    grant select on emp to abc;

 次にabc側でViewを作成します。
    create view v_emp as select * from scott.emp;

29. Sqlplus Worksheetの文字化け回避
 %ORACLE_HOME%\Ora81\sysman\config\dbappprf.propertiesの最下部に次の2行を追加して下さい。

   SQLPLUS_SYSTEMROOT=C:\\WINNT
   SQLPLUS_NLS_LANG=JAPANESE_JAPAN.JA16SJIS

28.表領域名称の確認
 次のコマンドで確認できます。

  select distinct tablespace_name from user_tables; 又は

  select distinct tablespace_name from dba_tables;

27.sqlplusのバッチファイル

 コマンドベースでsqlplusを実行するには実行するsql文とバッチファイルを作ります。例えば c:\sql のパスにsql文を置く場合下記のような感じになります。

set SQLPATH=c:\sql;
sqlplus -s scott/tiger @testsql
set SQLPATH=

 この時のtestsql.sqlの中身は例えば次のようなものです。

select * from emp;

26.Create SQLの取得

 Create SQLはexpユーティリティのダンプの中に含まれています。ROWS=Nを指定してデータ自体のダンプを抑制して取得すれば良いでしょう。例えば下記のようです。

exp userid=scott/tiger@ rows=N tables=(EMP)

expの基本文法は次のような感じです。

exp userid=[ユーザ名]/[パスワード]@[接続先] owner=([所有者]) tables([テーブル名])

25.日付型の参照
1.SELECT * FROM emp WHERE hiredate = '98-02-27';

2.SELECT * FROM emp WHERE hiredate = TO_DATE('98-02-27');

3.SELECT * FROM emp WHERE TO_CHAR(hiredate) = '98-02-27';

SQL*PLUS 8.1.6以降は上全てで結果が表示される。
SQL*PLUS 8.0.5では、3しか表示されない。

参考 : select * from error where TO_CHAR(T_TIME,'YYYY/MM/DD HH24:MI:SS') = '2001/04/06 13:46:59'

24. 先頭10件の表示
 select * from dbname where rownum <= 10;

 因みにに次の10件の表示は次のようになる。

 select * from dbname where rownum<= 20 minus select * from dbname <=10;

23.ユーザーの作成・削除・確認
作成
 コマンド
  CREATE USER ユーザー名
  IDENTIFIED BY パスワード
  DEFAULT TABLESPACE デフォルト表領域名
  TEMPORARY TABLESPACE テンポラリ表領域名
  QUOTA サイズ ON 表領域名;
削除
  DROP USER ユーザー名 CASCADE  ( CASCADE指定すると所有している表等も削除)
確認
  SELECT * FROM USER_USERS;

22.SQL*Plusでの標準出力、エラー表示は?

標準出力

SET SERVEROUTPUT ON として出力を有効にする。

例)

DECLARE
ct NUMBER := 0;
BEGIN
WHILE ct < 5 LOOP
DBMS_OUTPUT.PUT_LINE('ct = ' || ct);
ct := ct + 1;
END LOOP;
END;

エラー出力

show errors

21.テーブルの作成・リネーム・削除は?
 テーブル作成
  CREATE TABLE テーブル名 (列名 データ型,列名 データ型.......);

 テーブルの削除
  DROP TABLE テーブル名;

 テーブル名の変更
  RENAME old-name TO new-name;

 テーブルの一覧表示(Oracle?)

   select * from tab;

20.SQL*Plusで編集機能を使うには?
 edit コマンドを使う。これを用いるとメモ帳が起動される。最下行にある / は削除してはいけない。保存するとバッファに格納され、 / で呼び出しが可能となる。

19.ロールの種類、付与、確認は?

 ロールには CONNECT,RESOURCE,DBAの3種類がデフォルトで用意されている。

CONNECT 接続及びテーブル作成権限
RESORCE 開発者権限
DBA アドミニストレーター権限

 ロールの付与の例

GRANT connect,resource to testuser;

 ロールの確認の例

select * from session_roles;

18.スキーマとは
 データベースの枠組み、データベースのデータ定義において、データの型や長さといった属性、データの関連や制約、アクセス権の設定などを行なう必要があり、こうして定義された、言うなればデータベースの枠組みをスキーマと呼ぶ。

17.Decode関数
Decode 関数はインラインif文としてSQL文で使える。


例:
 SQL> select ename,sal,decode(sign(sal - 1100),0,'EQ',-1,'small',1,'big') from EMP;

 ENAME    SAL   DECOD
 ---------- --------- -----
 SMITH    800    small
 ALLEN    1600    big
 WARD    1250    big
 JONES    2975    big
 MARTIN   1250    big
 BLAKE    2850    big
 CLARK    2450    big
 SCOTT    3000    big
 KING    5000    big
 TURNER   1500    big
 ADAMS    1100    equal
 JAMES    950    small
 FORD    3000    big
 MILLER   1300    big

 14行が選択されました。

16.PL/SQLとは
Oracleのプロシジャー言語。基本的に次の形態を持つ。
DECLARE
宣言部は、そのブロックに対してローカルなデータ型、カーソル
PL/SQLプロシージャ、関数が定義される。
BEGIN
実行部は、ブロック起動時に実行されるコードが指定される。
EXCEPTION
例外処理部は、処理中に発生した例外に対するコードが指定される。
END;

15.Oracleの製品構成はどうなっていますか?
Oracle8.04以降Oracle Liteを除き次のように分類されています。

 name               user        規模
 Oracle8 Enterprise Edition  1-->10000    10GB-->100TB
 Oracle8 WorkGroup Server   1-->100     100MB-->数10GB
 Oracle8 Personal Edition   1          -->100MB

14.フリーRDBと比較したOracleの特徴

フリーRDBと比較したOracleの優位点です。

行レベルロック
 排他制御の単位として行レベルロックつまりデータベースの論理的な最小単位で行なっている。
読取り一貫性
 読取り中に他者によって更新されても、読取りに影響のある更新以前の内容を読み込める機能がある。

13.Viewとは
 リレーショナル・データベースでは、view(ビュー)と呼ばれる仮想的なテーブルが よく使われる。「仮想的」というのは、viewは、データベースの中では普通のテーブル の様な「実体」を持っておらず、それを作り出す定義のみが、システムに記憶されているだけだからである。それにも関わらず、SQLの中で、viewはほとんどテーブルと区別 なく扱かわれる。例えば、select文のfrom句には、テーブル名とview名との混在が可能 である。

create view emp78 as select * from emp where empno like '78%';

12.ストアドプロシジャとトリガーとは
 ストアドプロシジャとはSQLをプログラム化して予め格納し実行させるものです。
 トリガーもストアドプロシジャの一種ですが、データベースの更新時等に一定のルールで更新者に依存しない形で自動的にデータベースを更新する機能です。
 どちらもRDBを利用してビジネスロジックを実現する際にはなくてはならないものです。これらは商用RDBには備わっていますが、オープンソース系のRDBには備えられていません。

11.PostgreSQLとは
PostgreSQLは、カリフォルニア大学バークレー校で開発されたPostgresを元にしたデータベース。Postgresで使われていたオリジナルのPostQuelという問合わせ言語を、拡張を含むSQL-92のサブセットで置換えたシステム。

10.レプリケーションとは
replication データベースシステムにおいて、データの複製を作ること。複製されたデータに何らかの変更が加えられた場合、その複製をオリジナルのデータと照合して変更された個所を反映させる仕組みを持つ。

9.スナップショットとは?
スナップショットとは、別のデータベースの表の直前のコピーのこと。場合によってはその表のサブセットを示す。スナップショットは応答時間の短縮などを目的として作成され、定期にリフレッシュする定義を指定します。

8.drop文とdelete文の違い
SQLで両者の相異を誤解する人がいます。delete文はデータ行を削除するだけで仮に全行を削除してもテーブル定義は残ります。逆に定義そのものを削除したい時にdrop文を使います。

7.PRO*C/C++とは
Oracle Pro*C/C++, Pro*COBOLは、埋め込み型のSQLコマンドを、通常の3GLプログラムの中に記述することで、アプリケーションを開発します。
現在のところサポートされている言語は、CおよびCOBOLとなっています。Oracle Pro*C/C++,Pro*COBOLを使えば、従来から存在している手続き型言語と、柔軟性が高く、簡単なSQLコマンドの組み合わせにより、高度のアプリケーション開発に使用することが出来ます。

6.OO4Oとは
Oracle Objects for OLE は、Oracle標準の本格的ミドルウェア。

Oracle社があげる特徴は下記の通り

開発ツールを選ばないオープン性
全てのSQL文およびPL/SQL文のサポート
ストアドプロシージャ・ストアドファンクションのサポート
配列型ホスト変数のサポート
クライアントサイドで双方向カーソルのサポート
Internet Infomation Server、Active Ser Ver Pages に対応(バージョン2.2新機能)
PL/SQLマルチカーソル・リターンのサポート(バージョン2.2新機能)
IIS/MTS相当の接続プール機能のサポート(バージョン2.3新機能)

5. PL/SQLでのIPアドレス取得方法
create or replace PROCEDURE GET_IP
is
g_ip varchar2(80);
BEGIN
g_ip := owa_util.get_cgi_env('REMOTE_ADDR');

htp.htmlOpen;
htp.headOpen;
htp.print('<TITLE>GET_IP</TITLE>');
htp.headClose;
htp.bodyOpen;
htp.p(g_ip);
htp.bodyClose;
htp.htmlClose;
END;
/

4.Linux版ORACLEの動向
日本オラクルは、98年3月18日発売のリレーショナル・データベースサーバー「オラクル8 ワークグループサーバー リリース8.0.5」Linux版をキャンペーン価格9万8000円で販売する。通常価格の22万円から約55%の割り引きを行うもので、期間は9月30日まで。対象は、5同時ユーザー/10クライアント・パッケージのみで、他は定価通り。10同時ユーザー/20クライアント・パッケージが44万円、追加ライセンスパックは1同時ユーザー4万円、10クライアント10万円など。

http://www.oracle.co.jp/news/linux/index.html

評価版が次の雑誌等に付いています。

Linux World 第一弾(99/4) IDGコミュニケーションズ
Linux magazine 1999 No.1 ASCII
すみからすみまでLinux 技術評論社

Oracle8 Linux版トライアルキット アスキー出版局

3.Oracleのバッチ起動方法

start.batの中身の例

set ORACLE_SID=ORCL
net start OracleServiceORCL
net start OracleStartORCL
net start OracleTNSListener80

2.SQLplusでのCSV出力

spool 保存ファイル名
set heading off /*フィールド名未表示*/
set pagesize 0 /*間を空けない*/
SELECT '"'||フィールド名||'","'||フィールド名||'"' FROM テーブル名;
spool off;

1.SQLloaderでのCSV入力
sqlldr80.exe

sqlldr80 control=ctl.dat

ctl.datの中身
load data
infile '入力CSVファイル名'
into table テーブル名
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
(フィールド1, フィールド2,...)

03/03/29補足

 sqlldrでは単純insert(デフォルト)以外に次が使えます。

    append
    replace
    truncate (データが存在している場合は削除してから=replaceより速い)

load data
infile '入力CSVファイル名'
into table テーブル名
append
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
(フィールド1, フィールド2,...)

前ページに戻る---> RETURN