My code is as below-
set define on;
set spool on;
set SQLFORMAT csv;
set fpath = &folderpath;
spool #fpath/mycsvfile1.csv
select * from I_PTY;
spool off;
spool #fpath/mycsvfile2.csv
select * from I_LEG;
spool off;
I want to pass folderpath value as 'C:\Documents\Spool'.
And use this value to pass to the variable fpath, so that the value passed in line5 equals to 'C:\Documents\Spool\mycsvfile1.csv'
However, I am getting error as: Unknown set option "fpath".
Where am I getting wrong? Kindly assist.
You could do this in two ways:
Just use &&folderpath in the spool commands directly, e.g.:
set spool on;
set sqlformat csv;
spool &&folderpath/mycsvfile1.csv
select * from i_pty;
spool off;
spool &&folderpath/mycsvfile2.csv
select * from i_leg;
spool off;
Or use DEFINE to assign the value (which you'd then have to reference in the same way as the previous answer, so you don't gain anything, really...):
set spool on;
set sqlformat csv;
define fpath = &folderpath
spool &&fpath/mycsvfile1.csv
select * from i_pty;
spool off;
spool &&fpath/mycsvfile2.csv
select * from i_leg;
spool off;
Using the double ampersand stops Oracle from prompting you for a value each time you reference the same substitution variable. If you want your next script or next run through of this script to be prompted again for the value of folderpath, then you will need to include undefine folderpath (and maybe undefine fpath) at the end of the script.
Also, you may want to include set verify off at the top of your script.
N.B. you were using # in your spool file name - that has no place there. It's only used when you're running a script.
that "set" should probably be a "define"
Try:
spool &folderpath./mycsvfile2.csv
Example from my code:
spool c:\temp\SQL_Details_Report_&FILE_NAME..html
Related
I need to export data from my Oracle table to a csv file.
Below is the code that I am running under SQL Developer :
set termout off
set serveroutput off
set feedback off
set colsep ';'
set lines 100000
set pagesize 0
set echo off
set feedback off
spool D:\myfile.csv
select *
from Employee;
spool off
However the output of the above code in the csv file is :
select *
from Employee;
I want the data of the Employee table to be in the csv, not the sql statement.
Any idea what might be wrong in the above code? Thanks.
save your sql in a file emp.sql in a directory D:\scripts and use like below;
set term off
set feed off
spool D:\myfile.csv
#D:\scripts\emp.sql
spool off
You're in SQL Developer, so you don't have to write so much code.
SET SQLFORMAT csv
SPOOL C:\your_file.csv
select * from whatever;
spool off
Run with F5
I have used these commands to align the output properly.But the problem still exists. Can someone please help me? I have done a lot of research but couldn't find a proper answer.
spool on
set verify off;
set feedback off;
set linesize 3000;
set pagesize 50000;
set wrap on;
set long 100000;
set longchunksize 1000000;
set colsep '|';
spool F:\data\tabledata\products.txt;
set trimspool on;
select * from products;
spool off;
in my image one data column which is CLOB data type is dividing into two rows.
I think the problem is in column datatype length, if there you have, for example, Varchar2 (100) and is in that column you have data with length less than 100 so the Trimspool ON will not trim datatype length - that's the problem you reached (I don't know whether it's logically like this, but really it's happening).
The easy way to do your query output by concatenation, try like this:
spool F:\data\tabledata\products.txt;
SELECT col1 || '|' || col2 || '|' || col3
FROM Products;
spool off;
The settings for large object types BLOB and CLOB are different from ordinary text fields. Please include the following settings before the query and see if it resolves the problem:
set long 500
set longchunksize 500
This blog post discusses effects of long and longchunksize.
is it possible to export the data from a query using a script alone? i like to run the query and have the data exported automatically without the manual process of exporting the data into .cvs.
I've tried SPOOL but it doesn't export the fetched data, just the code itself.
Thanks
See below , replace table> with your table name and conditions> with your where conditions
set colsep '|'
set echo off
set feedback off
set linesize 1000
set pagesize 0
set sqlprompt ''
set trimspool on
set headsep off
spool output.dat
select '|', <table>.*, '|'
from <table>
where <conditions>
spool off
I have a sql file update_qde.sql
which contains the following code
UPDATE profile_const
set parameter_value = '04_2015'
where profile_name = 'MIDAS_MTH_ALL_Panels'
and parameter_name = 'PERIODS_TO';
commit;
quit;
I have another batch file test.bat
I want to pass the parameter_value as a variable from a batch file using batch command.
Could you please show me any way to do this?
Use SQLCMD variables, so change test.bat to call SQLCMD rather than ISQL
#echo off
sqlcmd -E -S myserver -i update_qde.sql -v PARM1=2015-01-01
Change the SQL to use the $() notation
UPDATE profile_const
SET parameter_value = '$(PARM1)'
WHERE profile_name = 'MIDAS_MTH_ALL_Panels'
AND parameter_name = 'PERIODS_TO';
COMMIT;
Its pretty simple.
Create a batch file with the below 3 line of code. To create a batch file, create a new .txt file, save the below code inside the file and rename the extension of this file from .txt to .bat.
In the 2nd line below code value1 is the variable name which holds the value you need to update. Third line of code is where you will pass this variable value to the sql file.
#echo off
SET value1=04_2015
sqlplus db_username/db_password#db_schema #sample.sql %value1%
The code for sample.sql is given below. The &&1 in the below code accepts the parameter that you are sending from the batch file and will be stored in the variable param1. Later you can use this param1 variable inside the BEGIN block to be used for UPDATE query.
SET SERVEROUTPUT ON
SET DEFINE ON
SET NEWPAGE 0
SET SPACE 0
SET LINESIZE 200
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET MARKUP HTML OFF SPOOL OFF
SET term off
SET verify off
set echo off
SPOOL "C:\Test\Logfile.log" append;
var param1 VARCHAR2(20);
BEGIN
:param1 := '&&1';
END;
/
SET DEFINE OFF
BEGIN
UPDATE profile_const
set parameter_value = :param1
where profile_name = 'MIDAS_MTH_ALL_Panels'
and parameter_name = 'PERIODS_TO';
commit;
END;
/
quit;
/
SPOOL OFF;
SET DEFINE ON
SET SERVEROUTPUT OFF
I verified the above code, which works fine.
I have to run several queries on an oracle 11g database, within SQLDeveloper 3.1.
For example:
select * from product;
select * from customer;
select * from prices;
At the moment I am exporting the resultsets "per hand", I simply right-clickonto the result and thenexport` it.
I would like to automatically save the resultset of each query in a specific folder.
Any recommendation how I could do that?
UPDATE
I tried using the csv and als the txt extesion of testFile:
spool C:\Users\User\Desktop\testFile.csv --I tried also .txt extension here!!!
set colsep ';'
select * from product;
spool off;
However, when I open the file I get for csv and txt the following result:
> set colsep '
> select * from product
I appreciate your replies!
set echo off
set feedback off
set linesize 1000
set pagesize 0
set sqlprompt ''
set trimspool on
spool output.csv
select columnA || ',' || columnB || ',' || ......
from table
where ...
spool off;
exit 0;
Then create a shell script that calls the sql file
sqlplus >/dev/null 2>&1 "user/pass#DATABASE" << EOF
whenever sqlerror exit 1
#file.sql
EOF
UPDATE just saw you are on windows, same principle still applies, you probably will need to use PowerShell
You can use Spool, http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12043.htm
spool OutFile.txt
select row1||','||row2... from product; --format you prefer
spool off;