2012-11-05 31 views
2

我有一个perl脚本,它从文本文件中读取行并插入到数据库中。将整数转换为Perl中用于插入数据库的字符串

示例文本文件可以是这样的

country zipcode 
------------------ 
India  712501 
India  00032 

,其中第一行是列名,行表示列值。它以EAV格式存储,列名和列值均为VARCHAR。

现在对于邮政编码00032 perl脚本正在考虑它作为整数和插入查询正在成为 INSERT VALUES(“印度”,00032)//报价不来像Perl是把它当作字符串 所以当它插入插入印度32(将其视为整数)

所以,我可以使它强制字串,所以perl模块把VALUES('印度','00032'),而不是?

+0

那么,为什么不只是将引号添加到您的SQL查询?显示您正在使用的代码的相关部分! – ElPaco

+1

你试过把'00032'引号吗? – cdarke

+0

我的期望是一样的。我做了一个“'”。“$ value”。“'”;但是它正在做'''00032'''。难道我做错了什么 ?? – user1479802

回答

1

Perl只会让它成为一个数字,如果你把它看作一个数字。

$x = "00032"; 
say $x; 
$x += 0; 
say $x; 

输出:

00032 
32 

你并没有显示在您的邮政编码字符串设置的代码,但是,如果你使用$postcode = "00032";代替$postcode = 00032;,那么前导零将被保留。如果该值来自文件,用户输入等,那么将代码中的外部数据移动到程序中会导致它们丢失,但是如果没有看到相关内容,我们就无法说明丢失了什么码。

+0

前导零被保留,因为我没有做任何算术操作,但问题是我有一个插入查询“INSERT INTO LOCATION(columnName,columnValue)VALUES(?,?)所以当这是得到执行它得到INSERT INTO LOCATION (columnName,coloumnValue)VALUES('zipCode',0032)现在在oracle数据库中,如果像这样插入(在0032中没有引号)并且coloumnValue是VARCHAR,那么oracle会在内部将其视为数字并插入zipCode,32 – user1479802

2

在“准备”之前将数据放入查询可能会导致任何数量的问题。使用占位符。这种方式perl知道每个字段中预期的数据类型,并且几乎总是会做正确的事情......

+0

欢迎使用Stack Overflow。这已经是一个很好的答案,但你仍然可以改进它,使它更有帮助。添加一个例子,链接到相关的文档,并解释问题是什么。这样,其他人会更好地理解你的意思,你的答案可以作为未来的参考,你可能会得到更多的赞扬(如果你关心“分数”,那就是)。 – simbabque