没有从bash脚本

时间:2016-06-15 15:17:16

标签: bash sh sqlplus

我目前有以下功能,我知道输出的查询在我通过GUI SQL Client手动运行时有效,但它不能用于Bash ... 我尝试了所有我能想到的东西,用Google搜索了我能想到的关键词......

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

在终端命令行中对查询进行手动测试也是如此,然后手动粘贴&lt;&lt; SQL ... SQL块。

请帮助:)

1 个答案:

答案 0 :(得分:0)

该问题原来是一个缺失的COMMIT;声明! 在将来,如果出现奇怪的情况,如果没有错误,但DB中没有明显的情况发生,请让DBA查找表锁!

两次是因为它不能用于丢失COMMIT;在每个更新声明之后。

相关问题