1

运行此脚本时:

require 'oci8'

  conn = OCI8.new('username', 'password', 'tnsname')
  cursor = conn.exec('SELECT 1+1 FROM dual')

  while r = cursor.fetch()
    puts r.join(',')
  end

  cursor.close
  conn.logoff

出现以下错误消息:

   C:/tech/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `initi
alize': wrong number of arguments (2 for 0..1) (ArgumentError)
        from C:/tech/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb
:36:in `new'
        from C:/tech/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb
:36:in `require'
        from C:/tech/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb
:36:in `require'
        from C:/tech/Ruby193/lib/ruby/gems/1.9.1/gems/ruby-oci8-2.1.5-x86-mingw3
2/lib/oci8.rb:81:in `<top (required)>'
        from C:/tech/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb
:60:in `require'
        from C:/tech/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb
:60:in `rescue in require'
        from C:/tech/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb
:35:in `require'
        from u:/Ruby/test_oci_connect.rb:1:in `<main>'

我可以在 SQLPLUS 中使用这些凭据,并且安装了 gems 和 devkit。任何人都可以协助解决这个问题或就下面的答案提供一些澄清吗?

4

3 回答 3

1

我收到了同样的错误消息,使用依赖于 ruby​​-oci8 的 gem(用于 datamapper 的 dm-oracle-adapter)。按照这些说明在全新环境中重新运行安装:

为 ruby​​-oci8 安装即时客户端

仔细检查路径是否设置正确并重新启动我的 ruby​​ 控制台。一切都很完美。

在它不起作用的机器上(上面的参数错误错误),我为其他一些服务安装了 Oracle 64 位 dll。我的理论是它与这些 dll 冲突(Ruby-oci8 需要 32 位 DLL),即使路径中没有任何东西指向这些。

此外,如果您在运行“gem install ruby​​-oci8”时收到警告“ext/oci8 not found”,让我为您节省一些时间。就我而言,这是一条红鲱鱼,根本不影响宝石的功能。

于 2013-11-28T22:44:09.557 回答
1

该问题是由于 Oracle DLL 体系结构与您的 Ruby 安装不匹配,或者您的系统未找到正确的 DLL 造成的。

下载Oracle 即时客户端。重要的是它与您的 Ruby 所在的架构相同,因为它包含必要的 DLL。

将其解压缩到硬盘上的某个位置,例如:

C:/OracleInstantClient
同时添加也很方便
/network/admin/sqlnet.ora
/network/admin/tnsnames.ora
到那个文件夹。

将 Instant Client 的位置添加到您的系统路径中。如果您添加了正确的连接信息,您现在应该能够在没有该错误的情况下进行连接。

于 2013-05-30T15:03:31.270 回答
0

这个问题似乎根本与 OCI8 无关。

您在这里没有显示整个代码,有点误导我们。

从您的错误堆栈跟踪中,我可以看出您有一个正在尝试初始化的类,但是您已经为该方法定义了一个参数,并且在创建对象时没有提及它。

这真正的意思是你提到了 2 个参数,它不期望任何参数或只期望一个参数。

如果您创建一个 test.rb 字段并粘贴您首先向我们展示的代码,它是否有效?

于 2013-08-07T17:03:25.407 回答