我收到以下错误:
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包含输入数据。
或者此任务的任何其他更好的解决方案(从输入文件读取数据,操作数据并将相应列中的值插入数据库表中。)
答案 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
。