【问题标题】:Casting of Integer to String in perl for DB insertion在perl中将整数转换为字符串以进行数据库插入
【发布时间】:2012-10-25 07:30:55
【问题描述】:

我有一个 perl 脚本,它从文本文件中读取行并插入到数据库中。

示例文本文件可能如下所示

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

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

现在对于 zipcode 00032,perl 脚本将其视为 Integer 并且插入查询正在变为 INSERT VALUES('India',00032) //引用没有出现,因为 perl 将其视为字符串 所以在插入时插入 India 32(将其视为整数)

那么我可以强制将其设为字符串,以便 perl 模块将 VALUES('India','00032') 改为吗??

【问题讨论】:

  • 那么,为什么不在 SQL 查询中添加引号呢?显示您正在使用的代码的相关部分!
  • 您是否尝试在“00032”周围加上引号?
  • 我也预料到了。我做了一个 "'"."$value"."'";但后来它正在做'''00032'''。我做错了吗??
  • 为什么不这样:$str = "VALUES ('$country', '$code')";。但是,如果您显示您的代码,则更好的是,您可能希望使用prepare 进行 SQL 查询。

标签: database string perl casting integer


【解决方案1】:

如果你把它当作一个数字,Perl 只会把它变成一个数字。

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

输出:

00032
32

您没有显示设置邮政编码字符串的代码,但是,如果您使用$postcode = "00032"; 而不是$postcode = 00032;,则将保留前导零。如果值来自文件、用户输入等,那么将外部数据移动到程序中的代码中的某些内容会导致它们丢失,但我们不能在没有看到相关信息的情况下说出究竟是什么丢失了它代码。

【讨论】:

  • 前导零被保留,因为我没有做任何算术运算,但问题是我有一个插入查询“INSERT INTO LOCATION(columnName,columnValue) VALUES(?,?) 所以当这得到执行它正在获取 INSERT INTO LOCATION(columnName,coloumnValue) VALUES('zipCode',0032) 现在在 oracle db 中,如果您像这样插入(在 0032 中不带引号)并且 coloumnValue 是 VARCHAR,那么 oracle 在内部将其视为数字并插入 zipCode, 32
【解决方案2】:

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

【讨论】:

  • 欢迎来到 Stack Overflow。这已经是一个很好的答案,但是您仍然可以对其进行改进以使其更有帮助。添加一个示例,链接到相关文档并解释问题所在。这样,其他人会更好地理解你的意思,你的答案可以作为未来的参考,你可能会得到更多的支持(如果你关心“分数”的话)。
猜你喜欢
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多