Oracle/ja
│
English (en) │
español (es) │
français (fr) │
日本語 (ja) │
参照: チュートリアル/練習となる記事: 各種データベース |
低階層 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 ファイルのネットサービス名
トラブルシューティング
クライアントとサーバのキャラクタセット
どのキャラクタセット/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