Skip to main content

How to pass the output of your execute immediate select list in oracle pl/sql to variables ?

This i how i did the dynamic query and pass the output of a select statement from an execute immediate into variables

SET ECHO OFF
SET SERVEROUTPUT ON SIZE 1000000 
SET FEEDBACK ON
SET TIMING ON
DECLARE 
mysql_statement clob;
var_record_count number;
var_field1 number;
var_field2 varchar2(30 CHAR);
Begin
for my_list in ( 
select 1 as record_count, 101 as field1, 'record number 1' as field2 from dual union
select 2 as record_count, 102 as field1, 'record number 2' as field2 from dual union
select 3 as record_count, 103 as field1, 'record number 3' as field2 from dual
)
LOOP
/*-- build your dynmic sql and assign to a variable --*/
mysql_statement := 'select '||my_list.record_count||', '||my_list.field1||', '''||my_list.field2||''' from dual';

/*-- display your dynamic sql--*/
DBMS_OUTPUT.PUT_LINE(mysql_statement);

/*-- execute whatever you sql is using execute immediate and pass the result for each list into your variables --*/
execute Immediate mysql_statement into var_record_count, var_field1 ,var_field2;

/*-- display your variables --*/
DBMS_OUTPUT.PUT_LINE(var_record_count||'|'||var_field1||'|'||var_field2);

END LOOP;
END;
/
show errors;


--- output --

anonymous block completed
Elapsed: 00:00:00.194
select 1, 101, 'record number 1' from dual
1|101|record number 1
select 2, 102, 'record number 2' from dual
2|102|record number 2
select 3, 103, 'record number 3' from dual
3|103|record number 3

No Errors.

Comments

Popular posts from this blog

how to search for jobs with specific status in Datastage via command line?

Datastage deployment can be easy but such a pain when it comes to validation. Remember the times when you deployed hundreds or thousand of jobs an you need to validate whether you left one or two jobs un-compiled?  Developers gets lazy at times and so struggle to find ways to simplify stuff and make his life easier with a few commands. The following comes handy in this case... Login on the datatage unix box and execute the following sequence of commands: 1. cd <DSHOME> 2. . ./<dsenvironment variable file> 3. dsjob -ljobs -status  98  <DS_PROJECT> Supply status  = 98 (“Not Compiled”) and the DS Project. This will show all uncompiled job list in your DS Project environment. bash-4.2$ cd /app/ibm/InformationServer/Server/DSEngine bash-4.2$ . ./dsenv bash-4.2$ dsjob -ljobs -status 98 MY_DS_PROJECT_DEV DUMMY_ACTIVITY DUMMY _MEMBER DUMMY _LEAD DUMMY _OPPORTUNITY DUMMY _HISTORY DUMMY _PRODUCT DUMMY _RECORD DUMMY ...

How to extract prefix or suffix on a unix string

Sometime you are processing a lot files and you have to construct a dynamic prefix and suffix based file names. So you can search for multiple files based on prefix pattern and suffix pattern. Here's how you extract the PREFIX of a string given you have some sort of delimiter in the string itself. bash-4.1$ echo "THISPREFIX_blahblah_yyymmdd.txt" THISPREFIX_blahblah_yyymmdd.txt bash-4.1$ var123="THISPREFIX_blahblah_yyymmdd.txt"; file_prefix=" ${var123%%_*} " ; echo $file_prefix THISPREFIX bash-4.1$ In the above example string what we want to extract are the charcters after the _ (underscore) thus in our variable manipulation we specified _ after the %% which denotes that we get all the characters before _. So for the SUFFIX extraction the patter is similar only we use ## instead of %%. see below : bash-4.1$ echo "THISPREFIX_blahblah_yyymmdd.txt" THISPREFIX_blahblah_yyymmdd.txt bash-4.1$ var123="THISPREFIX_bla...

Where can you find .odbc.ini and tnsnames.ora in Datastage server ?

Open up the director log for any Datastage job, you'll notice that after the logs that says  "Starting job..." "Attached Message Handlers: " "Environment variable settings: " Open Up that Environment variable settings logs and you will find a bunch of ENV variables being set at the start for execution. Just copy and paste that in any text editor and search for the ODBCINI for the .odbc.ini and TNS_ADMIN for the tnsnames.ora. You should see the following in the env variable settings logs, it maybe different but it will look the same : ODBCINI=/app/ibm/InformationServer/Server/DSEngine/.odbc.ini /app/ibm/dba/oracle_<version>/product/<version>/client_1/network/admin eg.  TNS_ADMIN=/app/ibm/dba/oracle_11_2/product/11.2.0/client_1/network/admin