2013-05-29 54 views
0

當運行該腳本:錯誤 - 紅寶石OCI8 - (爲0..1 2)的參數數目錯誤

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。任何人都可以協助解決這個問題,或者提供一些關於下面答案的清晰說明

+0

我報告過同樣的問題。但尚未解決。請參閱https://github.com/kubo/ruby-oci8/issues/42 –

回答

1

該問題是由Oracle DLLs體系結構和您的Ruby安裝不匹配導致的,或者您的系統找不到正確的DLL。

下載Oracle Instant Client。它的重要性在於它與Ruby相同,因爲它包含必要的DLL。

某處解壓縮它在你的硬盤驅動器,如:

C:/OracleInstantClient
它也方便,既
/network/admin/sqlnet.ora 
/network/admin/tnsnames.ora
添加到該文件夾​​。

將即時客戶端的位置添加到您的系統路徑。如果您已添加正確的連接信息,您現在應該可以在沒有該錯誤的情況下進行連接。

+0

我已經安裝了Oracle Instant Client(32位版本),但我已經設置了新的系統變量,如下所示: ORA_HOME - C:\ oracle \產品\ 10.2。0 \ client_1 TNS_ADMIN - C:\ oracle \ product \ 10.2.0 \ client_1 \ NETWORK \ ADMIN(其中sqlnet.ora和tnsnames.ora文件都是)。不幸的是,同樣的錯誤正在返回。 – pwl

+0

我有同樣的問題。我發現最好刪除雙變量,並將該位置添加到系統路徑。 – MalSu

+0

系統變量--PATH現在包含:「C:\ Program Files \ Business Objects \ Common \ 3.5 \ bin \ NOTES \」;「C:\ Program Files \ Business Objects \ Common \ 3.5 \ bin \ NOTES \ DATA \」; %SystemRoot%\ system32; C:\ tech \ Ruby193 \ bin; C:\ oracle \ product \ 10.2.0 \ client_1; C:\ oracle \ product \ 10.2.0 \ client_1 \ NETWORK \ ADMIN - 仍然沒有變化。 – pwl

0

這個問題似乎與OCI8沒有任何關係。

由於沒有顯示整個代碼,您在這裏誤導了我們。

從你的錯誤堆棧跟蹤中,我可以告訴你有一個類正在嘗試初始化,但是你已經爲該方法定義了一個參數,並且在創建對象時沒有提及它。

這實際上意味着什麼,你提到了2個參數,它既沒有什麼也沒有隻有一個參數。

如果你創建了一個test.rb文件並粘貼你自己顯示的所有代碼,它是否工作?

1

我得到了相同的錯誤消息,使用依賴於ruby-oci8(dm-oracle-adapter for datamapper)的gem。 重新運行在一個新的環境中安裝按下列指示:

Installing instant client for ruby-oci8

雙重檢查的路徑是正確設置並重新啓動我的紅寶石控制檯。 而且一切都很完美。

在機器上它沒有工作(在錯誤的參數錯誤上面),我爲其他服務安裝了Oracle 64位dll。我的理論是,它與這些dll(Ruby-oci8需要32位DLL)相沖突,儘管路徑中沒有指向這些dll。

另外,如果在運行'gem install ruby​​-oci8'時發現警告「ext/oci8 not found」,讓我爲你節省一些時間。就我而言,這是一隻紅鯡魚,根本不影響寶石的功能。

相關問題