create sql query


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting create sql query
# 1  
Old 06-29-2011
create sql query

Hi Everyone,

Can anyone pls help me out......with my requirement, i am struggling since 3 days. Please find the requirement below

my file contains below data
Code:
R1|Array/Network Resistor - VIP|V_RES_CLASS|V_MOUNT_FEATURE|SURFACE MOUNT|AND|8533.10.00.20|8533.10.00.20|
R1|Array/Network Resistor - VIP|V_RES_NW_CLASS|V_TECHNOLOGY|CARBON*||8533.10.00.20|8533.10.00.20|
R4|Array/Network Resistor - VIP|V_RES_CLASS|V_MOUNT_FEATURE|THROUGH HOLE MOUNT|AND|8533.10.00.57|8533.10.00.57|
R4|Array/Network Resistor - VIP|V_RES_NW_CLASS|V_TECHNOLOGY|CARBON*||8533.10.00.57|8533.10.00.57|
R7|Array/Network Resistor - VIP|V_RES_CLASS|V_MOUNT_FEATURE|SURFACE MOUNT|AND|8533.21.00.10|8533.21.00.25|
R7|Array/Network Resistor - VIP|V_RES_NW_CLASS|V_TECHNOLOGY|!CARBON*|AND|8533.21.00.10|8533.21.00.25|
R7|Array/Network Resistor - VIP|V_PRT_CLASS|V_MFR_PKG_DESC|DIP*||8533.21.00.10|8533.21.00.25|

i need a script to generate single sql statement for the unique column 1 attribute

if you see R7 there are 3 lines, there are 3 table names in column 3 and 3 attrributes from these tables in column 4.

my tool has to generate a sql line for R7 is
Code:
select a.V_MOUNT_FEATURE, b.V_TECHNOLOGY, c.V_MFR_PKG_DESC from V_RES_CLASS a, V_RES_NW_CLASS b, V_PRT_CLASS c where a.V_MOUNT_FEATURE='SURFACE MOUNT' and b.V_TECHNOLOGY not like 'CARBON%' and c.V_MFR_PKG_DESC like 'DIP*';

Please help me out.

Thanks,
Jam

---------- Post updated at 01:06 PM ---------- Previous update was at 12:37 PM ----------

Please provide the reply.....its very critical

Last edited by Franklin52; 06-29-2011 at 04:42 AM.. Reason: Please use code tags for code and data samples
# 2  
Old 06-29-2011
Try and adapt the following AWK script :
Code:
nawk -F'|' -v Q="'" '
{
    req       = $1;
    table     = $3;
    column    = $4;
    attribute = $5;
    nbTbl     = ++Requests[req];     # Tables count
    Tables[req, nbTbl]     = table;
    Columns[req, nbTbl]    = column;
    Attributes[req, nbTbl] = attribute;
}
END {
    tblIds = "abcdefghijklmnopqrstuvwxyz";
    for (req in Requests) {
        nbTbl  = Requests[req]
        select = "";
        where  = "";
        from   = "";
        sep    = "";
        for (i=1; i<=nbTbl; i++) {
            id        = substr(tblIds,i,1);
            select    = select sep id "." Columns[req, i];
            from      = from   sep Tables[req, i] " " id;     
            attribute = Attributes[req, i];
            if (attribute ~ /[*%]/) {
                not = "";
                if (substr(attribute,1,1) == "!") {
                    not = "NOT ";
                    attribute = substr(attribute,2);
                }
                where = where (sep ? " and " : "") id "." Columns[req, i] " " not "LIKE " Q attribute Q;
            } else {
                where = where (sep ? " and " : "") id "." Columns[req, i] "=" Q attribute Q;
            }
            sep = ",";
            }
        print "\nselect",select,"\nfrom  ",from,"\nwhere ",where,";";
    }
}
' inputfile

Inputfile:
Code:
R1|Array/Network Resistor - VIP|V_RES_CLASS|V_MOUNT_FEATURE|SURFACE MOUNT|AND|8533.10.00.20|8533.10.00.20|
R1|Array/Network Resistor - VIP|V_RES_NW_CLASS|V_TECHNOLOGY|CARBON*||8533.10.00.20|8533.10.00.20|
R4|Array/Network Resistor - VIP|V_RES_CLASS|V_MOUNT_FEATURE|THROUGH HOLE MOUNT|AND|8533.10.00.57|8533.10.00.57|
R4|Array/Network Resistor - VIP|V_RES_NW_CLASS|V_TECHNOLOGY|CARBON*||8533.10.00.57|8533.10.00.57|
R7|Array/Network Resistor - VIP|V_RES_CLASS|V_MOUNT_FEATURE|SURFACE MOUNT|AND|8533.21.00.10|8533.21.00.25|
R7|Array/Network Resistor - VIP|V_RES_NW_CLASS|V_TECHNOLOGY|!CARBON*|AND|8533.21.00.10|8533.21.00.25|
R7|Array/Network Resistor - VIP|V_PRT_CLASS|V_MFR_PKG_DESC|DIP*||8533.21.00.10|8533.21.00.25|

Output:
Code:
select a.V_MOUNT_FEATURE,b.V_TECHNOLOGY
from   V_RES_CLASS a,V_RES_NW_CLASS b
where  a.V_MOUNT_FEATURE='SURFACE MOUNT' and b.V_TECHNOLOGY LIKE 'CARBON*' ;

select a.V_MOUNT_FEATURE,b.V_TECHNOLOGY
from   V_RES_CLASS a,V_RES_NW_CLASS b
where  a.V_MOUNT_FEATURE='THROUGH HOLE MOUNT' and b.V_TECHNOLOGY LIKE 'CARBON*' ;

select a.V_MOUNT_FEATURE,b.V_TECHNOLOGY,c.V_MFR_PKG_DESC
from   V_RES_CLASS a,V_RES_NW_CLASS b,V_PRT_CLASS c
where  a.V_MOUNT_FEATURE='SURFACE MOUNT' and b.V_TECHNOLOGY NOT LIKE 'CARBON*' and c.V_MFR_PKG_DESC LIKE 'DIP*' ;

Jean-Pierre.
This User Gave Thanks to aigles For This Post:
# 3  
Old 06-30-2011
Hi aigles,

Your code works superb!!!!!!!! but unfortunately i need perl code to do this as i am not able to understand awk........

Thanks a lot for your quick reply.........!

---------- Post updated at 03:48 PM ---------- Previous update was at 02:18 PM ----------

Hi friends......

Please provide ur support......i need it very urgent......

---------- Post updated 06-30-11 at 10:03 AM ---------- Previous update was 06-29-11 at 03:48 PM ----------

Hi.......

I need this very urgent.........please help me out.
# 4  
Old 06-30-2011
Sorry, i don't use perl so I can't help you anymore.

Jean-Pierre.
# 5  
Old 07-01-2011
Try using a2p
# 6  
Old 07-01-2011
Hi aigles,

Thanks for your help!!!!!! I will call your awk scipt in my perl script. I need some modification with reference to below file
Code:
R1|Array/Network Resistor - VIP|V_RES_CLASS|V_MOUNT_FEATURE|SURFACE MOUNT|AND|8533.10.00.20|8533.10.00.20|
R1|Array/Network Resistor - VIP|V_RES_NW_CLASS|V_TECHNOLOGY|CARBON*||8533.10.00.20|8533.10.00.20|
R4|Array/Network Resistor - VIP|V_RES_CLASS|V_MOUNT_FEATURE|THROUGH HOLE MOUNT|AND|8533.10.00.57|8533.10.00.57|
R4|Array/Network Resistor - VIP|V_RES_NW_CLASS|V_TECHNOLOGY|CARBON*||8533.10.00.57|8533.10.00.57|
R7|Array/Network Resistor - VIP|V_RES_CLASS|V_MOUNT_FEATURE|SURFACE MOUNT|AND|8533.21.00.10|8533.21.00.25|
R7|Array/Network Resistor - VIP|V_RES_NW_CLASS|V_TECHNOLOGY|!CARBON*|AND|8533.21.00.10|8533.21.00.25|
R7|Array/Network Resistor - VIP|V_PRT_CLASS|V_MFR_PKG_DESC|DIP*||8533.21.00.10|8533.21.00.25|

in the created sql query i need to add two static table v_prt_class and v_vmf_class in all the query as i need to extract one attribute from each of these two tables,
condition here is if v_prt_class part of the it should not duplicate

If u take the first output it does not contain V_PRT_CLASS table in the query, if u take 3rd output it contains V_PRT_CLASS table.

new sqlquery for the 3rd output should be
Code:
select a.v_prt_nbr, b.v_vmf_name, c.V_MOUNT_FEATURE, d.V_TECHNOLOGY, a.V_MFR_PKG_DESC from v_prt_class a, v_vmf_class b, V_RES_CLASS c, V_RES_NW_CLASS d where c.V_MOUNT_FEATURE='SURFACE MOUNT' and d.V_TECHNOLOGY NOT LIKE 'CARBON%' and a.V_MFR_PKG_DESC LIKE 'DIP%' and a.obj_id=c.obj_id and c.obj_id=d.obj_id and a.V_PRT_MFG_PTR=b.obj_id;

here a.obj_id=c.obj_id and c.obj_id=d.obj_id and a.V_PRT_MFG_PTR=b.obj_id; is a static line
for 1st output
Code:
select a.v_prt_nbr, b.v_vmf_name, c.V_MOUNT_FEATURE, d.V_TECHNOLOGY from v_prt_class a, v_vmf_class b, V_RES_CLASS c, V_RES_NW_CLASS d where c.V_MOUNT_FEATURE='SURFACE MOUNT' and d.V_TECHNOLOGY LIKE 'CARBON%' and a.obj_id=c.obj_id and c.obj_id=d.obj_id and a.V_PRT_MFG_PTR=b.obj_id;

Instead of writing the output to terminal I need to write it to some output file, Also I need to retain clolumn 1 ,7 and 8 along with the corresponding query.

Last edited by Franklin52; 07-07-2011 at 03:23 AM.. Reason: Please use code tags for code and data samples, thank you
# 7  
Old 07-01-2011
Try this new version :
Code:
nawk -F'|' -v Q="'" '

{
    req       = $1;
    table     = $3;
    column    = $4;
    attribute = $5;
	nbTbl     = ++Requests[req];     # Tables count
	Tables[req, nbTbl]     = toupper(table);
    Columns[req, nbTbl]    = column;
    Attributes[req, nbTbl] = attribute;
}

function getTableId(table) {
    table = toupper(table);
    if ( ! (table in TablesIds) ) {
        Tables[++TablesCount] = table;
        TablesIds[table] = substr("abcdefghijklmnopqrstuvwxyz", TablesCount, 1);
    }
    return TablesIds[table];
}

END {
    for (req in Requests) {

        select = "";
        where  = "";
        from   = "";
        
        #
        # Fixed part of select columns statement
        #
        
        id = getTableId("V_PRT_CLASS");
        select = id ".V_PRT_NBR";
        
        id = getTableId("V_VMF_CLASS");
        select = select ", " id ".V_VMF_NAME";
        
        #
        # Select columns and where clause from request definition
        #
                
        req_len = Requests[req];
        wsep = "";
        for (i=1; i<=req_len; i++) {
            id     = getTableId(Tables[req, i]);
            select = select ", " id "." Columns[req, i];
            attribute = Attributes[req, i];
            if (attribute ~ /[*%]/) {
                not = "";
                if (substr(attribute,1,1) == "!") {
                    not = "not ";
                    attribute = substr(attribute,2);
                }
                where = where wsep id "." Columns[req, i] " " not "like " Q attribute Q;
            } else {
                where = where wsep id "." Columns[req, i] "=" Q attribute Q;
            }
            wsep = "\n  and  ";
            }
        
        #
        # Fixed part of where clause
        #
        
        id1 = getTableId("V_PRT_CLASS");
        id2 = getTableId("V_VMF_CLASS");
        id3 = getTableId("V_RES_CLASS");
        id4 = getTableId("V_RES_NW_CLASS");
        
        where = where wsep id1 ".OBJ_ID="        id3 ".OBJ_ID";
        where = where wsep id3 ".OBJ_ID="        id4 ".OBJ_ID";
        where = where wsep id1 ".V_PRT_MFG_PTR=" id2 ".OBJ_ID";
        
        #
        # From clause
        #

        fsep = "";
        for (i=1; i<=TablesCount; i++) {
            table = Tables[i];
            id    = getTableId(table);
            from  = from fsep table " " id;
            fsep  = ", "
        }
        
        #
        # Print SQL statement
        #
        
        print "\nselect",select,"\nfrom  ",from,"\nwhere ",where,";";

    }
 }
' jam.dat

Inputfile:
Code:
R1|Array/Network Resistor - VIP|V_RES_CLASS|V_MOUNT_FEATURE|SURFACE MOUNT|AND|8533.10.00.20|8533.10.00.20|
R1|Array/Network Resistor - VIP|V_RES_NW_CLASS|V_TECHNOLOGY|CARBON*||8533.10.00.20|8533.10.00.20|
R4|Array/Network Resistor - VIP|V_RES_CLASS|V_MOUNT_FEATURE|THROUGH HOLE MOUNT|AND|8533.10.00.57|8533.10.00.57|
R4|Array/Network Resistor - VIP|V_RES_NW_CLASS|V_TECHNOLOGY|CARBON*||8533.10.00.57|8533.10.00.57|
R7|Array/Network Resistor - VIP|V_RES_CLASS|V_MOUNT_FEATURE|SURFACE MOUNT|AND|8533.21.00.10|8533.21.00.25|
R7|Array/Network Resistor - VIP|V_RES_NW_CLASS|V_TECHNOLOGY|!CARBON*|AND|8533.21.00.10|8533.21.00.25|
R7|Array/Network Resistor - VIP|V_PRT_CLASS|V_MFR_PKG_DESC|DIP*||8533.21.00.10|8533.21.00.25|

Output:
Code:
select a.V_PRT_NBR, b.V_VMF_NAME, c.V_MOUNT_FEATURE, d.V_TECHNOLOGY
from   V_PRT_CLASS a, V_VMF_CLASS b, V_RES_CLASS c, V_RES_NW_CLASS d
where  c.V_MOUNT_FEATURE='SURFACE MOUNT'
  and  d.V_TECHNOLOGY like 'CARBON*'
  and  a.OBJ_ID=c.OBJ_ID
  and  c.OBJ_ID=d.OBJ_ID
  and  a.V_PRT_MFG_PTR=b.OBJ_ID ;

select a.V_PRT_NBR, b.V_VMF_NAME, c.V_MOUNT_FEATURE, d.V_TECHNOLOGY
from   V_PRT_CLASS a, V_VMF_CLASS b, V_RES_CLASS c, V_RES_NW_CLASS d
where  c.V_MOUNT_FEATURE='THROUGH HOLE MOUNT'
  and  d.V_TECHNOLOGY like 'CARBON*'
  and  a.OBJ_ID=c.OBJ_ID
  and  c.OBJ_ID=d.OBJ_ID
  and  a.V_PRT_MFG_PTR=b.OBJ_ID ;

select a.V_PRT_NBR, b.V_VMF_NAME, c.V_MOUNT_FEATURE, d.V_TECHNOLOGY, a.V_MFR_PKG_DESC
from   V_PRT_CLASS a, V_VMF_CLASS b, V_RES_CLASS c, V_RES_NW_CLASS d
where  c.V_MOUNT_FEATURE='SURFACE MOUNT'
  and  d.V_TECHNOLOGY not like 'CARBON*'
  and  a.V_MFR_PKG_DESC like 'DIP*'
  and  a.OBJ_ID=c.OBJ_ID
  and  c.OBJ_ID=d.OBJ_ID
  and  a.V_PRT_MFG_PTR=b.OBJ_ID ;

if you want to write the result of the script (for example named 'generate_sql.ksh') in the file 'request.sql' :
Code:
generate_sql.ksh > request.sql


Quote:
Also I need to retain clolumn 1 ,7 and 8 along with the corresponding query.
I don't understand what you want to do.
Give us an example.

Jean-Pierre.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Solaris

SQL QUERY to Table Output

Hi I am trying to run sql query from solaris in csh script and send the output to email. Below is my sql query select p.spid,se.program seprogram, se.machine, se.username, sq.sql_text,sq.retrows from v$process p inner join v$session se on p.addr = se.paddr inner join ( select... (2 Replies)
Discussion started by: tharmendran
2 Replies

2. Programming

Help writing SQL query

Hello All, I hope I'm posting this in the right section. I have zero sql query writing skill, in fact, I've never done it before, but for some reason, a request came across my desk to get information from one of our databases. I have about 200 ticket numbers that have no information attached,... (8 Replies)
Discussion started by: bbbngowc
8 Replies

3. Programming

Getting error in sql query

Hi All , I have tried many times am getting syntax error on 'UNION' can anybody tell me ... INSERT INTO table1 ( Type , num_items , num_letters , total_value ) (select type='1', num_items, num_letters=count(*), total_value=sum(letter_value) from table2 where num_items = 1 (1 Reply)
Discussion started by: Venkatesh1
1 Replies

4. Shell Programming and Scripting

Run SQL thru shell script: how to get a new line when run sql query?

Hi, this's Pom. I'm quite a new one for shell script but I have to do sql on shell script to query some information from database. I found a concern to get a new line...When I run my script, it retrieves all data as wondering but it's shown in one line :( What should I do? I'm not sure that... (2 Replies)
Discussion started by: Kapom
2 Replies

5. Shell Programming and Scripting

problem in SQL query

I used the following code code select * from tablename where columnname Instead of printing the expected output it prints all the files in the present directory since there is a "*" in the code. Is there any way to overcome the problem? Thanks Ananth (2 Replies)
Discussion started by: Ananthdoss
2 Replies

6. Shell Programming and Scripting

How to use sql data file in unix csv file as input to an sql query from shell

Hi , I used the below script to get the sql data into csv file using unix scripting. I m getting the output into an output file but the output file is not displayed in a separe columns . #!/bin/ksh export FILE_PATH=/maav/home/xyz/abc/ rm $FILE_PATH/sample.csv sqlplus -s... (2 Replies)
Discussion started by: Nareshp
2 Replies

7. Shell Programming and Scripting

sql query problem

Hi, I am passing an argument for the script and that argument values should exist in database. bill_period_input="'""$1""'" bill_period=`sqlplus uname/pwd@dbname <<eof! set verify off set heading off set feedback off select bill_period from bill_period_ref where... (4 Replies)
Discussion started by: ss_ss
4 Replies

8. UNIX and Linux Applications

SQL Lite query

Hello Everyone, I am looking to write a script that will run on many machines in a network at the same time. They need to write a result to a common location. I plan to use a SQLlite database as this common writing point. But the concern I have is how SQLlite will react to multiple writes that... (1 Reply)
Discussion started by: garric
1 Replies

9. Shell Programming and Scripting

rsh and sql query

Hi ... I am doing a switch user and then rsh and then running a sql query . I am successfull in rsh and logging into the database , but my query doesnt run .. Here's the command : su - linus -c "rsh -l linus psmf ORACLE_SID=SMP;export ORACLE_SID;sqlplus... (1 Reply)
Discussion started by: sars
1 Replies

10. Shell Programming and Scripting

& in SQL query

I have a script that looks for all jobs that contain a particular calendar. Some of the calendars have '&' in them and sql freaks out when it encounters that.. is there a way around this? I have tried: select job_name from job where run_calendar='1&15dom' select job_name from job... (3 Replies)
Discussion started by: Lindarella
3 Replies
Login or Register to Ask a Question