Oracle/ja

From Free Pascal wiki
Jump to navigationJump to search

English (en) español (es) français (fr) 日本語 (ja)

データベースのポータル

参照:

チュートリアル/練習となる記事:

各種データベース

Advantage - MySQL - MSSQL - Postgres - Interbase - Firebird - Oracle - ODBC - Paradox - SQLite - dBASE - MS Access - Zeos

低階層 Oracle サーバインタフェース

低階層のOracleサーバインタフェースはoraociという1つのユニットに存在し、それはOracleインタフェースヘッダファイルの直訳である。

2つのプログラム例がある:

  • oraclew は結果セットのより簡便な取り扱いに向けた、Oracleインタフェースのためのいくつかのユーティリティルーチンを含む。FCLからのクラスユニットを必要とする。
  • test01はこのインタフェースのデモのための簡単なテストプログラムである。

Oracle へ直接接続

Oracle Data Access Component(ODAC)を用いてLazarusとOracleを直接接続することができる。

それはWindows、Mac OS X、Android、Linux、FreeBSDの32-bit、64-bitプラットフォーム双方のためにLazarus(およびFree Pascal)からOracleにネイティブな接続性を提供するコンポーネントのライブラリである。 ODACライブラリはプログラマにより迅速で、ネイティブなOracleデータベースアプリケーションを開発するために設計されている。


Oracle へのOOPアクセス

低レベルインタフェース上で構築され、SQLDBフレームワークはFPCに(TOracleConnectionを用いて)Oracleへのアクセスを提供する。以下も参照のこと Lazarus_Database_Overview#Lazarus_and_Oracle

Lazarusはまたコンポーネント: TOracleConnection を持つ。

  • Hostname: 他のSQLDBコネクタ同様、ホスト名やIPアドレスを用いる。もし、DatabaseNameにTNSNAMES.ORAネットサービス名を使う場合は空にしておく
  • Username/password: 他のSQLDBコネクタ同様である
  • DatabaseName:
    • 接続したいOracleサーバのインスタンス/SID または
    • TNSNAMES.ORA ファイルのネットサービス名
Light bulb  Note: WindowsでリリースされているFPC/Lazarus x64バージョンはOracleコネクタを含んでいない。もしこれを有効にしたいのであれば、パッチを送られたい。そうすれば付属することになる

トラブルシューティング

クライアントとサーバのキャラクタセット

どのキャラクタセット/NLS設定が有効か知るために、以下のプログラムを実行することができる。

コンパイルの前に正しいサーバ名、ユーザー名、パスワード、データベース名が含まれているか忘れないでほしい。

program oracharset;

{ クライアントとサーバの文字集合/NSL情報を表示する}
{ 以下のパスワードなどは適宜設定されたい。 }

{$mode objfpc}{$H+}

uses {$IFDEF UNIX} {$IFDEF UseCThreads}
  cthreads, {$ENDIF} {$ENDIF}
  Classes,
  SysUtils,
  sqldb,
  oracleconnection;

var
  Col: integer;
  Conn: TOracleConnection;
  Tran: TSQLTransaction;
  Q: TSQLQuery;
begin
  Conn := TOracleConnection.Create(nil);
  Tran := TSQLTransaction.Create(nil);
  Q := TSQLQuery.Create(nil);
  try
    // * 識別情報が必要であれば編集する*
    Conn.HostName := '';
    Conn.UserName := 'system';
    Conn.Password := '';
    Conn.DatabaseName := 'XE';
    // * 識別情報の終わり*
    Conn.Transaction := Tran;
    Q.DataBase := Conn;
    Conn.Open;
    Tran.Active := true;

    writeln('Server character set info:');
    Q.SQL.Text := 'SELECT value$ FROM sys.props$ WHERE name like ''NLS_%'' ';
    Q.Open;
    Q.First;
    while not (Q.EOF) do
    begin
      writeln('*****************');
      for Col := 0 to Q.Fields.Count - 1 do
      begin
        try
          writeln(Q.Fields[Col].DisplayLabel + ':');
          writeln(Q.Fields[Col].AsString);
        except
          writeln('Error retrieving field ', Col);
        end;
      end;
      Q.Next;
    end;
    Q.Close;

    writeln('');
    writeln('Client character set info:');
    Q.SQL.Text := 'SELECT * FROM NLS_SESSION_PARAMETERS ';
    Q.Open;
    Q.First;
    while not (Q.EOF) do
    begin
      writeln('*****************');
      for Col := 0 to Q.Fields.Count - 1 do
      begin
        try
          writeln(Q.Fields[Col].DisplayLabel + ':');
          writeln(Q.Fields[Col].AsString);
        except
          writeln('Error retrieving field ', Col);
        end;
      end;
      Q.Next;
    end;
    Q.Close;
    // *バグテストコード例の終わり*
    Conn.Close;
  finally
    Q.Free;
    Tran.Free;
    Conn.Free;
  end;
  writeln('Program complete. Press a key to continue.');
  readln;
end.

ORA-00911 : invalid character

もしこのエラーメッセージが出たら、以下を試すことができる

  • もしSELECT文でセミコロンが用いられている場合は取り除いてみる
  • 末尾にセミコロンを加えてみる (例えば CALL や EXECUTE文で)

.NETでどれを用いるかこのスレッドを参照されたい。SQLDBでも当てはまるかもしれない: [1]

Go back to Packages List