如何从shell脚本调用oracle merge

时间:2016-11-17 01:00:25

标签: oracle shell

我有一个合并到语句中,我想从shell脚本执行它。下面是合并到脚本中。

    MERGE INTO TESTA t USING TESTA_TEMP s ON
(
  t.WAFER_ID = s.WAFER_ID
)
WHEN MATCHED THEN
  UPDATE
  SET
    t.bin1 = s.bin1 WHEN NOT MATCHED THEN
  INSERT
    (
      id,
      bin1,
      wafer_id
    )
    VALUES
    (
      s.id,
      s.bin1,
      s.wafer_id
    );

如果我在`sql plus手动执行它,它工作正常。它显示在控制台的下方。

4 rows merged.

SQL>

但是,当我在下面的shell脚本中移动此代码时,它将无法正常工作。执行shell脚本没有任何反应,控制台只显示shell脚本的执行但永远不会结束。

#!/bin/sh
sqlplus -s user/pwd@sid <<END
SET serveroutput ON;
BEGIN
MERGE INTO TESTA t USING TESTA_TEMP s ON
(
  t.WAFER_ID = s.WAFER_ID
)
WHEN MATCHED THEN
  UPDATE
  SET
    t.bin1 = s.bin1 WHEN NOT MATCHED THEN
  INSERT
    (
      id,
      bin1,
      wafer_id
    )
    VALUES
    (
      s.id,
      s.bin1,
      s.wafer_id
    );
END;
/
END

我还试图用一个简单的惰性语句将这个merge替换为语句,这是有效的。那么在shell脚本中有没有限制调用这样的合并到语句中?我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

尝试以下方法:

#!/bin/sh
sqlplus -s user/pwd@sid <<EOF
set feed on
set pages 0
MERGE INTO TESTA t USING TESTA_TEMP s ON
(
  t.WAFER_ID = s.WAFER_ID
)
WHEN MATCHED THEN
  UPDATE
  SET
    t.bin1 = s.bin1 WHEN NOT MATCHED THEN
  INSERT
    (
      id,
      bin1,
      wafer_id
    )
    VALUES
    (
      s.id,
      s.bin1,
      s.wafer_id
    );
exit
EOF