传递带引号的值sql加参数

时间:2018-07-09 21:45:41

标签: sql bash shell sqlplus

我有一个shell脚本script.sh和一个SQL脚本Modify_database.sql

在script.sh中,我使用:p启动带有某些参数的sql脚本。

sqlplus user/password ... @modify_database.sql « param_id » « param_newValue »

然后在sql脚本中,我得到的参数值是:

UPDATE T_TEST SET C1 = &param_newValue WHERE ID = &param_id

但是我对«param_newValue»参数有很多疑问。 实际上,此参数可能包含一些空格,斜杠,单引号和双引号字符。 例如:“可重复使用”的飞行员航空器

我有一堆要更新的值。 每个新值都存储在一个txt文件中,如下所示:

id;value
1; L’avion du pilote était surnommé le « Redoutable »
2; Another example of a « test » that’s it 

我该如何将该参数传递给sqlplus并像这样设置值?引用的部分让我很难受:/

编辑:

例如,在输入文件中,我有: 123 ;;;“ aaaa / vvvv / COD_039 / fff = Avion d'office”;“ aaaa / vvvv / COD_039 / fff = Hello d'orien”;

我得到这一行,我执行了cut命令来获取第一列(ID),第四列(要替换)和第五列(替换)。

我有一个XML节点,该节点包含第4列文本,并且需要替换为第5列内容。

所以我这样做

sqlplus -s $DBUSER/$DBPASSWORD@$DBHOST:$DBPORT/$DBSCHEMA @majConfXML.sql "$id" "$newcode"

update T_TEST set XML = updatexml(xmltype(XML_CONF),
'//A[@name="XXX"]//B[@name="YYY"]//pkValue','&2').getClobVal()

但是在参数中,有一些引号。 因此,当我使用“&2”发出更新请求时,请求正在运行,但无法正常工作。 如何将参数值转义/传递到updateXML请求中?

谢谢

1 个答案:

答案 0 :(得分:0)

最后,在sqlplus调用之前,我在bash脚本中发现了问题。 实际上,我使用xargs命令来解释简单的引用。我只需在输入文件中用斜杠和引号在每个字符串周围加上双引号即可。

接下来,在调用sqlplus之前,我用“”(引号)替换所有“”(引号)