Mark Ainsworth
Mark Ainsworth

Reputation: 859

SQLPLUS embedded in linux script does not work as expected

I have the following script segment in a Linux script:

sqlplus /
<<QUERY_1
                    UPDATE BATCH_FILE SET BATCH_ID = 0 WHERE BATCH_ID  = -1;
                    COMMIT;
                    exit

QUERY_1

I am expecting the update to occur and the script to exit sqlplus

What actually happens is the query is not executed, and the script exits leaving sqlplus logged into my database with a SQL> prompt. I can execute the statements from the prompt, but of course, that is not what I want to do.

My current version of Oracle is 12.2.0.1

Upvotes: 0

Views: 252

Answers (1)

wildplasser
wildplasser

Reputation: 44220

The output of the HERE-document is intended for the std input of sqlplus, but for the shell a command should be on a single line. Adding a backslash will make the shell ignore the line-end, combining the two physical lines into one logical line:


sqlplus / \
<<QUERY_1
                    UPDATE BATCH_FILE SET BATCH_ID = 0 WHERE BATCH_ID  = -1;
                    COMMIT;
                    exit

QUERY_1

Or just:


sqlplus / <<QUERY_1
                    UPDATE BATCH_FILE SET BATCH_ID = 0 WHERE BATCH_ID  = -1;
                    COMMIT;
                    exit

QUERY_1

Upvotes: 1

Related Questions