在OCI8插入语句中包含一个变量

时间:2014-03-25 07:46:56

标签: ruby oracle insert oci8

我在oci8插入语句中使用变量很困难。

CSV.foreach('C:/csv_test.csv') do |row|
gender = row[0]
name = row[1]
year = row[2]
command = 'INSERT INTO CSV_TEST VALUES('+gender+','+name+','+year+')'
conn.exec(command)
end

我确保一切正常。性别,名称和年份包含我的数据,插入工作正常。但是我不能在insert语句中调用gender,name和year变量。 我收到的错误是:

column not allowed here

任何帮助将不胜感激。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

最安全的方法是使用bindvariables。这将消除任何逃避错误和安全漏洞。

Oracle有一个decent ruby tutorial用于处理ruby。不幸的是我没有安装Oracle,所以我无法测试这个。我猜测以下内容会起作用:

cursor = conn.parse('INSERT INTO CSV_TEST VALUES(:gender,:name,:year)')
cursor.bind_param(1,String)
cursor.bind_param(2,String)
cursor.bind_param(3,Fixnum) 
CSV.foreach('C:/csv_test.csv') do |row|
    gender = row[0]
    name = row[1]
    year = row[2]
    cursor[1] = gender
    cursor[2] = name
    cursor[3] = year.to_i
    cursor.exec  
end