Pass parameter from PL/SQL to Unix "as is"


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Pass parameter from PL/SQL to Unix "as is"
# 1  
Old 10-13-2010
Pass parameter from PL/SQL to Unix "as is"

Hi,
I need to pass 4 parameters from Oracle Procedure to Unix Shell script..

procedure signature :-
Quote:
PROCEDURE Builder(csvFileName OUT VARCHAR2,pdfFileName OUT VARCHAR2, fileId IN NUMBER, csvresult OUT VARCHAR2,pdfresult OUT VARCHAR2);
UNIX Shell script:
Quote:
BudResult=$(exec_Builder $fileId)
echo $BudResult | read csvfileName pdfFileName csvresult pdfresult
Problem: 1. Suppose pdffile and pdfresult has Null values in Oracle procedures but unix shell will read parameters by spaces so
I am getting wrong parameters values in UNIX script.

Code:
Oracle Procedure result:                   Unix Shell Result
csvfile = ABC.csv                         csvfile = ABC.csv
pdfFile = NULL                            pdfFile = Success
csvresult = Success                       csvresult = 
pdfresult = NULL                          pdfresult =

2. suppose csvresult has value "Userdefined Exception" in oracle procedure but Unix reads it as following
Code:
Oracle Procedure result:                 Unix Shell Result
csvfile = ABC.csv                         csvfile = ABC.csv
pdfFile = XYZ.pdf                         pdfFile = XYZ.pdf
csvresult = Userdefined Exception         csvresult = Userdefined
pdfresult = Success                       pdfresult = Exception Success

In nut shell how to pass parameter "as is" from PL/SQL to UNIX..
Thanks
Sandy
# 2  
Old 10-13-2010
Hi,

Here I can see two options:
1. If you have all the possible output values, you can use some IFs to validate;
2. Change the procedure to not use "NULL" values, but NULL strings instead: NVL(FIELD, 'NULL');

I hope it helps!

Regards.
This User Gave Thanks to felipe.vinturin For This Post:
# 3  
Old 10-13-2010
As I understand your description, you have no indication when responded field (or parameter) started and ended.
Thus, answer is simple: make that indication in your procedure responce!
Code:
 #instead of:
sql> select sysdate from dual;
  #use
sql> select 'date='||sysdate from dual

After that in your unix-code check for a parameter.
Probably more common way is to have responce delimitered with some character. Usefull, too.

If you have no way to change the procedure, I understand you have in result of the procedure call just a number of worlds, and, in that case I do not see a way to have your problem resolved. (IMHO it is bad codding of the procedure; hence, GIGO - garbage in, garbage out.)

Last edited by alex_5161; 10-13-2010 at 03:43 PM..
This User Gave Thanks to alex_5161 For This Post:
# 4  
Old 10-13-2010
Now I saw one thing!

You don't need to change the procedure, just treat the OUT parameters when you call it, like below:
Code:
CREATE OR REPLACE PROCEDURE PROCTEST(MES OUT VARCHAR2)
IS
BEGIN
    MES := NULL;
END;
/

SET SERVEROUTPUT ON
DECLARE
      MYMES VARCHAR2(100);
BEGIN
    PROCTEST(MYMES);
    DBMS_OUTPUT.PUT_LINE('Test: [' || NVL(MYMES, 'NULL_MESSAGE') || ']');
END;
/

Regards!
# 5  
Old 10-15-2010
i have tried following way but it didi not work...
please let me know wht im doing wrong..

Code:
function
BEGIN
:fileId := '$fileIdIn';
BUILDER(:fileId,:csvfile,:pdfFile,:csvresult,:pdfresult);
END;
/ 
set termout on
SELECT :csvfile || '|' || :pdfFile || '|' || :csvresul || '|' || :pdfresult  FROM dual;
exit
!`

Main section

Code:
oenResult=$(exec_Builder $fileId)  
#echo $oenResult | read csvFile pdfFile csvresult pdfresult 
			
echo oenResult=$oenResult
				
csvFile=`echo $oenResult | cut -d '|' -f 1`
pdfFile=`echo $oenResult | cut -d '|' -f 2`
csvresult=`echo $oenResult | cut -d '|' -f 3`
pdfresult=`echo $oenResult | cut -d '|' -f 4`

thanks
sandy
# 6  
Old 10-15-2010
What was the error?
# 7  
Old 10-15-2010
it worked ..i have used a variable instead of select select statement

Code:
BEGIN
:fileId := '$fileIdIn';
BUILDER(:fileId,:csvfile,:pdfFile,:csvresult,:pdfresult);
:output := :csvfile || '|' || :pdfFile || '|' || :csvresul || '|' || :pdfresult
END;
/ 
set termout on
print output
exit
!`

thanks so much for all your help
sandy
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

2. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

3. Shell Programming and Scripting

How to use sql "sysdate" in unix?

I am use unix shell script to called an sql Script to query data in my shell program. sqlplus -S /nolog @update.sql but my script on function "sysdate" not work !! Could you tel me,How can i use function "sysdate" on unix or can replace the other function in my script to get data in system... (5 Replies)
Discussion started by: krai
5 Replies

4. UNIX for Dummies Questions & Answers

Unix "look" Command "File too large" Error Message

I am trying to find lines in a text file larger than 3 Gb that start with a given string. My command looks like this: $ look "string" "/home/patrick/filename.txt" However, this gives me the following message: "look: /home/patrick/filename.txt: File too large" So, I have two... (14 Replies)
Discussion started by: shishong
14 Replies

5. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

6. Shell Programming and Scripting

Unix commands delete all files starting with "X" except "X" itself. HELP!!!!?

im a new student in programming and im stuck on this question so please please HELP ME. thanks. the question is this: enter a command to delete all files that have filenames starting with labtest, except labtest itself (delete all files startign with 'labtest' followed by one or more... (2 Replies)
Discussion started by: soccerball
2 Replies

7. UNIX for Advanced & Expert Users

pf not working properly even with only "pass in all" and "pass out all" rules

i have two rules in my pf.conf file, "pass in all" and "pass out all" i was having issues with getting pf working to begin with, so i went with starting from nothing and working on up. i have an ultrasparc ultra1 200e, with an added 4-port fast ethernet sbus card, running "3.4 GENERIC#85... (4 Replies)
Discussion started by: xyyz
4 Replies

8. UNIX for Dummies Questions & Answers

What is meant by Kernel Parameter "dflssiz" in Digital Unix (OSF)

Hi, We have a Digital Unix Server with OSF. There's a Kernel Parameter "dflssiz" on this server. I just want to know, what it means. Thanks (2 Replies)
Discussion started by: sameerdes
2 Replies

9. UNIX for Advanced & Expert Users

Commands on Digital Unix equivalent to for "top" and "sar" on other Unix flavour

Hi, We have a DEC Alpha 4100 Server with OSF1 Digital Unix 4.0. Can any one tell me, if there are any commands on this Unix which are equivalent to "top" and "sar" on HP-UX or Sun Solaris ? I am particularly interested in knowing the CPU Load, what process is running on which CPU, etc. ... (1 Reply)
Discussion started by: sameerdes
1 Replies
Login or Register to Ask a Question