Perl:DBD :: ODBC :: st执行失败

时间:2015-04-06 07:56:57

标签: perl

我收到以下错误:

Use of uninitialized value $_ in substitution (s///) at test.pl line 29, <$fh> line 2.
Use of uninitialized value $col in split at test.pl line 40, <$fh> line 2.
Use of uninitialized value $k in hash element at test.pl line 41, <$fh> line 2.
DBD::ODBC::st execute failed: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near '
,'. (SQL-42000)
[Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared. (SQL-42000) at da
ve.pl line 63, <$fh> line 2.
Can't execute statement: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near ','. (
SQL-42000)
[Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared. (SQL-42000) at te
st.pl line 63, <$fh> line 2.

我无法弄清楚如何解决这个问题。

我的code is here包含输入数据。

或者此任务的任何其他更好的解决方案(从输入文件读取数据,操作数据并将相应列中的值插入数据库表中。)

2 个答案:

答案 0 :(得分:1)

SQL INSERT INTO语法是:

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

您收到Incorrect syntax near the keyword 'VALUES'因为忘记在列名后关闭)中的括号$sql

试试这个:

my $sql = 'INSERT INTO table_name (' .
            join(', ', keys %data) .
            ') VALUES (' .
            join(', ', map { qq['$_'] } values %data) .
            ')';

或者更好的是,为方便和安全使用RaiseError,为了正确性和安全性使用identifier quoting,为了效率和安全使用query parameterization,或许do()而不是other placeholder syntax {1}} / prepare

execute

DBD :: ODBC也支持{{3}}。

答案 1 :(得分:0)

  

我无法弄清楚如何解决这个问题。

在第27行,添加

warn "[$_]";

了解为什么parse_line会返回undef

此外,由于某些字符串似乎被引用,因此最好切换为quotewords而不是parse_line