Append to spool file Oracle - sql

I have one script file called Test.sql in D:\Scripts folder and the content of the file is given below
SET SERVEROUTPUT ON
SET DEFINE OFF
SPOOL Test.log;
SELECT USER_NAME FROM TUP_USER WHERE USER_ID=1432;
SPOOL OFF;
SET DEFINE ON
SET SERVEROUTPUT OFF
I normally execute this by opening command prompt, locate to D:\Scripts and give sqlplus username/password#Database and then give #test.sql to execute this and it will generate a log file called Test.log
Every time I execute this, it replaces the old file with the new data. I need to append new data to the file using spool. Is there a way to do that?
Any help would be appreciated. Thanks in advance.

Finally got the solution for this!
Add append after Test.log
SET SERVEROUTPUT ON
SET DEFINE OFF
SPOOL Test.log append;
SELECT USER_NAME FROM TUP_USER WHERE USER_ID=1432;
SPOOL OFF;
SET DEFINE ON
SET SERVEROUTPUT OFF

Just add append when you're writing the spool query:
spool d:\lab1.txt append;

Related

How to have spool file display result of query? (Having trouble)

I am trying to export a .csv file (spool file) that has the result set of a very simple query that I am running in Oracle SQL Developer. The spool file generates; however, only the query is displayed (select * FROM TABLE) with no result set. What am i doing wrong? The command I am using is as follows:
spool "C:\Temp\test.csv"
select * from table;
spool off;
Thanks in advance
Use below commands to get the output of the query in spool file
SET SERVEROUTPUT ON
SET ECHO ON
After executing the select query don't forget to spool off.
So i did some more research / experimenting and i found that the following works:
I first created a sql file with the appropriate sql script /command and placed it in a directory (C:\TEMP). Then i ran the following command:
SET NEWPAGE 0
SET SPACE 0
SET PAGESIZE 0
SET FEEDBACK OFF
SET HEADING OFF
set verify off
SET ECHO OFF
spool "c:\Temp\test.csv"
#c:\Temp\test.sql as script(F5);
spool off
However now i run into a road block where oracle throws me an error saying that only 5,000 rows are currently supposed in script results...
Edit: I created the above code as a .sql file (test2.sql) and ran the below script. But am still encountering the 5000 row error:
SET NEWPAGE 0
SET SPACE 0
SET PAGESIZE 0
SET FEEDBACK OFF
SET HEADING OFF
set verify off
SET ECHO OFF
spool "c:\Temp\test2.csv"
#c:\Temp\test2.sql as script(F5);
spool off
The following worked when I tried to increase the limit: I went up to my sql developer tool bar ( tools > prefs > database > worksheet) and was able to change the maximum output limit.

How to spool query results in oracle

I am trying to print query result. Here is the Oracle SQL Script:
set linesize 32767;
set pagesize 0;
set newpage 0;
set space 0;
set echo off;
set feedback off;
set verify off;
set heading off;
set sqlprompt '';
set trimspool on;
set headsep off;
spool C:\asd.tmp
SELECT PROCESSNAME FROM ACTIVEPROCESSLIST ORDER BY PROCESSID;
spool off;
But the content of "asd.tmp" is that:
SELECT PROCESSNAME FROM ACTIVEPROCESSLIST ORDER BY PROCESSID
It prints just query text, not the result of it. How can I spool query results?
NOTE: I am using "sqldeveloper-4.0.3.16.84-x64" and it runned as administrator. Also setting properties given above may be non-sense. I have tried some combinations of them and executing just spool commands without settings.
Any other solution that I can execute in C++ is proper for me too.
you can use command line/sqlplus. try save your script as a file, then in command line:
sqlplus -s [username]/[password]#[sid] #file_path > output.txt
There is an alternative way in that link. I recommend it. It doesn't work as fast as spool solution but it works in my project at least.
There was a problem about the alternative way but the answer in this stackoverflow question works fine. I am using it now.

Run several sql scripts and spool output in ubuntu

Im a teaching assistant for a databases course in my university. I have the assignments of all of the students. Each assignment has a file 'queries.sql'. Is there a way to run all these scripts at once and spool the output to its own output file in ubuntu?
you need look into SQLPLus documentation
see for SqlPlus command line parameters serveroutput and spool
2 exampleы of run sql files from sqplus
start.sql - the file that start student1.sql and student2.sql
student1.sql - file for student 1
student2.sql - file for student 2
to run the example you need run SqlPlus sqlplus myuser/mypassword#myserver #start.sql
the script files below
1 example start.sql spools each file into separate output
set serveroutput on
spool students1.out
##.\student1.sql
spool students2.out
##.\student2.sql
spool off
set serveroutput off
exit
2nd example start.sql spool all files into one output file
set serveroutput on
spool students.out
##.\student1.sql
##.\student2.sql
spool off
set serveroutput off
exit
students files - just simple "hello I'm student" scripts
student1.sql
begin
dbms_output.put_line('hello I`m student1');
end;
/
student1.sq2
begin
dbms_output.put_line('hello I`m student1');
end;
/

Deleting last blank lines in SPOOL with DBMS_OUTPUT

Using SPOOL and PL/SQL in SQL Developer (I must not use SQL Plus via command line) I need to create a file with some info. The problem is that at the end of the file I'm getting 2 blank lines with are causing me trouble when importing this file somewhere else.
Using the next code (called externally to avoid sql statements):
SET SERVEROUTPUT ON;
SET TERMOUT OFF;
SET HEAD OFF;
SET VERIFY OFF;
SET FEEDBACK OFF;
SPOOL 'C:\myfile.csv'
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello');
END;
/
SPOOL OFF;
I'm getting:
Hello
(blank line)
(blank line)
I can handle having 0 or 1 blank line, but not 2. I have tried SET TRIMSPOOL ON but SQL Developer skips this command and others too (TRIM, TRIMS, SQLBLANKLINES)
It really does look like it is not possible to remove that extra CRLF in SQL Developer. I can only suggest using SQLPlus which doesn't add that extra CRLF. If you absolutely can't use that, consider using sed to strip that last line.
For any further discussion and to save future readers' time, here are all the options I tried without success:
SET SERVEROUTPUT ON TERMOUT OFF HEAD OFF FEEDBACK OFF VERIFY OFF
SET ECHO OFF NEWPAGE NONE PAGESIZE 0 RECSEP OFF --TRIMSPOOL ON
SPOOL 'myfile.txt'
--EXEC DBMS_OUTPUT.PUT_LINE('Hello')
SELECT 'Hello' FROM DUAL;
SPOOL OFF
ED myfile.txt

I want to copy the output of unix and sqlplus into a file

I am using Solaris. I have to log into sql plus and run some queries, which give a huge result set.
I want to copy all that into a file. Is there any command for it in unix or sqlplus ?
Use the SPOOL command:
SQL> SPOOL /opt/output
SQL> SELECT ...
SQL> SPOOL OFF
setup Oracle environment
(there are ways around specifying username/password on the command line - not the best way especially when other users can 'ps' on the server and see your password)
sqlplus -s username/password <<-!!
set trimspool on trimout on pages 0 feedback off linesize 1000 echo off verify off
spool file.out
select sysdate from dual;
exit
!!
If you are on the command line then just use the > and 2> to redirect stdout and stderr respectively to log files
func > out.log