Passing Shell array to SQLPlus


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Passing Shell array to SQLPlus
# 1  
Old 12-08-2011
Passing Shell array to SQLPlus

Dears,
Newbie here and tried to search this topic for 3 days now with results.
I have a shell array and I want to use it in sqlplus with one connection.

here is what I have for now
Code:
#!/bin/ksh

FileName[0]=1000
FileName[1]=2000
FileName[2]=3000
FileName[3]=4000

sqlplus /nolog <<EOF
connect user@database/password
set serveroutput on size 1000000
variable deptno number;
exec :deptno := '${FileName[0]}'
select customer_name from customer where customer_id=:deptno;
EOF

the above code works fine but with one array index.
I want too loop in the SQL part and pass the loop parameter to the shell array as I'm imaging below

Code:
#!/bin/ksh

FileName[0]=1000
FileName[1]=2000
FileName[2]=3000
FileName[3]=4000

sqlplus /nolog <<EOF
connect user@database/password
set serveroutput on size 1000000
variable deptno number;

while (x<4)
loop
exec :deptno := '${FileName[x]}'
select customer_name from customer where customer_id=:deptno;
end loop
EOF

How can i do this
# 2  
Old 12-08-2011
you need to connect for 4 times.

because for the here document will pass 4 times exec: deptno := <value> to the sqlplus.

so, better to put the while loop outside and use sqlplus inside
# 3  
Old 12-08-2011
thank you itkamaraj for the immediate response, I'm trying to find a way to do it in one connection.
is it possible to pass the shell array to an sqlplus array and loop on the sqlplus array itself?
# 4  
Old 12-08-2011
instead of that, you can write all queries in a file and execute a file once using sqlplus
# 5  
Old 12-08-2011
Sorry for pushing, but they are many files that must be parsed in array using advanced grep for each file and then load it to sql.
Writing them in files mean extra diskspace and better file management as the files is being changed every 5 minutes
# 6  
Old 12-08-2011
Check the code below:
Code:
$ cat testScript.sh
buildSQLPlusExecStr ()
{
	unset sqlStr
	
	arrayCountPos=0
	arrayLastPos=${#FileName[@]}
	while [ ${arrayCountPos} -lt ${arrayLastPos} ]
	do
		currValue="${FileName[${arrayCountPos}]}"
		# Do you really need the line below?
		# sqlStr="${sqlStr} \n exec :deptno := '${currValue}'"
		# sqlStr="${sqlStr} \n select customer_name from customer where customer_id=:deptno;"
		
		# Can't you just do this?
		sqlStr="${sqlStr} \n select customer_name from customer where customer_id='${currValue}';"
		arrayCountPos=`expr ${arrayCountPos} + 1`
	done
}

FileName[0]=1000
FileName[1]=2000
FileName[2]=3000
FileName[3]=4000

buildSQLPlusExecStr

echo -e "${sqlStr}"

$ ./testScript.sh
 select customer_name from customer where customer_id='1000';
 select customer_name from customer where customer_id='2000';
 select customer_name from customer where customer_id='3000';
 select customer_name from customer where customer_id='4000';

I hope it helps!
# 7  
Old 12-08-2011
Hi Felipe,
every line of code helps, I'm learning from great ideas that are being shared here.
May be it is my mistake that I didn't clear my point earlier but I'll try to explain more my issue

I have a system that is throwing number of id's in files where each file has more than one line and each line has one id
right now i have a code to cat the files each 5 minute and pass each file content to the given array FileName -the array in my code is just sample for the dynamic output and it is not static like shown- and i do shell loop to do the following
  1. select the next value from shell array using the loop number as index
  2. open sql connection
  3. run query using sqlplus bind variable and query about the given value from shell array
  4. close the connection
all what i'm looking for is to keep the whole logic but loop after opening the sqlplus because this change will offload the oracle resources somehow as opening connection is considered a high cost action for resources


I hope that helps to understand my objective, thank you in advance for the kind support and help you do here.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Passing string from bash to sqlplus

Hello, I have file (PARFILE) with string on first line: INCLUDE=SCHEMA:"IN\( 'SCHEMA1','SCHEMA2','SCHEMA3' \)"In .sh script I use: .... IMPORT_SCHEMA=`awk 'NR==1{print $2}' ${PARFILE}` ...print $2 is because 'SCHEMA1','SCHEMA2','SCHEMA3' is 2nd column in file echo "$IMPORT_SCHEMA"... (5 Replies)
Discussion started by: DjukaZg
5 Replies

2. Shell Programming and Scripting

Passing Oracle function as file input to sqlplus

Apologies if this is the incorrect forum.There is an issue in the function call I am facing while calling the same from a unix shell scripts. Basically, I want the ref cursor to return values to a variable in sqlpus. The function call is currently saved in a ".txt" file in a unix location. I want... (7 Replies)
Discussion started by: amvip
7 Replies

3. Shell Programming and Scripting

Passing sqlplus output to shell variable

Hi , I am using below code : for i in `ps -ef|grep pmon|awk {' print $8 '}|cut -f3 -d'_'|grep -v '^grep'` do ORACLE_SID=$i export ORACLE_SID; dest=`sqlplus "/ as sysdba" <<EOF set heading off feedback on verify off select DESTINATION from v\\$archive_dest where target in... (5 Replies)
Discussion started by: admin_db
5 Replies

4. Shell Programming and Scripting

Passing a parameter from a shell script to sqlplus

Hi All, I'm new to Linux and scripting, apologies in advance for 'stupid' questions. Please help... Im writing a script that calls a sqlplus script but the sqlplus requires inputs and i cant seem to get this to work. here is my code. #!/bin/sh TERM=vt100 export TERM... (4 Replies)
Discussion started by: Mahomed
4 Replies

5. Shell Programming and Scripting

Shell Script passing parameters to sqlplus code

Hello All, I am interested in finding out a way to pass parameters that are entered at the prompt from HP unix and passed to SQLPlus code with a Shell Script. Is this possible? Thanks (4 Replies)
Discussion started by: compprog11
4 Replies

6. Shell Programming and Scripting

Passing a file handler and an array from Perl to Shell Script

Hi there, I am trying to call a shell script from a Perl script. here is the code: @args = ("sh", "someshellprg.sh", "a file handler", "an array"); system(@args) == 0 or die "system @args failed: $?"; in the shell program, I examine if the arguments exits using: if then echo... (5 Replies)
Discussion started by: pinkgladiator
5 Replies

7. Shell Programming and Scripting

Passing the unix variable to sqlplus

Hi, I am writing a script which creates an external table using a shell script. My requirement is like this. Usage: . ./r.ksh <table_name> - this should create an external table. e.g . ./r.ksh abc - this should create an external table as abc_external. How do i achieve this? Please... (5 Replies)
Discussion started by: Anaramkris
5 Replies

8. Shell Programming and Scripting

error in passing a variable to sqlplus from a shell script

hi, I am using a shell script from where i will be conecting to sqlplus.. i am having a problem in passing a variable to sqlplus query.. i will be assigning the variable in the unix environment..whenever i am trying to pass a variable having the contents greater than 2500 characters, i am... (3 Replies)
Discussion started by: kripssmart
3 Replies

9. UNIX for Advanced & Expert Users

passing unix variable to sqlplus without a file name

Hi, I want to input unix variable to sqlplus.The following is working fine sqlplus username/password @dummy.sql param1 param2 << EOF create user $1 identified by $2; EOF But I dont want any file name to be passed,I just want to pass the parameter. Is there any way to that?? Thanks... (3 Replies)
Discussion started by: sakthi.abdullah
3 Replies

10. Shell Programming and Scripting

passing parameters from a shell script to sqlplus

Hi , I want to pass parameters from a shell script to a sql script and use the parameter in the sql query ..and then I want to spool a particular select query on to my unix box... for 4 different locations by writing only one sql script Right now no file is generated on the unix box...it is a... (2 Replies)
Discussion started by: phani
2 Replies
Login or Register to Ask a Question