SQL 查询未从 bash 脚本执行
SQL query not being executed from bash script
我目前有以下功能,我知道当我通过 GUI SQL 客户端手动 运行 时输出的查询有效,但它在 Bash 中不起作用...
我尝试了所有我能想到的方法,并用我能想到的关键字进行了谷歌搜索..
AssignChunksToDocs()
{
TEST="set heading off;
set trim on;
DECLARE
i number;
BEGIN
i := 1;
while i<=$CHUNK_AMOUNT LOOP
UPDATE TABLE T SET T.CHUNK_NUM = i
WHERE T.CHUNK_NUM IS NULL
AND ROWNUM <=$DOCS_PER_CHUNK;
i := i+1;
END LOOP;
i := i-1;
-- Deal with the remainder
UPDATE TABLE T SET T.CHUNK_NUM = i
WHERE T.CHUNK_NUM IS NULL;
end;"
sqlplus -s $CONSTR<<ENDOFSQL
set heading off;
set trim on;
DECLARE
i number;
BEGIN
i := 1;
while i<=$CHUNK_AMOUNT LOOP
UPDATE TABLE T SET T.CHUNK_NUM = i
WHERE T.CHUNK_NUM IS NULL
AND ROWNUM <=$DOCS_PER_CHUNK;
i := i+1;
END LOOP;
i := i-1;
-- Deal with the remainder
UPDATE TABLE T SET T.CHUNK_NUM = i
WHERE T.CHUNK_NUM IS NULL;
end;
ENDOFSQL
ERRORCODE=$?
if [ $ERRORCODE != 0 ]
then
echo "********************"
echo "ERROR: The SQL Plus Command Failed. ErrorCode: $ERRORCODE"
else
echo "********************"
echo "SQL Plus Successfully Ran. ErrorCode: $ERRORCODE"
fi
}
当我 运行 它时(在 shebang 中使用 -x),我得到以下片段:
+ AssignChunksToDocs
+ TEST='set heading off;
set trim on;
DECLARE
i number;
BEGIN
i := 1;
while i<=
64 LOOP
UPDATE TABLE T SET T.CHUNK_NUM = i
WHERE T.CHUNK_NUM IS NULL
AND ROWNUM <=3;
i := i+1;
END LOOP;
i := i-1;
-- Deal with the remainder
UPDATE TABLE T SET T.CHUNK_NUM = i
WHERE T.CHUNK_NUM IS NULL;
end;'
+ sqlplus -s dbuser/dbpass@hostname/sidname
+ ERRORCODE=0
+ '[' 0 '!=' 0 ']'
+ echo '********************'
********************
+ echo 'SQL Plus Successfully Ran. ErrorCode: 0'
SQL Plus Successfully Ran. ErrorCode: 0
在终端命令行中手动测试查询,然后手动粘贴 << SQL ... SQL 块也是如此。
请帮忙:)
问题原来是缺少 COMMIT;
语句!
将来,如果出现类似没有错误但数据库中没有明显发生的奇怪情况,请让 DBA 查找 table 锁!
它们两次是导致它因缺少 COMMIT 而不起作用的原因;在每个更新语句之后。
我目前有以下功能,我知道当我通过 GUI SQL 客户端手动 运行 时输出的查询有效,但它在 Bash 中不起作用... 我尝试了所有我能想到的方法,并用我能想到的关键字进行了谷歌搜索..
AssignChunksToDocs()
{
TEST="set heading off;
set trim on;
DECLARE
i number;
BEGIN
i := 1;
while i<=$CHUNK_AMOUNT LOOP
UPDATE TABLE T SET T.CHUNK_NUM = i
WHERE T.CHUNK_NUM IS NULL
AND ROWNUM <=$DOCS_PER_CHUNK;
i := i+1;
END LOOP;
i := i-1;
-- Deal with the remainder
UPDATE TABLE T SET T.CHUNK_NUM = i
WHERE T.CHUNK_NUM IS NULL;
end;"
sqlplus -s $CONSTR<<ENDOFSQL
set heading off;
set trim on;
DECLARE
i number;
BEGIN
i := 1;
while i<=$CHUNK_AMOUNT LOOP
UPDATE TABLE T SET T.CHUNK_NUM = i
WHERE T.CHUNK_NUM IS NULL
AND ROWNUM <=$DOCS_PER_CHUNK;
i := i+1;
END LOOP;
i := i-1;
-- Deal with the remainder
UPDATE TABLE T SET T.CHUNK_NUM = i
WHERE T.CHUNK_NUM IS NULL;
end;
ENDOFSQL
ERRORCODE=$?
if [ $ERRORCODE != 0 ]
then
echo "********************"
echo "ERROR: The SQL Plus Command Failed. ErrorCode: $ERRORCODE"
else
echo "********************"
echo "SQL Plus Successfully Ran. ErrorCode: $ERRORCODE"
fi
}
当我 运行 它时(在 shebang 中使用 -x),我得到以下片段:
+ AssignChunksToDocs
+ TEST='set heading off;
set trim on;
DECLARE
i number;
BEGIN
i := 1;
while i<=
64 LOOP
UPDATE TABLE T SET T.CHUNK_NUM = i
WHERE T.CHUNK_NUM IS NULL
AND ROWNUM <=3;
i := i+1;
END LOOP;
i := i-1;
-- Deal with the remainder
UPDATE TABLE T SET T.CHUNK_NUM = i
WHERE T.CHUNK_NUM IS NULL;
end;'
+ sqlplus -s dbuser/dbpass@hostname/sidname
+ ERRORCODE=0
+ '[' 0 '!=' 0 ']'
+ echo '********************'
********************
+ echo 'SQL Plus Successfully Ran. ErrorCode: 0'
SQL Plus Successfully Ran. ErrorCode: 0
在终端命令行中手动测试查询,然后手动粘贴 << SQL ... SQL 块也是如此。
请帮忙:)
问题原来是缺少 COMMIT;
语句!
将来,如果出现类似没有错误但数据库中没有明显发生的奇怪情况,请让 DBA 查找 table 锁!
它们两次是导致它因缺少 COMMIT 而不起作用的原因;在每个更新语句之后。