I'm new to batch files scripting.
All I want is creating a batch file that is calling SQL file and store results in CSV file .
Can anyone help me, your help is highly appreciated.
I am using Oracle database (version : oracle 11g)
Update:
Set cn = CreateObject("ADODB.Connection")
cn.ConnectionString = "Driver={Microsoft ODBC for Oracle};
CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<host>)(PORT=<port>))(CONNECT_DATA=(SERVICE_NAME=whipripa)));
uid=<uid>;pwd=<pswd>;"
While executing above query, it's not giving any errors, but still it's not connecting to Database either. Can someone tell me how to go ahead.
Here is a template of SQL Plus Script:
set colsep ,
set headsep off
set pagesize 0
set trimspool on
set linesize 2
set numwidth 5
spool books.csv
SELECT
title,
primary_author
FROM
books;
spool off
you’ll simply issue the sqlplus command from your shell:
sqlplus user/pwd#mydb #query.sql
Related
I am automating a process wherein I run a SQL query through batch and the output is spooled into a csv file.
Requirement: Each field of csv file should have double quotes.
Ex :
Currently the output is PROJ_SHORT_NAME,WBS_SHORT_NAME
CGL1,CGL1
Required output is "PROJ_SHORT_NAME","WBS_SHORT_NAME"
"CGL1","CGL1"
SQL Query :
set verify off
set trimout off
set trimspool off
set feedback off
set linesize 22000
set pagesize 200
col csv_string FORMAT a1200
set colsep ','
SET UNDERLINE OFF
SET ECHO OFF
SPOOL E:\PDE_GPO\outputfile1.csv
select * from <tablename>;
SPOOL OFF
exit;
The || concatenates items together.
You can do:
SELECT '"'||col1||'","'||col2||'","'||...
FROM table
That would produce something like:
row 1: "col1val","col2val","col3val"...
row 2: ...
The down-side is you have to list/know every column you want to pull, but best coding practices would state you should specify the columns anyways (in case things are added/removed you want to be sure you get what you want).
-Jim
I got the solution for this.
I had to import set markup csv on and the issue got resolved.
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.
I have an sqlplus script which needs to call a function. This function creates an SQL select dynamically and has already been compiled in the database.
My script needs to call this function, executes the SQL request it returns and then spool the data in a CSV file.
My SQLPLUS code is below:
SET HEAD OFF
SET TRIMOUT ON
SET TRIMSPOOL ON
SET LINESIZE 32000
SET PAGESIZE 0
SET TERMOUT OFF
SET ECHO OFF
SET COLSEP ,
spool /a/b/rvibap/c/&1..csv
EXECUTE IMMEDIATE build_select(&1)
spool off;
/
However, I am getting the below error in my CSV file:
BEGIN IMMEDIATE build_select(TYPE); END;
*
ERROR at line 1:
ORA-06550: line 1, column 17:
PLS-00103: Encountered the symbol "BUILD_SELECT" when expecting one of the following:
:= . ( # % ;
The symbol ":=" was substituted for "BUILD_SELECT" to continue.
I am calling my SQL script in the following way :
#test.sql TYPE
I have also tested the build_select function and it functions correctly; return a query in String.
There are few issues with your code.
There is no BEGIN END block enclosing your EXECUTE IMMEDIATE
expression.
EXECUTE IMMEDIATE does not display the results of an sql select statement.
You are calling your execute script as #test.sql TYPE which will be parsed as EXECUTE IMMEDIATE build_select(TYPE) i.e plain TYPE without quotes - which will throw an error. You can resolve this however by running it as
#test.sql "'TYPE'"
As I said you cannot directly execute and view results from a dynamic SQL select statement in 11g and below. So you can use the technique used in the other answer which I am not clear about if it generates the select SQL neatly.
If you are in 12c, you can use something like
open a_ref_cursor for build_select(&1);
dbms_sql.return_result(a_ref_cursor);
For 11g and below , here are some of the techniques explained.
How to output result of SELECT statement which is executed using native dynamic SQL?
A better solution if you are ok not to use your function would be
Generating SQL*Plus script using SQL*Plus
Wrong syntax... Maybe you could call the spool you just created?
Here is what could work:
SET HEAD OFF
SET TRIMOUT ON
SET TRIMSPOOL ON
SET LINESIZE 32000
SET PAGESIZE 0
SET TERMOUT OFF
SET ECHO OFF
SET COLSEP ''
spool /a/b/rvibap/c/&1..sql
prompt SET COLSEP ,
select build_select(&1) from dual;
spool off;
spool /a/b/rvibap/c/&1..csv
#/a/b/rvibap/c/&1
spool off;
Hope it helps.
I am trying to get one file with my user name and passwords for some scripts that I run every day. I have several scripts working now using a batch file that has my user names and passwords.
My Password Batch file looks like this.
parms.bat
Rem Oracle Db
set odbUsername=myUserName
set odbpassword=myPassword
My other scripts call that batch file and get the information ok. I have a couple sql scripts that I also need to use these usernames and passwords. I can't seem to get them to work. But I am fairly new to sqlplus scripting.
My Sql Scripts looks like this.
CONNECT myusername#Oracleddbname/mypassword
SET FEEDBACK OFF;
SET ECHO OFF;
SET TERMOUT OFF;
SET HEADING OFF;
SET PAGESIZE 0;
SET LINESIZE 500;
SET TIMING OFF;
SET TRIMSPOOL ON;
SET COLSEP ',';
SPOOL C:\FileTransfers\MeterData.csv
PROMPT CoopCode,MeterID,DateTime,Value
SELECT DISTINCT
a.coopcode
|| ','
|| a.meterno
|| ','
|| a.readdatetime
|| ','
|| a.usage
FROM temp_reconfigured a, temp_goodsence b
WHERE a.coopcode = b.coopcode AND a.meterno = b.meterno
;
Spool off;
EXIT;
I call this script with a batch file that runs through windows task scheduler.
It looks like this.
sqlplus /nolog #C:\FileTransfers\AutomationScripts\GoodSence\SpoolGoodSenceDataSet.sql
So I would like to pass the user name to the sql from the batch file. I have read several things and tried about 30 and none seem to work. Thank you for your help in advance.
You can pass a parameter this way:
script.sql:
select '&1' from dual;
the call:
D:\>sqlplus user/password#db #d:\script.sql 'value'
SQL*Plus: Release 11.2.0.2.0 Production on Lun Ott 3 17:02:10 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
old 1: select '&1' from dual
new 1: select 'value' from dual
'VALU
-----
value
Just typing that out made me think about passing it during the call vs inside the sql to connect. I then edited my SQL and took out the connect statement
So this worked...
echo Get Parameters
call C:\FileTransfers\AutomationScripts\parms.bat
echo %odbUsername%
echo %odbpassword%
sqlplus myusername#oracledb/%odbpassword%#C:\FileTransfers\AutomationScripts\GoodSence\SpoolGoodSenceDataSet.sql
If I run SQL in TOAD 11.0.0.116, and run it as a Script, it displays the output in the "Script Output" tab as raw text.
However, the display wraps after about 62 characters as you can see here:
I have messed about with setting the pagesize variable, to 0, and 200 and 2000 etc. but nothing makes any difference. Does anyone know if it is possible to prevent the text wrapping like this?
Thanks
Try using the set linesize command. I have here the Toad version 9.5 and it works:
set linesize 500;
instead of set pagesize