知って得する Oracle8

更新日 2000/8/23

[HOME] / [Java] / [Perl5] / [Palm(GCC)] / [Palm(CodeWarrior)] / [EJB] / [本の紹介]


1. はじめに
 最近、Linuxがはじけてしまいましたが、その大きな要因としてDBMS(データベースマネージメントシステム)製品の最大シェアを誇るOracle社がLinux上で稼動するOracle8の製品化したことがあげられます。この Oracle8 for Linux の評価版を使って、Linux マシンへのインストール、SQLPlusを使ってのアクセス、Perl5を使ってのアクセス、JavaのJDBCを使ってのアクセスなどを予定しています。インストール以外は、他のOS上の場合でも共通と思いますので参考になるかも知れません。間違いも大量に含んでいると思いますが、ご容赦ください。
   2. 準備
   3. Oracle8のインストール
   4. データベースの起動と終了
   5. ユーザの設定と与えられる権限
   6. テーブルの作成
   7. テーブルのデータ追加・検索・変更・削除
   8. Net8を設定する
   9. 自動起動
 10. Java JDBCからのアクセス
 11. Perl5からのアクセス
 12. インデックスとは(準備中)
 13. 参考文献
2. 準備            ↑top
 Linuxとして以前、Vine Linuxを利用していたのですが、今のディストリビューションではライブラリの関係で動作が保証されていないばかりか、インストールもままならないようです。動作保証されているものは、RedHat Linux5.2やTurbo Linux3.0 ですので、これらをインストールした上で、Oracle8をインストールする必要があります。

 以前、RedHat Linux6.2J にリンクを張って紹介していたのですが、この上にOracle8(8.0.5)はうまくインストールされないようなので、ご注意ください。

  1. まず、 RedHat Linux5.2をインストールします。

  2. 現状、このディストリビューションを取得するのは困難かもしれません。Oracle8を購入された方は別ですが、そうでなければ、RedHat Linux6.2J と Oracle8iの組み合わせて実施された方がいいでしょう。この場合、このHPはあまり役に立たないでしょう。
  3. 次に、Oracle8ですが評価版は Oracle Technology Network というところで公開されています。画面左側のSoftwareをクリックし、一番上の Select a Product で Oracle8 Server を選び、Oracle8.0.5.1 Standard Edition for Linux を選んでいきます。ダウンロードには簡単な登録が必要です。容量が160MBほどあるのでダイヤルアップでダウンロードするのは一苦労でしょう。インストールについて以下の本に記事があります。今であればOracle8i という選択になるのでしょうか。会社でダウンロードしてみましたが、260MBほどあり、分割されたファイルも用意されているようですが、ダイアルアップではちょっとつらいですね。近々インストールしてみる予定です。

  4.  
3. Oracle8のインストール    ↑top
 インストールの手順については上記の本にも書かれていますので、少し違う方法をここで示しておきます。長いので別のページに起こしますが、大きく分けると以下のようになります。私のマシンは、PentiumMMX 200MHz ですが、自動インストールに入ってから25分ぐらいかかりました。
 一般的やり方と違う点は、ディレクトリの作成部分です。Oracle社では、root に u01,u02,u03,u04 を作ってその配下にインストールすることが推奨されていますが、これは性能および保守の観点から、4台のハードディスクを用いる場合を想定してのことで、今回のように動作を確認する場合は不要と思われましたので、インストール手順の中で、1つのディレクトリにインストールするように選択しています。実際の業務に適用する場合は、よく検討した上で決めてください。
  1. グループID (dba) とユーザID (oracle) の作成
  2. oracle ユーザにて、環境変数の設定 (.bash_profile の編集)
  3. root にて、oratab.sh による /etc/oratab の作成   (oratab.sh スクリプト
  4. oracle ユーザにて、インストーラ (orainst) を起動
  5. 最後に、root で root.sh を実行    (root.sh スクリプト
 この時点でデータベースは起動しているようです。psコマンドで確認できます。プロセスについては以下の第4項を参照してください。

 データベース起動用ファイル2つと、データベース作成用のスクリプトが2つ作成されます。


 テーブルスペースなどの言葉が出てきたので、Oracleにおけるデータベースの管理上のくくりを以下に示します。下に行くに従って小さな単位になります。

 
表3.1 ORACLEの管理上のくくり
データベース システムの運営単位で、この単位で識別子SIDが付与されます
テーブルスペース データベースオブジェクト(テーブル・インデックスなど)を割り当てる領域を管理するための単位です
セグメント テーブルスペースの中の単位でデータセグメント、インデックスセグメント、ロールバックセグメントなどに分けられます
エクステント セグメントを構成する単位で、最初に確保する量とそれを超えた場合の増分という形で設定します
4. データベースの起動と終了   ↑top
 データベースの起動・終了を以下に示します。この作業は、マシンの起動・終了ごとに必要になります。自動起動・終了も可能ですが、まだやったことがありません。他のホームページにありますので後日パクッてくる予定です。

【日本語環境の設定】 (この設定はインストール前にやってもOKでしたが、インストール後に設定するのが本当のようです)
[oracle@legnum oracle]$ export NLS_LANG=JAPANESE_JAPAN.JA16SJIS
[oracle@legnum oracle]$ vi .bash_profile
( export NLS_LANG=JAPANESE_JAPAN.JA16SJIS を追加します)

【データベースの起動】
[oracle@legnum oracle]$ svrmgrl
Oracle Server Manager Release 3.0.5.0.0 - Production
(c) Copyright 1997, Oracle Corporation.  All Rights Reserved.
Oracle8 Release 8.0.5.0.0 - Production
PL/SQL Release 8.0.5.0.0 - Production

SVRMGR> connect internal
接続されました。
(ここで Connected. と出るのは、環境変数 NLS_LANG が設定されてないことが多いようです)
(Vine Linux でデフォールトの Kterm は、EUC Mode だったため、字化けしてました。これは Ctrl 押しながら真中クリックで、Shift-JIS Mode を選択すれば直ります。SJISとEUCのうち、どちらを使うのが一般的なのでしょうか?)

SVRMGR> startup  (1つしかないからこれでいいのかな?)
startup pfile=$ORACLE_HOME/dbs/inittest.ora が本当なのかな?) 
Oracleインスタンスが起動しました。
システム・グローバル領域合計            4754704バイト
Fixed Size                                           48400バイト
Variable Size                                    4222976バイト
Database Buffers                               409600バイト
Redo Buffers                                      73728バイト
データベースがマウントされました。
データベースがオープンされました。

VRMGR> exit
 

【起動の確認】
プロセスを調べると以下のようになります。

[oracle@legnum oracle]$ ps x
 PID 端末 状態 時間 コマンド
  ...........
 3949  ?  S    0:00 ora_pmon_test
 3951  ?  S    0:08 ora_dbw0_test
 3953  ?  S    0:10 ora_lgwr_test
 3955  ?  S    0:00 ora_ckpt_test
 3957  ?  S    0:00 ora_smon_test
 3959  ?  S    0:00 ora_reco_test
 

【データベースの終了】
[oracle@legnum oracle]$ svrmgrl
SVRMGR> connect internal
接続されました。

SVRMGR> shutdown
データベースがクローズされました。
データベースがディスマウントされました。
Oracleインスタンスが停止しました。

SVRMGR> exit
 
 
5. ユーザの設定と与えられる権限    ↑top
 上記のインストールで、システム管理的存在の systemsys という Oracleアカウントが作成されます。通常のデータベースはさまざまな人たちが利用するので、ユーザアカウントもその分だけ用意する必要があります。ここでは、ユーザの作成とそれぞれのユーザに与えられる権限について書くことにします。

[oracle@legnum oracle]$ sqlplus
SQL*Plus: Release 8.0.5.0.0 - Production on 土 Apr 17 2:15:19 1999
(c) Copyright 1998 Oracle Corporation.  All rights reserved.
ユーザー名を入力してください。system
パスワードを入力してください。xxxxxx  (Install時に 指定したパスワードです)

Oracle8 Release 8.0.5.0.0 - Production
PL/SQL Release 8.0.5.0.0 - Production
に接続されました。

(新規ユーザ egami  を作ってみます。xxxxxx は新規ユーザのパスワードです)

SQL> create user egami identified by xxxxxxx default tablespace users temporary tablespace temp;
ユーザーが作成されました。

SQL> exit
Oracle8 Release 8.0.5.0.0 - Production
PL/SQL Release 8.0.5.0.0 - Productionとの接続が切断されました

しかし、これだけではデータベースへの接続 (connect) も許されていません。以下にそのときの状況を示します。

[oracle@legnum oracle]$ sqlplus
SQL*Plus: Release 8.0.5.0.0 - Production on 土 Apr 17 2:15:19 1999
(c) Copyright 1998 Oracle Corporation.  All rights reserved.
ユーザー名を入力してください。egami
パスワードを入力してください。xxxxxx
エラー:
ORA-01045: user EGAMI lacks CREATE SESSION privilege; logon denied

そこで必要となるのが、ユーザに与えられる権限です。これには以下の3つが用意されています。

 
表5 権限
CONNECT データベースにはアクセス可能。オブジェクトを作成することはできない。
別ユーザのオブジェクトは,アクセス許可に従う
RESOURCE オブジェクトを作成可能
DBA 完全なアクセス権を持つ
CONNECT 権限を与えてみます

[oracle@legnum oracle]$ sqlplus
ユーザー名を入力してください。system
パスワードをを入力してください。xxxxx

SQL> grant connect to egami;
権限付与が成功しました。

[oracle@legnum oracle]$ sqlplus
ユーザー名を入力してください。egami
パスワードをを入力してください。xxxxx
Connected to:
Oracle8 Release 8.0.5.0.0 - Production
PL/SQL Release 8.0.5.0.0 - Production

(connect まではできるようになりました。表の検索などもできると思いますが、作成はできません)
(以下にその例を示します)

SQL> create table test (id number(5), name varchar2(20));
create table test (id number(5), name varchar2(20));
*
エラー行: 1: エラーが発生しました。
ORA-01950: 表領域: USERSに対する権限がありません。

(RESOUCE 権限を与えてみます)

[oracle@legnum oracle]$ sqlplus
ユーザー名を入力してください。system
パスワードを入力してください。xxxxx
SQL> grant resource to egami;
権限付与が成功しました。
 

これで、ユーザ egami からテーブルの作成が可能となりました。

 Oracle7からはロール(権限をいくつかまとめたもの)を定義することが可能で、複数のユーザがいる場合でもこのロールを与えることで一括して権限を与えることができるようですが、ここでは省略します。元気がでたら追加するかも知れません。
 
6. テーブルの作成 (SQL*Plus)     ↑top
 さて、ユーザアカウント (egami) もできましたので、このアカウントで表(テーブル)を作ってみます。

 ここでは、例題としてある製品の売り上げを管理するためのテーブルを作ってみます。1つは製品の情報を示すテーブル、もう1つは売り上げ伝票にあたるものです。
 

表6.1 製品情報テーブル  (seihin)
製品コード
seihin_code
製品名
seihin_name
単価
tanka
12345 メモリ 1980
23456 コンデンサ 980
・・・ ・・・ ・・・

 
表6.2 売り上げテーブル (uriage)
年月日
uri_date
製品コード
seihin_code
数量
uri_suu
1999/03/12 12345 15
1999/03/14 23456 7
・・・ ・・・ ・・・

【製品テーブルの作成】
[oracle@legnum oracle]$ sqlplus
ユーザー名を入力してください。egami
パスワードを入力してください。xxxxx

SQL> create table seihin (seihin_code number(5), seihin_name varchar(20), tanka number(10));
表が作成されました。

【売り上げテーブルの作成】
SQL> create table utiage (uri_date date, seihin_code number(5), uri_suu number(4));
表が作成されました。
 
 
7. テーブルのレコード追加・検索・変更・削除  (SQL*Plus)    ↑top
 SQL*Plusを使って、テーブル上のデータを操作してみます。このページは検証してないので信用しないでください。

  1. まず、作成したテーブルにデータを入れてみましょう

  2. % sqlplus egami/*****    (****はパスワード)
    SQL> insert into seihin values(12345, 'メモリ', 1980);
    SQL> insert into seihin values(23456, 'コンデンサ', 980);
    SQL> insert into uriage values(TO_DATE('03/12/99, 'MM/DD/YY') ,12345, 15);
    SQL> insert into uriage values(TO_DATE('03/14/99, 'MM/DD/YY'), 23456, 7);
    SQL> commit;
     
  3. これを検索してみます

  4. SQL> select * from seihin;

    SQL> select uri_date, seihin_code, seihin_name, tanka, uri_suu from seihin, uriage where uriage.seihin_code = seihin.seihin_code;
     

  5. 一部を変更するときはこうします

  6. SQL> update uriage set seihin_tanka = 2080 where seihin_code = 12345;
    SQL> commit;
     
  7. いらなくなったレコードを削除します

  8. SQL> delete from seihin where seihin_code = 23456;
    SQL> commit;
8. Net8を設定する    ↑top
  さて、ここまでで Oracle が何とか動作するようになりましたが、サーバというぐらいですからリモート環境からアクセスすることを次の目標とします。このための仕組みがNet8で、以前はSQL*Netと呼ばれていたと思います。
 
  1. まず、$ORACLE_HOME/bin/tnslsnr というファイルのオーナが rootになっている場合があるのでこれを oracle に訂正します。root で実施する必要があります。

  2. [oracle@legnum oracle]$ cd $ORACLE_HOME/bin
    [oracle@legnum oracle]$ su
    Password: xxxxxx
    [root@legnum]# chown oracle.dba tnslsnr
     
  3. リスナー機能を立ち上げます。

  4. [oracle@legnum admin]$ lsnrctl
    LSNRCTL for Linux: Version 8.0.5.0.0 - Production on 27-JUN-99 19:03:18
    (c) Copyright 1997 Oracle Corporation.  All rights reserved.
    LSNRCTLへようこそ。詳細は"help"と入力してください。

    LSNRCTL> start
    /home/oracle/8.0.5/bin/tnslsnrを起動しています。お待ちください...

    TNSLSNR for Linux: Version 8.0.5.0.0 - Production
    システム・パラメータ・ファイルは/home/oracle/8.0.5/network/admin/listener.oraです。
    ログ・メッセージを/home/oracle/8.0.5/network/log/listener.logに書き込みました。
    リスニングしています: (ADDRESS=(PROTOCOL=ipc)(DEV=6)(KEY=test))
    リスニングしています: (ADDRESS=(PROTOCOL=ipc)(DEV=10)(KEY=PNPKEY))
    リスニングしています: (ADDRESS=(PROTOCOL=tcp)(DEV=11)(HOST=192.168.0.5)(PORT=1521))

    (ADDRESS=(PROTOCOL=IPC)(KEY=test))に接続しています。
     リスナーのステータス
    ------------------------
    別名                      LISTENER
    バージョン                TNSLSNR for Linux: Version 8.0.5.0.0 - Production
    開始日                    27-JUN-99 20:04:21
    アップタイム              0日 0時 0分 0秒
    トレース・レベル          off
    セキュリティ              OFF
    SNMP                      OFF
    パラメータ・ファイル      /home/oracle/8.0.5/network/admin/listener.ora
    ログ・ファイル            /home/oracle/8.0.5/network/log/listener.log
    サービスのサマリー...
      extproc               には、1件のサービス・ハンドラがあります。
      test          には、1件のサービス・ハンドラがあります。
    コマンドは正常に終了しました
     

  5. 終了する場合は以下のようにします

  6. LSNRCTL> stop
 途中で出てきてたのですが、KEY=test HOST=192.168.0.5 PORT=1521 というところを次で使います。
 
 
9. 自動起動    ↑top
 1回2回ならいいのですが、Oracleを使うたびに oracle ユーザになって起動しているのでは、面倒くさくなってしまいます。ここでは Boot 時の自動起動を実現していきます。

【dbstart dbshut ユーティリティ】
 インストール時に、/etc/oratab というファイルが作成されますが、このファイルにある設定をすると、$ORACLE_HOME/bin にある dbstart, dbshut が有効となり、少し簡単に起動・終了できるようになります。

 下に示すのが、/etc/oratab ですが、最後の 'N' を 'Y' にすることで上記のコマンドが有効になります。

#
#  This file is used by ORACLE utilities.  It is created by root.sh
#  and updated by the Oracle8 and SQL*Net install procedures.
#
#  A colon, ':', is used as the field terminator.  A new line terminates
#  the entry.  Lines beginning with a pound sign, '#', are comments.
#
#  Entries are of the form:
#      $ORACLE_SID:$ORACLE_HOME:<N|Y>:
#
#  The first and second fields are the system identifier and home
#  directory of the database respectively.  The third field indicates
#  to the dbstart utility that the database should, "Y", or should not,
#  "N", be brought up at system boot time.
#
#  Multiple entries with the same $ORACLE_SID are not allowed.
#
#
test:/home/oracle/8.0.5:N  <= Y に変更する

dbstart および dbshut は、oracle ユーザで実行します。
 

【dbstart dbshut を利用した自動起動/終了】

  1.  以下に示す内容で、/etc/rc.d/init.d/oractl (名前はなんでもよい)というファイルを作成します

  2. #! /bin/sh
    export ORACLE_OWNER=oracle
    export ORACLE_BASE=/home/oracle
    export ORACLE_HOME=$ORACLE_BASE/8.0.5
    export ORACLE_SID=test
    export ORACLE_TERM=vt100
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
    export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
    export PATH=$PATH:$ORACLE_HOME/bin

    case "$1" in
    start)
      su $ORACLE_OWNER -c $ORACLE_HOME/bin/dbstart
      su $ORACLE_OWNER -c '$ORACLE_HOME/bin/lsnrctl start'
    ;;
    stop)
      su $ORACLE_OWNER -c '$ORACLE_HOME/bin/lsnrctl stop'
      su $ORACLE_OWNER -c $ORACLE_HOME/bin/dbshut
    ;;
    esac
     

  3. このファイルの正常性を確認します

  4. [root@legnum init.d]# chmod 755 oractl  <= 実行可能の設定をしておきます
    [root@legnum init.d]# ./oractl start

    うまく起動できたでしょうか。今度は終了してみます。
    [root@legnum init.d]# ./oractl stop
     

  5. /etc/rc.d 配下の指定で自動起動するように設定する

  6.  この辺の指定は良く分かりませんが、マルチユーザになる際に rc3.d 配下のファイルが数字の小さいものから実行されるとのことです。であれば、上記の oractl が実行できるようにすればいいのです。

    [root@legnum init.d]# cd ../rc3.d
    [root@legnum init.d]# ln -s /etc/rc.d/init.d/oractl S90oractl

    こんどは終了の場合ですが、rc0.d 配下が実行されます。再起動の際のrc6.d にも入れておくようです。

    [root@legnum init.d]# cd ../rc0.d
    [root@legnum init.d]# ln -s /etc/rc.d/init.d/oractl K10oractl
    [root@legnum init.d]# cd ../rc6.d
    [root@legnum init.d]# ln -s /etc/rc.d/init.d/oractl K10oractl

    システムを起動させて、Oracle が起動していることを確認してください。

10. Java JDBCからのアクセス    ↑top
 さて、ついに遠隔のマシンから Java言語を用いたアクセスするところまで話を進めることができました。
  1. まず、準備として、Javaの開発環境が必要です。ここでは、Windowsマシンを想定します。このマシンから遠隔で、上記のNet8を狙って、Oracleをアクセスすることを目標とします。Javaのインストールはこちらを参考にして下さい。

  2.  
  3. JDBCドライバもインストールします。ここにあります。(Oracle JDBC Driver V8.0.4.0.5)

  4. 解凍して、lib の下の classes111.zip を適当なディレクトリ(例えば、C:\jdk1.2\jdbc)に収めて、クラスバスを張ります。
    classes111.zip は解凍しません。

    【autoexe.bat】
      SET CLASSPATH=C:\JDK1.2\JDBC\classes111.zip;

 それでは、サンプルプログラムを利用して、JDBCドライバ経由のOracleアクセスを試してみます。 

 Thinドライバ用のサンプルのEmployee.java を、少し書き換えています。ファイル名を Ora.java とし、修正個所をで示します。

/*
 * This sample shows how to list all the names from the EMP table
 *
 * It uses the JDBC THIN driver.  See the same program in the
 * oci7 or oci8 samples directories to see how to use the other drivers.
 */

// You need to import the java.sql package to use JDBC
import java.sql.*;

class Ora
{
  public static void main (String args [])
       throws SQLException
  {
    // Load the Oracle JDBC driver
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

    // Connect to the database
    // You must put a database name after the @ sign in the connection URL.
    // You can use either the fully specified SQL*net syntax or a short cut
    // syntax as <host>:<port>:<sid>.  The example uses the short cut syntax.
    Connection conn =
      DriverManager.getConnection ("jdbc:oracle:thin:@192.168.0.5:1721:test",
       "egami", "egapass");  <= egami が sqlplus のユーザ名で、egapass がパスワードを示します

    // Create a Statement
    Statement stmt = conn.createStatement ();

    // Select the ENAME column from the EMP table
    ResultSet rset = stmt.executeQuery ("select NAME from testtable");

    // Iterate through the result and print the employee names
    while (rset.next ())
      System.out.println (rset.getString (1));
  }
}

以下をMS-DOSプロンプトにてコンパイルします。
C:\jdk1.2\jdbc>javac Ora.java

実行してみます。このとき、前節のNet8のリスナを立ち上げておく必要があります。
C:\jdk1.2\jdbc>java Ora
Exception in thread "main" java.sql.SQLException: Connection refused: no further
 information
        at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:228)
        at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:110)

        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:148)
        at java.sql.DriverManager.getConnection(Compiled Code)
        at java.sql.DriverManager.getConnection(DriverManager.java:137)
        at Ora.main(Compiled Code)

 いつものことですが、うまく行きませんね。Connection refused と言っていますから、接続の情報が間違っているのでしょう。実はこのサンプルのport番号が1721となっていて、Net8 で使った listener.ora の指定(1521)と異なっているのです。

 これを直して、もう一度コンパイルしてみます。
  ....
    Connection conn =
      DriverManager.getConnection ("jdbc:oracle:thin:@192.168.0.5:1521:test",
       "egami", "egapass");
  ...

C:\jdk1.2\jdbc>javac Ora.java

C:\jdk1.2\jdbc>java Ora
ああ
abc

日本語もちゃんと出ています。
 
11. Perl5からのアクセス    ↑top
 勢いにのって Perl からのアクセスもやってみましょう。PerlからOracleへのアクセスは、DBIモジュールとDBDモジュールを介して行われます。最初に紹介した Vine Linux では perl5は、デフォールトでインストールされますが、これらのデータベース関連のモジュールは含まれていません。まずは、これらのモジュールのインストールをやってみます。

  1. モジュールを取得します

  2. DBIは最新がVer1.14(DBI-1_14_tar.gz)、DBDはVer1.06(DBD-Oracle-1_06_tar.gz) です。
     
  3. DBI のインストール

  4. 本来のやり方はよく分かりませんが、/usr/src/perl で展開してここで make することにします。
    [oracle@legnum oracle]$ su
    password: xxxxxxx
    [root@legnum oracle]# mkdir /usr/src/perl
    [root@legnum oracle]# chmod 777 /usr/src/perl
    [root@legnum oracle]# exit
    [oracle@legnum oracle]$ cd /usr/src/perl
    [oracle@legnum perl]$ tar zxvf /tmp/DBI-1_13_tar.gz
    .....
    [oracle@legnum DBI-1_13]$ perl Makefile.PL
    .....
    [oracle@legnum DBI-1_13]$ make
    .....
    [oracle@legnum DBI-1_13]$ make test
    .....
    [oracle@legnum DBI-1_13]$ su
    password: xxxxxxx
    [root@legnum DBI-1_13]# make install
    .....
    [root@legnum DBI-1_13]# exit
     
  5. DBD のインストール

  6. DBI と全く同様に操作すればいいです。oracleユーザの環境が必要なようです。
    [oracle@legnum oracle]$ cd /usr/src/perl
    [oracle@legnum perl]$ tar zxvf /tmp/DBD-1_02_tar.gz
    .....
    [oracle@legnum DBD-1_03]$ perl Makefile.PL
    .....
    [oracle@legnum DBD-1_03]$ make
    .....
    [oracle@legnum DBD-1_03]$ make test
    .....
    [oracle@legnum DBD-1_03]$ su
    password: xxxxxxx
    [root@legnum DBD-1_03]# make install
    .....
    [root@legnum DBD-1_03]# exit
 それでは、perl からアクセスしてみましょう。以下にサンプルプログラムを示します。ファイル名は何でもいいですが、chmod で実行権を与えてください。oracle ユーザ以外ではうまくいきませんでした。環境の問題だけかも知れません。

【データ検索: select】

#!/usr/bin/perl

  use DBI;

  $ds = "dbi:Oracle:test";
  $user = 'egami/egamipass';   <- sqlplus のユーザ名とパスワードです
  $pass = '';

  $dbh = DBI->connect($ds, $user, $pass)
    or die "Cannot connect: " . $DBI::errstr;

  $sth = $dbh->prepare("select id,name from test ") or die "Cannot prepare: " . $sth->errstr();

  $sth->execute() or die "Cannot execute: " . $sth->errstr();

  while ( @row = $sth->fetchrow_array() ) {
    print "@row\n";
  }

  $sth->finish();
  $dbh->disconnect();
 

  【データ挿入: insert】

#!/usr/bin/perl

  use DBI;

  $ds = "dbi:Oracle:test";
  $user = 'egami/egamipass';    <- sqlplus のユーザ名とパスワードです
  $pass = '';

  $dbh = DBI->connect($ds, $user, $pass)
    or die "Cannot connect: " . $DBI::errstr;

  $sth = $dbh->do("insert into test values(15,'egami')")
    or die "Cannot Do: " . $dbh->errstr();

  $sth = $dbh->prepare("select id,name from test ") or die "Cannot prepare: " . $sth->errstr();

  $sth->execute() or die "Cannot execute: " . $sth->errstr();

  while ( @row = $sth->fetchrow_array() ) {
    print "@row\n";
  }

  $sth->finish();
  $dbh->disconnect();
 
 
12. インデックスとは  (SQL*Plus)     ↑top
  インデックスは、本の索引のようなものです。これを作ることで検索のスピードは速くなりますが、その分の容量も必要になります。そのため、検索キーとして使われるものをDISK容量の許される範囲で、インデックスを作成していくことになります。個人的に扱うデータ量であれば、インデックスの必要性は少ないかも知れませんが、データ量が多い場合の検索には効果絶大です。
 
13.参考文献    ↑top
  Oracle8に限らず役に立つと思われる書籍を紹介しています。本文からも参照できるようにしていきますが、一覧はこちらでまとめています。


[HOME] / [Java] / [Perl5] / [Palm(GCC)] / [Palm(CodeWarrior)] / [EJB] / [本の紹介]

このページにご意見のある方は、egami@ee.e-mansion.com までお願い致します。