不要追求绝对的公平,红尘之中没有公平而言,人活一世,难得糊涂。                                           it is no use doing what you like, you have got to like what you do.

ruby连接数据库 oracle的方法之一:OCI8

上一篇 / 下一篇  2009-09-18 17:51:35 / 个人分类:ruby_watir

查看( 1471 ) / 评论( 4 )
每日随笔
  • 每日随笔:
ruby-oci8 是 Ruby 使用 Oracle 的 OCI8 接口连接 Oracle 数据库的接口。51Testing软件测试网S3~[W b#W
51Testing软件测试网BN#OB Hj2f-M)e
如果你是是有那个PL/SQL程序的话,就可以顺利的执行以下的步骤了,因为oci8会使用tnsname中的配置 通过PL/SQL访问数据库51Testing软件测试网5\m2r xh5Og

.z(s]4pd;X0a 使用该命令直接安装:gem install ruby-oci851Testing软件测试网U@ l^2m5I,D#u
b 下载文件:http://rubyforge.org/projects/ruby-oci8/  51Testing软件测试网+Y0{I-_+T x
  B1.下载文件: ruby-oci8-1.0.6-mswin32.rb51Testing软件测试网j'z2}z]%h~l
     下载到本地后通过命令 执行rb文件:ruby ruby-oci8-1.0.6-mswin32.rb
m GmBb/`Z0  B2. 下载文件:ruby-oci8-1.0.6-x86-mswin32-60.gem
,OSSiuh,let c0   ............................... N多安装方式51Testing软件测试网TsbD^)B;XkZ
最新文件如下:  51Testing软件测试网 Y9Du Pt@g5w
   ruby-oci8-1.0.6-mswin.rb        56 KB        1,989        i386        Other51Testing软件测试网W @XJU/Q
   ruby-oci8-1.0.6-x86-mswin32-60.gem        112 KB        780        i386        .gem (RubyGem)51Testing软件测试网9L,aDo[&At Pet
    ruby-oci8-1.0.6.gem        116 KB        798        Any        .gem (RubyGem)51Testing软件测试网Ss+L(y;?#T al
    ruby-oci8-1.0.6.tar.gz51Testing软件测试网[jvX1q7w
安装成功后,验证是否连接通过,方法如下:51Testing软件测试网g B;K6E]
#使用的时候一定要加载oci8
`~6Sygmd0require 'oci8'51Testing软件测试网 i2l CthC"Z g6Yp[
#创建连接
[ V.o2~6T0conn = OCI8.new("用户名", "密码","oracle服务器名称")
6oh8~(k X0
_4L]n yH0a =[]51Testing软件测试网kL8N/qL_-B+Oc
#执行查询操作
/rekqt2S.V Z*bGO0cursor = conn.exec('select * from 表名') { |r| a<<r; puts r.join('')}51Testing软件测试网i;?8yJpB-i
51Testing软件测试网5g0E-_'n7IvT
puts r.join('')  主要是输出样式的问题 可以使用  puts r.to_s
4{9T*Imc0l051Testing软件测试网7TvM2v+[ V])]3B{
函数用法如下:
i'G,MJ#r!q01)OCI8.new
2dj0y u&r$i&_[0OCI8.new(userid, password, dbname = nil, privilege = nil)
sN {al0connect to Oracle by userid and password. dbname is the connect string of Net8.
J0f#q5` ]-mI/S0If you need DBA privilege, please set privilege as :SYSDBA or :SYSOPER.51Testing软件测试网+e3E{aq
If the Oracle client is 10g or later, you can use "//hostname_or_ip:port_no/oracle_sid" as dbname.
Ty'iV4`V+`%[051Testing软件测试网H2Fa P5k2] c
# sqlplus scott/tiger
z:j%H~Y9j6h0conn = OCI8.new("scott", "tiger")
}r+s(? ^ ^0
q`!e`Z0# sqlplus scott/tiger@orcl.world51Testing软件测试网_ KM} H0~-Lw d
conn = OCI8.new("scott", "tiger", "orcl.world")
$uZ,Z1mS a M0
Zqj \0w R'tXgL0# sqlplus 'sys/change_on_install as sysdba'
x^n UxwXnk0conn = OCI8.new("sys", "change_on_install", nil, :SYSDBA)51Testing软件测试网 r@JC%V!B\"ub

+kM;WLSO~0# sqlplus scott/tiger@//oracle_db.example.com/XE
u9?h!x p[0conn = OCI8.new("scott", "tiger", "//oracle_db.example.com/XE")51Testing软件测试网4p*x!y4wrBqrg\(n
51Testing软件测试网V.Go#cK3G
2)exec
l0P4vB9T~-fZ [~0
K h9c A:VTr/?0exec(sql, *bindvars)
,nfgyb9L)N qm0
Pr3`4W p0如果你没有配置PL/SQL 没有本地的tnsname 后者不想使用本地的TNSname 就可以直自己去定义个函数:
[dN'z4}B h ?7Q(R0
3k8[&{a$V0def open_connection51Testing软件测试网}M(k7Y"iE$Bj
    tnsnames = '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = somehost.somedomain.com)(PORT = 1521)) (CONNECT_DATA = (SID = some_sid)))'
8q0GN'QlF#A0    connection = OCI8.new('your_username', 'your_password', tnsnames)51Testing软件测试网DC%AS5aY+OX
end51Testing软件测试网_jJ5J!R^

elc3C k"z0至于open_connection函数后面是否需要配置参数,看项目需求了。如果你的项目数据库基本就是那么一个的话 就可以直接在里面定义了  51Testing软件测试网gqD ?%]6YoGM
51Testing软件测试网e x1PCSmt1N%w/i,X
呵呵当然也可以传参数51Testing软件测试网3j'c%VeY)e"GD;z
51Testing软件测试网:`LT3K,K C`
数据库访问地址变化多的话 那就是要传参数了。。。
51Testing软件测试网I!p Bw!xXK+[ ?7s
51Testing软件测试网9af2S2t aK

TAG:

yetties2005的个人空间 yetties2005 发布于2010-01-05 10:17:04
有机会按照你的方法试试~
小不点蜗牛的个人空间 小不点蜗牛 发布于2010-03-01 23:32:06
学习中
e1king发布于2010-05-12 12:00:12
好强大的帖子
sa748发布于2010-08-24 11:02:14
很好的帖子..支持
我来说两句

(可选)

Open Toolbar