私は ruby を初めて使用するので、これがばかげた質問である場合は事前に許してください。私は答えをグーグルで検索しましたが、関連するものは何も表示されず、答えは明らかなはずです。
関数の引数として DBI::DatabaseHandle を渡そうとしていますが、関数を実行すると「引数の数」エラーが発生します。これが私のコードです...
require 'rubygems'
require 'dbi'
class CmsTest
def self.get_dbi_connection(hostname, user, password)
connection = DBI.connect("DBI:OCI8:" + hostname, user, password)
return connection
end
def self.query(connection, sql)
puts connection
puts sql
begin
request = connection.prepare("#{query}")
request.execute
fetched = []
request.fetch do |row|
fetched << row.to_h
end
request.finish
return fetched
rescue DBI::DatabaseError => e
log "An error occurred"
log "Error code: #{e.err}"
log "Error message: #{e.errstr}"
ensure
end
end
end
したがって、これを呼び出す私のコードは次のようになります...
require 'rubygems'
require 'cms_test'
connection = CmsTest.get_dbi_connection('foo', 'bar', 'fubar')
CmsTest.query(connection, "<some sql query>")
したがって、最初の引数は DBI::DatabaseHandle オブジェクトで、2 番目の引数は SQL クエリ文字列です。それを実行すると、これが得られます...
`query': wrong number of arguments (0 for 2) (ArgumentError)
これは、クエリシグネチャに 2 つの引数が含まれており、メソッドに 2 つの引数を渡しているにもかかわらずです。私にとって本当に奇妙なことは、プットの後にメソッド本体のどこかにステートメントを置いて終了すると、メソッドが実際に2つの引数を受け取ったことを示すことです...
#<DBI::DatabaseHandle:0x007fa2a316c9f0>
select licensor_id, licensor_name from cf_licensor
私はこれを理解することはできません。助けてください。