Ruby 開發者若需連接 Oracle,ruby-oci8 是最成熟的選擇。它直接呼叫 Oracle Call Interface (OCI),效能優於 JDBC 橋接方案。本文整理安裝方式、連線語法與常見參數範例。
gem install ruby-oci8
至 RubyForge 專案頁 下載對應版本,例如:
ruby-oci8-1.0.6-mswin32.rb → 執行 ruby ruby-oci8-1.0.6-mswin32.rbruby-oci8-1.0.6-x86-mswin32-60.gem → 執行 gem install ruby-oci8-1.0.6-x86-mswin32-60.gem注意:安裝前務必確認已安裝 Oracle Instant Client 或完整 Client,並設定 ORACLE_HOME、PATH、TNS_ADMIN 環境變數。
require 'oci8'
# 1. 使用 tnsnames.ora 別名連線
conn = OCI8.new('scott', 'tiger', 'orcl.world')
# 2. 使用 Easy Connect 字串(10g+ 支援)
conn = OCI8.new('scott', 'tiger', '//db.example.com:1521/ORCL')
# 3. 以 SYSDBA 身分連線
conn = OCI8.new('sys', 'password', nil, :SYSDBA)
# 執行查詢
cursor = conn.exec('SELECT * FROM employees') do |row|
puts row.join(', ')
end
# 關閉連線
conn.logoff
若不想依賴 tnsnames.ora,可自行組裝連線描述字串:
def open_connection(username, password, host, port, sid)
tns = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=#{host})(PORT=#{port}))" \
"(CONNECT_DATA=(SID=#{sid})))"
OCI8.new(username, password, tns)
end
conn = open_connection('scott', 'tiger', '192.168.1.100', 1521, 'ORCL')
| 方法 | 說明 |
|---|---|
OCI8.new(user, pwd, db, priv) | 建立連線,priv 可為 :SYSDBA 或 :SYSOPER |
conn.exec(sql) { |r| ... } | 執行查詢並迭代每列 |
conn.exec(sql, *bind_vars) | 帶入綁定變數執行 DML/DDL |
conn.logoff | 關閉連線 |