我有一个合并到语句中,我想从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脚本中有没有限制调用这样的合并到语句中?我的代码出了什么问题?
答案 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