在导入带有某个“batchnumber”标记的xml文件之前,查询Oracle表中是否存在“batchnumber”

时间:2012-10-17 10:45:18

标签: xml linux oracle shell import

我正在为一个项目做一个很好的谜题,也许你们中的一些人已经做过类似的事情:

它需要是一个Linux shell脚本

以下是需要采取的步骤:

  1. xml文件放在linux数据库服务器(oracle)

  2. 验证了xml文件(我使用过xmllint,这有效)

  3. xml文件包含一个batchnumber,在导入之前,不允许将batchnumber存在于数据库中,因此如何将文件中的值传递给sql查询(可能带有if ..那么...... else子句?)

  4. 先谢谢你的帮助!!

1 个答案:

答案 0 :(得分:0)

如果脚本用户有权访问sqlplus,您可以从shell脚本执行它并解析结果。

<强> batchnum.sql

--  ==== batchnum.sql ===============
var bnum varchar2(32)
exec :bnum=&1
select count(*) from tablename where batchnumber=':bnum';
-- ========================

使用以下命令在shell脚本中执行命令:

value=`sqlplus uname/pass @batchnum.sql 12345`

然后使用$value或类似内容解析grep

注意:

  • 未经测试的代码;我无法保证var / exec块上的语法
  • 我认为batchnumvarchar2(32);你会想根据你的实际类型来定义它
  • var / exec构造有点麻烦,但使用绑定变量。这允许Oracle的SQL解析器缓存查询,这将是多个连续调用的性能增益
  • 无异常处理;留给你作为练习:)
  • 不验证输入参数;也留给你练习。请务必以具有最小权限的用户身份调用此