2014-03-25 2 views
0

oci8 insert 문에서 변수를 사용하는 데 어려움을 겪고 있습니다.은 OCI8 insert 문에 변수를 포함합니다.

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 

나는 모든 것이 잘 작동하는지 확인했습니다. 성별, 이름 및 연도에 내 데이터가 포함되어있어 삽입물이 올바르게 작동합니다. 하지만 성명, 이름 및 년 삽입 내역 변수를 호출 할 수 없습니다. I 받고있어 오류 :

column not allowed here 

어떤 도움을 이해할 수있을 것이다. 미리 감사드립니다.

+0

gender와 name은 SQL 문자열 안에'''로 묶어야한다. –

+0

또한 삽입 할 열을 지정해야합니다. 그렇지 않으면 테이블에 새로운 열이 추가되거나 열의 순서가 변경되는 즉시 삽입이 중단됩니다. – Patru

+0

좀 더 구체적으로 해주실 수 있겠습니까? Egor, 저는 당신의 해결책을 시도했지만 제대로 얻었는지 확신 할 수 없습니다. – user3415827

답변

1

가장 안전한 방법은 bindvariables를 사용하는 것입니다. 이렇게하면 도망가는 버그와 보안 허점을 제거 할 수 있습니다.

오라클은 ruby를 사용하기 위해 decent ruby tutorial을 가지고 있습니다. 불행히도 나는 오라클을 설치하지 않았으므로 이것을 테스트 할 수는 없다. 나는 다음과 같이 작동한다고 추측한다.

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 
+0

감사합니다.이 솔루션이 저에게 효과적이었습니다. – user3415827

관련 문제