2015-02-23 34 views
-1

加载uniq的命令的输出我有一个文件,下面的数据:DB2无法在Linux

<row num="1"> 
    <INN>20003943 
    </INN> 
</row> 

<row num="2"> 
    <INN>20003943 
    </INN> 
</row> 

<row num="3"> 
    <INN>20003943 
    </INN> 
</row> 

注意INN值始终是相同的:20003943.因此uniq的必须返回一个值应该进入INN专栏。

我有下面的命令来获取INN值:

INN=$(grep "<INN>" "$file" |cut -f2 -d'>'|uniq) 

INN变量越来越正确的值我想要的。我通过做echo $ INN来测试。

我有以下模式的DB2表:

create table Data (INN VARCHAR(50) NOT NULL, ID VARCHAR(30) NOT NULL) 

现在我有一个低于DB2插入命令:

db2 -v "INSERT INTO Data(INN, ID) values ('"$INN"','"$ID"')" 

当我运行它,我只看到ID列。 INN列是空的。正确的上面的插入命令echo声明正确输出INN值。

这是日志DB2 INSERT命令:

','4')ta(INN,ID) values ('20003943 
    DB20000I The SQL command completed successfully. 

以上日志看起来可疑..想知道是否有一些新的行字符或其他一些事情

我第二次做的事:

INN=201090909 

,然后我又做了DB2插入:

db2 "INSERT INTO Data(INN, ID) values ('"$INN"','"$ID"')" 

现在我看到两列填充。

想知道它是否与grep命令返回的某些输出数据类型有关。

UPDATE

当我做

db2 "select * from Data" INN column appeared empty 

,但是当我做了

db2 "select substr(INN,1,10),ID from Data" i see the INN column populated 
+0

仅仅因为$ IN具有正确的值,并不意味着您在查询中正确使用它。你很容易受到[sql注入攻击](http://bobby-tables.com),而'IN'也是一个保留字。你可能想检查它是否需要分隔。 – 2015-02-23 20:23:11

+0

我将该变量重命名为INN,结果仍然相同。 – javaMan 2015-02-23 20:30:14

+0

你告诉db2你正在处理哪个数据库?你在那里得到的是一张桌子的名字,这是没有多大用处。 – 2015-02-23 20:31:23

回答

1

传递变量到DB2 CLP之前剪掉任何前导空格。在确认一切正常工作之前,请保留DB2 CLP上的详细选项。

INN=`echo $INN` 
ID=`echo $ID` 
db2 -v "INSERT INTO data(inn, id) VALUES('$INN', '$ID')" 
+0

尝试了你的建议..没有运气。我更新了我的问题。请检查 – javaMan 2015-02-24 21:13:23

+1

我改变了grep命令,如下所示:$(grep -m1“”“$ file”| cut -f2 -d'>'| tr -d'\ 040 \ 011 \ 012 \ 015') 。我使用上面的tr命令删除了所有空格,制表符,换行符。 – javaMan 2015-02-24 21:42:06