SQL query difficulties

Hello, I am trying to create an SQL query to join some tables but I can't get it right so I'm hoping I can get some help here-it's for a college assignment and the deadline is looming.I realise that this is a JDBC forum but I'm getting desperate....
I've got two tables-one with student details (name,address etc etc) and another one containing the information on the subjects that each one is taking.It is only composed of two fields-studentID which is the foreign key to the first table and another called subject which shows a subject taken by the student.
Natually one student can take several subjects so a slice of the table would be something like
studentid subject
1 history
1 geography
1 art
2 maths
2 history
2 geography
3 physics
3 history
etc etc
What I want to do is have a query where one can see the names of the students(in the studentDetails table) that take a particular combination of subjects.For example I would like a query that could tell me which students take BOTH history and geography.(1 & 2 but not 3 in the example above). I realise that this must be a relatively simple query but I don't have much experience with SQL queries.
Any help would be greatly,greatly appreciated
Thanks.

A few databases don't support sub-selects (the 2nd variant) and a few will be fussy about how you alias, or reference a column from an aliased table, but most decent DBs will give a meaningful enough error message that you can work that out...
I can't think of any possible JDBC issues.
The only other thing is that joins always have some performance implications; how you do them and what is indexed can make a big difference. In particular, your student_id probably ought to be a primary key in STUDENTS and an indexed column in the other table... Whether or not an index on subject will improve performance depends on the data distrubution and the database...

Similar Messages

  • SQL Query ( PL/SQL function body returning query ) page

    Hello Friends,
    I have a page with type SQL Query ( PL/SQL function body returning query ).
    I have written a pl/sql block that returns a sql query - select statment.
    Some times i am getting no data found error - does it got to do with the variable that stores the query .
    =======================
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    Error ERR-1101 Unable to process function body returning query.
    OK
    =====================
    When the query is returned with records where exactly the records are stored is it in the variable declared in pl/sql block or with the Oracle Apex implicit cursor.
    Here's the pl/sql block ..
    The query is generated while the user is navigating through pages ..
    ====================
    declare
    l_return_stmt varchar2(32767);
    l_select varchar2(32000);
    l_from varchar2(32000);
    l_where varchar2(32000);
    l_order_by varchar2(32000);
    l_stmt_recordcount varchar2(32000);
    l_recordcount number ;
    begin
    l_select := 'select '||:P10_VARLIST1||:P10_VARLIST2||:P10_VARLIST3
    ||:P10_VARLIST4||:P10_VARLIST5;
    l_from := ' from '||:P10_RELATION;
    if length(:P10_WHERE) > 0 then
    l_where := ' where '||:P10_WHERE;
    else
    l_where := '';
    end if;
    if length(:P10_ORDER_BY) > 0 then
    l_order_by := ' order by '||:P10_ORDER_BY;
    else
    l_order_by := '';
    end if;
    l_return_stmt := l_select||l_from||l_where||l_order_by;
    :P10_STMT := l_return_stmt;
    return l_return_stmt;
    end;
    =============================
    Appreciate your help in this regard.
    thanks/kumar
    Edited by: kumar73 on Apr 22, 2010 6:38 AM

    It looks like the query string you are trying to pass back exceeds the 32K limit for a varchar. Where this is happening is kind of difficult to tell as it could be any number of points, and also depends on what you are passing into the process via page items.
    I would first try to establish what combination of page items causes this error to occur. Then, starting from the bottom and working your way backwards, I would start 'switching off' some of the items you use to build your query until it breaks again, thus establishing which part is leading to the error.
    Also, I'm not sure what :P10_STMT is doing (are you maybe using this for visiblity of the query created)?
    It looks like the query string you are trying to pass back exceeds the 32K limit for a varchar. Where this is happening is kind of difficult to tell as it could be any number of points, and also depends on what you are passing into the process via page items.
    I would first try to establish what combination of page items causes this error to occur. then, starting from the bottom and working your way backwards, I would start 'switching off' some of the items you use to build your query until it breaks again, thus establishing which part is leading to the error.
    Also, I'm not sure what :P10_STMT is doing (are you maybe using this for visiblity of the query created)?

  • Sql query/function problem??

    Hi ,
    I have problems writing a difficult sql query, please help me
    I have a table t in which there are 50000 records
    the table has columns like
    create table t
    (MATCH_ID     NUMBER(4) NOT NULL,
    TEAM_ID NUMBER(4),
    PLAYER_ID     NUMBER(4),
    RUNS     NUMBER(3))
    here match_id, player_id and team_id are jointly primary key
    SQL> SELECT * FORM T WHERE MATCH_ID < 10
    MATCH_ID    TEAM_ID      PL_ID RUNS
            1          2       1228 8
            1          2       1203 82
            1          2       1316 24
            1          1       1150 27
            1          1       1278 13
            1          1       1243 60
            2          1       1278 37
            2          1       1291 0
            2          1       1243 53
            2          2       1228 25
            2          2       1285 103
            2          2       1316 60
            3          2       1228 8
            3          2       1285 25
            3          2        858 43
            3          1       1278 52
            3          1       1394 6
            3          1       1243 31
            4          1       1278 61
            4          1       1394 6
            4          1       1243 3
            4          2       1228 41
            4          2       1285 40
            4          2        858 5
            6          2       1228 20
            6          2       1285 100
            6          2       1408 0
            7          2       1228 15
            7          2       1285 34
            7          2       1408 44
            8          2       1228 0
            8          2       1420 31
            8          2       1340 66
            9          2       1420 19
            9          2       1385 28
            9          2       1340 0
    .....so on upto 50000 records..
    the problem is that I want to extract how many times each player_id in each
    match exists in the table, prior to that match_id (or current_match_id)
    along with that in another column, I also want the sum of 'RUNS' for each
    player_id  prior to that match_id (or current_match_id)
    my disired output is:
    MATCH_ID    TEAM_ID   player_ID RUNS   NO_OF_OCCURENCES    SUM(RUNS)
                                           BEFORE_THIS_MATCH   BEFORE_THIS_MATCH
                                           FOR_THIS_PLAYER_ID  FOR_THIS_PLAYER_ID
            1          2       1228 8      0                   0
            1          2       1203 82     0                   0
            1          2       1316 24     0                   0
            1          1       1150 27     0                   0
            1          1       1278 13     0                   0
            1          1       1243 60     0                   0
            2          1       1278 37     1                   13
            2          1       1291 0      0                   0
            2          1       1243 53     1                   60
            2          2       1228 25     1                   8
            2          2       1285 103    0                   0
            2          2       1316 60     1                   24
            3          2       1228 8      2                   33
            3          2       1285 25     1                   103
            3          2        858 43     0                   0
            3          1       1278 52     2                   50
            3          1       1394 6      0                   0
            3          1       1243 31     2                   113
            4          1       1278 61     3                   102
            4          1       1394 6      1                   6
            4          1       1243 3      3                   144
            4          2       1228 41     3                   41
            4          2       1285 40     2                   128
            4          2        858 5      1                   43
            6          2       1228 20     4                   82
            6          2       1285 100    3                   168
            6          2       1408 0      0                   0
            7          2       1228 15     5                   102
            7          2       1285 34     4                   268
            7          2       1408 44     1                   0
            8          2       1228 0      6                   117
            8          2       1420 31     0                   0
            8          2       1340 66     0                   0
            9          2       1420 19     1                   31
            9          2       1385 28     0                   0
            9          2       1340 0      1                   66
    as you can see from the above data (5TH COLUMN), i have mentioned the
    existance of each player_id in each match prior to the current_match_id
    since match_id = 1 is the 1st match in the table so no player_id comes in the
    table before match number 1.   
    In match number 2 , player_id = 1278 was also present in match_id = 1 so
    thats why Number_OF_OCCURENCES = 1 for  player_id = 1278 in match_id = 2
    and so on..
    same is the case with 'RUNS' column but here RUNS are the SUM of each
    player_id's 'RUNS' before the current match
    Note: if some player_id does not exist in the table before the current
    match_ID then the query should return zero for that player_id ( as in 4th and
    5th columns of no_of_occurances and sum(runs) respectively)
    for example: in above data
    MATCH_ID    TEAM_ID  PLayer_ID RUNS   NO_OF_OCCURENCES    SUM(RUNS)
                                          BEFORE_THIS_MATCH   BEFORE_THIS_MATCH
                                          FOR_THIS_PLAYER_ID  FOR_THIS_PLAYER_ID
           9          2       1385 28     0                   0
    I hope this will clear my problem
    i would be extremely grateful if someone helps me out??
    here is sample ddl of the above data
    create table t
    (MATCH_ID     NUMBER(4) NOT NULL,
    TEAM_ID         NUMBER(4),
    PLAYER_ID     NUMBER(4),
    RUNS     NUMBER(3))
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (1, 2, 1228, 8);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (1, 2, 1203, 82);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (1, 2, 1316, 24);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (1, 1, 1150, 27);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (1, 1, 1278, 13);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (1, 1, 1243, 60);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (2, 1, 1278, 37);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (2, 1, 1291, 0);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (2, 1, 1243, 53);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (2, 2, 1228, 25);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (2, 2, 1285, 103);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (2, 2, 1316, 60);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (3, 2, 1228, 8);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (3, 2, 1285, 25);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (3, 2, 858, 43);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (3, 1, 1278, 52);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (3, 1, 1394, 6);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (3, 1, 1243, 31);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (4, 1, 1278, 61);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (4, 1, 1394, 6);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (4, 1, 1243, 3);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (4, 2, 1228, 41);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (4, 2, 1285, 40);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (4, 2, 858, 5);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (6, 2, 1228, 20);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (6, 2, 1285, 100);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (6, 2, 1408, 0);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (7, 2, 1228, 15);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (7, 2, 1285, 34);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (7, 2, 1408, 44);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (8, 2, 1228, 0);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (8, 2, 1420, 31);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (8, 2, 1340, 66);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (9, 2, 1420, 19);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values  (9, 2, 1385, 28);
    insert into t (MATCH_ID, TEAM_ID, PLAYER_ID, RUNS) values (9, 2, 1340, 0);regards
    ramis.

    Ramis,
    SQL> select * from tt;
      MATCH_ID    TEAM_ID  PLAYER_ID       RUNS
             1          2       1228          8
             1          2       1203         82
             1          2       1316         24
             1          1       1150         27
             1          1       1278         13
             1          1       1243         60
             2          1       1278         37
             2          1       1291          0
             2          1       1243         53
             2          2       1228         25
             2          2       1285        103
             2          2       1316         60
             3          2       1228          8
             3          2       1285         25
             3          2        858         43
             3          1       1278         52
             3          1       1394          6
             3          1       1243         31
             4          1       1278         61
             4          1       1394          6
             4          1       1243          3
             4          2       1228         41
             4          2       1285         40
             4          2        858          5
             6          2       1228         20
             6          2       1285        100
             6          2       1408          0
             7          2       1228         15
             7          2       1285         34
             7          2       1408         44
             8          2       1228          0
             8          2       1420         31
             8          2       1340         66
             9          2       1420         19
             9          2       1385         28
             9          2       1340          0
    36 rows selected.
    SQL> select tt.match_id,
           tt.team_id,
           tt.player_id,
           tt.runs,
           nvl(a.sum_player,0) OCC,
           nvl(b.sum_runs,0) SUM_RUNS
    from
    tt,
    (select a.match_id,a.team_id,a.player_id,a.runs,count(*) sum_player
    from tt a,
          (select match_id,player_id
           from   tt
           group by match_id,player_id) b
    where a.match_id>b.match_id
    and   a.player_id=b.player_id
    group by a.match_id,a.team_id,a.player_id,a.runs
    ) a,
    (select a.match_id,a.team_id,a.player_id,a.runs,sum(b.runs) sum_runs
    from tt a,
          (select match_id,player_id,runs
           from   tt) b
    where a.match_id>b.match_id
    and   a.player_id=b.player_id
    group by a.match_id,a.team_id,a.player_id,a.runs
    ) b
    where tt.match_id=a.match_id(+)
    and tt.team_id=a.team_id(+)
    and tt.player_id=a.player_id(+)
    and tt.match_id=b.match_id(+)
    and tt.team_id=b.team_id(+)
    and tt.player_id=b.player_id(+)
      MATCH_ID    TEAM_ID  PLAYER_ID       RUNS        OCC   SUM_RUNS
             1          1       1150         27          0          0
             1          1       1243         60          0          0
             1          1       1278         13          0          0
             1          2       1203         82          0          0
             1          2       1228          8          0          0
             1          2       1316         24          0          0
             2          1       1243         53          1         60
             2          1       1278         37          1         13
             2          1       1291          0          0          0
             2          2       1228         25          1          8
             2          2       1285        103          0          0
             2          2       1316         60          1         24
             3          1       1243         31          2        113
             3          1       1278         52          2         50
             3          1       1394          6          0          0
             3          2        858         43          0          0
             3          2       1228          8          2         33
             3          2       1285         25          1        103
             4          1       1243          3          3        144
             4          1       1278         61          3        102
             4          1       1394          6          1          6
             4          2        858          5          1         43
             4          2       1228         41          3         41
             4          2       1285         40          2        128
             6          2       1228         20          4         82
             6          2       1285        100          3        168
             6          2       1408          0          0          0
             7          2       1228         15          5        102
             7          2       1285         34          4        268
             7          2       1408         44          1          0
             8          2       1228          0          6        117
             8          2       1340         66          0          0
             8          2       1420         31          0          0
             9          2       1340          0          1         66
             9          2       1385         28          0          0
             9          2       1420         19          1         31
    36 rows selected.
    SQL> Is this do you want ?
    Nicolas.

  • Problem in SQL query in MDB database

    Hello all,
                        I am using mdb database and want to read specific time stamp record based on time stamp. I am using simple sql query but I am getting one error. Please let me know where I am making mistake(s). One error is operator missing. VI and database is attached.
    My query is -SELECT * FROM Downloaded_120 where col2 between 13:00:00 04-06-2013 and 14:00:00 04-06-2013
    Thanks.
    Kudos are always welcome if you got solution to some extent.
    I need my difficulties because they are necessary to enjoy my success.
    --Ranjeet
    Attachments:
    VI and database.zip ‏372 KB

    http://digital.ni.com/public.nsf/allkb/4012B21BA0876907862576110070FC0A
    You're missing the #s, too.
    Jim
    You're entirely bonkers. But I'll tell you a secret. All the best people are. ~ Alice

  • How to enable show SQL Query in Crystal report tool

    Hi,
    How can we enable the show SQL Query under Database tab in crystal report...
    We have a requirement to modify the SQL query in Crystal reports.
    Thanks,
    Gana

    Gana,
    CR has an "Add Command" feature that will allow you to use hand-coded SQL as your data source.
    Look at Defining an SQL Command in CR's online help (F1).
    If a command was used in the original report creation, it's a simple matter to go in and edit that SQL.
    If the report was not originally built w/ a Command you may find it difficult to switch over. In most cases it easier to start over from scratch, creating a new, blank report, that uses the command.
    Jason

  • Creating sql query using 3 tables

    There is database (supposed to be relational but it is not) and
    I cannot change the tables and it is very difficult to create SQL query.
    Please, help!
    First table T1
    a1 char 20
    time timestamp
    a2 char 7 (the same as t2.a2 when is trimmed)
    a3 number 5,0
    a4 number 8,4
    a5 number 7,3
    Second table T2
    a2 char 15
    b1 number 1,0
    b2 char 1,0
    b3 char 4
    a3 number 5,0
    Third table T3
    b3 char 4
    c1 char 4
    c2 number 7,3
    c3 number 8,4
    So, I need to create query (is it possible at all!?) from those 3 tables (a1, a2, b1,b2,b3, a4, a5, c2,c3
    where time is within interval (from, to), a3 in interval (1,2,3,4), t2.b3=t3.b3, t1.a2=t2.a2
    group by or sorted by a1, then, a2.
    Any suggestion is welcome!
    Thanks!
    By the way, I will use this query in Crystal Reports.

    As I already mentioned, I received another conditions for the query, and when I create a new one, I
    First table T1
    a1 number 5,0
    a2 char 7 (the same as t2.a2 when is trimmed)
    a3 number 8,4
    a4 number 7,3
    a_time timestamp
    Second table T2
    a2 char 15
    b1 number 1,0
    b2 char 1,0
    b3 char 4
    b4 char 4
    Third table T3
    c1 char 4
    c2 number 7,3
    c3 number 8,4
    b3 char 4
    where if c1='MIN' c2, c3 return min values,
    and if c1='MAX' c2,c3 return max values
    SQL query:
    select t1.a1, t1.a2, t2.b1, t2.b2, t2.b3, t1.a3, t1.a4, t3.c1,
    t3.c2, t3.c3, t2.b4
    from t1, t2, t3
    where (TRIM(t1.a2)=TRIM(t2.a2)
    and t1.a1=19
    and ((to_char(t1.a_time, 'YYYY-MM-DD') >= '2006-03-15')
    and (to_char(t1.a_time, 'YYYY-MM-DD') <= '2006-03-16')))
    and t3.b3=t2.b3)
    order by t1.a_time
    Result set:
    a1, a2, b1, b2, b3, a3, a4, c1('MAX'), c2', c3', b4
    a1, a2, b1, b2, b3, a3, a4, c1('MIN'), c2", c3", b4
    So when I executed SQL query it returns 2 rows for the same a2.
    I want to get 1 row for each a2 together with c3 (c4) min and c3 (c4) max values.
    How to name columns for c2 min and c2 max (the same for c3) in order to retreive 1 row per a2 value, something like this:
    a1, a2, b1, b2, b3, a3, a4, c2min, c2max, c3min, c3max, b4
    Thanks

  • Parsing and rewriting an SQL query

    Hi all,
    I need to rewrite bits of a valid PL/SQL query. In order to do so, I need semantic information about the query, such as "what are the table names columns are being selected from" or "do aggregate functions in a select provide column alias in order to use the query in +CREATE TABLE AS+ ...".
    Is it possible to somehow "ask" the Oracle parser for those bits of semantic info? I am using 9i.
    E.g.
    select X.ID, Y.NAME, SUM(ABS(Y.VALUE))
    from
    TABLE_X X,
    (select NAME, VALUE from TABLE_Z where DATE_STR = '20090101') Y
    where
    will become
    select X.ID, Y.NAME, SUM(ABS(Y.VALUE)) COL1
    from
    TABLE_X prefix. X,
    (select NAME, VALUE from prefix. TABLE_Z where DATE_STR = '20090101') Y
    where
    ...

    Thanks for your answers (which, unfortunately, do not give much hope)!
    +..so unfortunately you won't be able to use the 11g method introduced here (Anyhow still undocumented!).+
    Yes, that's very disappointing. I actually added the "has to be 9i compatible" remark after I found out the XML dump does not work on our servers - and read the manual page to realize why that's the case.
    I think you'd need to write your own, which will be extremely difficult and hard to maintain.*
    There is a BNF grammar of PL/SQL (homebrew, apparently - so no guarantees): http://www.antlr.org/grammar/1107752678378/PLSQLGrammar.g
    Now, if I only knew practical stuff about lexers and parsers and abstract syntax trees...

  • Newbie - need help with a SQL query for a bar chart

    Hi,
    I'm a new user on APEX with no real SQL knowledge and I'm trying to build a dashboard with charts into an existing APEX application. Based on another application, I have come up with the following SQL code:
    select null link
    , CATEGORY label
    , count (decode(PROJECT_STATUS,'1',PROJECT_ID))"Active"
    , count (decode(PROJECT_STATUS,'2',PROJECT_ID))"Complete"
    , count (decode(PROJECT_STATUS,'3',PROJECT_ID))"On Hold"
    , count (decode(PROJECT_STATUS,'4',PROJECT_ID))"Pipeline"
    , count (decode(PROJECT_STATUS,'5',PROJECT_ID))"Pending Review"
    from GRAPO_PROHEADTRK
    where (PROJECT_STATUS='1' or PROJECT_STATUS='2' or PROJECT_STATUS='3' or PROJECT_STATUS='4' or PROJECT_STATUS='5' or PROJECT_STATUS='6')
    group by CATEGORY
    Order by COUNT(PROJECT_ID) DESC
    The code from the other app was:
    select null link
    , FUNCTIONAL_AREA label
    , count (decode(PROJECT_STATUS,'Active',PROJECT_ID))"Active"
    , count (decode(PROJECT_STATUS,'Complete',PROJECT_ID))"Complete"
    , count (decode(PROJECT_STATUS,'On Hold',PROJECT_ID)) "On Hold"
    , count (decode(PROJECT_STATUS,'Recurring',PROJECT_ID))"Recurring"
    , count (decode(PROJECT_STATUS,'Pipeline',PROJECT_ID))"Pipeline"
    , count (decode(PROJECT_STATUS,'Not Approved',PROJECT_ID))"Not Approved"
    from PM_V2
    where LOB='S2S' and (FUNCTIONAL_AREA='Accounts Payable' or FUNCTIONAL_AREA='Expense' or FUNCTIONAL_AREA='Procurement' or FUNCTIONAL_AREA='Fixed Assets')
    group by FUNCTIONAL_AREA
    Order by COUNT(PROJECT_ID) DESC
    I'm getting a "Failed to parse SQL query!" error when I try to run validation.
    Is this enough info for some assistance? Any help would really be appreciated.
    Thanks,
    Rachel

    Hello,
    This is more of an SQL question, rather than specifically APEX-related. It's notable that you say: I'm a new user on APEX with no real SQL knowledgeWhich is fine (we all have to start somewhere, afterall) but it might be worth de-coupling the problem from APEX in the first instance. I'd also strongly recommend either taking a course, reading a book (e.g. http://books.google.co.uk/books?id=r5vbGgz7TFsC&printsec=frontcover&dq=Mastering+Oracle+SQL&hl=en#v=onepage&q=Mastering%20Oracle%20SQL&f=false) or looking for a basic SQL tutorial - it will save you a whole lot of heartache, I promise you. Search the oracle forums for the terms "Basic SQL Tutorial" and you should come up with a bunch of results.
    Given that you've copied your query template from another, I would suggest ensuring that the actual query works first of all. Try running it in either:
    * SQL Editor
    * SQL*Plus
    * an IDE like SQL Developer (available free from the OTN: http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html ) or TOAD or similar.
    You may find there are syntax errors associated with the query - it's difficult to tell without looking at your data model.
    select null link
    , CATEGORY label
    , count (decode(PROJECT_STATUS,'1',PROJECT_ID))"Active"
    , count (decode(PROJECT_STATUS,'2',PROJECT_ID))"Complete"
    , count (decode(PROJECT_STATUS,'3',PROJECT_ID))"On Hold"
    , count (decode(PROJECT_STATUS,'4',PROJECT_ID))"Pipeline"
    , count (decode(PROJECT_STATUS,'5',PROJECT_ID))"Pending Review"
    from GRAPO_PROHEADTRK
    where (PROJECT_STATUS='1' or PROJECT_STATUS='2' or PROJECT_STATUS='3' or PROJECT_STATUS='4' or PROJECT_STATUS='5' or PROJECT_STATUS='6')
    group by CATEGORYNote that your "order by" clause references a field called "PROJECT_ID", which exists in the old query but you've changed other similar references to "PROJECT_STATUS" - is it possible you've just missed this one? The perils of copy-paste coding I'm afraid...

  • Executing a column which has a sql query in a tabular form

    Hi,
    I have a tabular form which contains a column named as SQL which has sql statements in it. Without going to the SQL workshop in Apex i want to execute that query in the tabular form itself. For that i've created a page item which fetches the particular rows sql query and created a button 'EXECUTE'. When i click the execute button it should run the query and should display whether the query is correct or not and should show the error message.
    Can any one provide solution for this or whether there are any other ways to achive this scenario.
    With Regards
    Balaji.P.K

    Balaji P.K wrote:
    Can any one provide solution for this or whether there are any other ways to achive this scenario.Difficult as we have no idea what this "scenario" actually is. Go back several steps and explain in detail the problem this is supposed to solve.
    I have a tabular form which contains a column named as SQLBad idea. <tt>SQL</tt> is a PL/SQL reserved word. Using any token from Oracle namespaces as a database identifier is confusing/problematic.
    which has sql statements in it.Why? Where does this SQL come from? What is the source of the tabular form?
    Without going to the SQL workshop in Apex i want to execute that query in the tabular form itself.Explain the "execute that query in the tabular form itself" concept. Where do the results go?

  • Improve Efficiency of SQL Query (reducing Hash Match cost)

    I have the following SQL query that only takes 6 seconds to run, but I am trying to get it down to around 3 seconds if possible. I've noticed that there are 3 places in the Execution Plan that have pretty high costs. 1: Hash Match (partial aggregate) - 12%.
    2: Hash Match (inner join) - 36%. 3: Index Scan - 15%.
    I've been researching Hash Match for a couple days now, but I just don't seem to be getting it. I can't seem to figure out how to decrease the cost. I've read that OUTER APPLY is really inefficient and I have two of those in my query, but I haven't been
    able to figure out a way to get the results I need without them. 
    I am fairly new to SQL so I am hoping I can get some help with this.
    SELECT wi.WorkItemID,
    wi.WorkQueueID as WorkQueueID,
    wi.WorkItemTypeID,
    wi.WorkItemIdentifier,
    wi.DisplayIdentifier,
    wi.WorkItemStatusID,
    wi.SiteID,
    wi.AdditionalIdentifier,
    wi.WorkQueueDescription,
    wi.WorkItemTypeDescription,
    wi.WorkQueueCategoryDescription,
    wi.Active,
    wi.CheckedOutOn,
    wi.CheckedOutBy_UserID,
    wi.CheckedOutBy_UserName,
    wi.CheckedOutBy_FirstName,
    wi.CheckedOutBy_LastName,
    wi.CheckedOutBy_FullName,
    wi.CheckedOutBy_Alias,
    b.[Description] as BatchDescription,
    bt.[Description] as BatchType,
    bs.[Description] as PaymentBatchStatus,
    b.PostingDate AS PostingDate,
    b.DepositDate,
    b.BatchDate,
    b.Amount as BatchTotal,
    PostedAmount = ISNULL(PostedPayments.PostedAmount, 0),
    TotalPayments = ISNULL(PostedPayments.PostedAmount, 0), --Supporting legacy views
    TotalVariance = b.Amount - ISNULL(PostedPayments.PostedAmount, 0), -- ISNULL(Payments.TotalPayments, 0),
    PaymentsCount = ISNULL(Payments.PaymentsCount, 0),
    ISNULL(b.ReferenceNumber, '') AS PaymentBatchReferenceNumber,
    b.CreatedOn,
    b.CreatedBy_UserID,
    cbu.FirstName AS CreatedBy_FirstName,
    cbu.LastName AS CreatedBy_LastName,
    cbu.DisplayName AS CreatedBy_DisplayName,
    cbu.Alias AS CreatedBy_Alias,
    cbu.UserName AS CreatedBy_UserName,
    b.LastModifiedOn,
    b.LastModifiedBy_UserID,
    lmbu.FirstName AS LastModifiedBy_FirstName,
    lmbu.LastName AS LastModifiedBy_LastName,
    lmbu.DisplayName AS LastModifiedBy_DisplayName,
    lmbu.Alias AS LastModifiedBy_Alias,
    lmbu.UserName AS LastModifiedBy_UserName,
    0 AS VisitID, --Payment work items are not associated with VisitID, but it is a PK field on all the Work Queue view models...for now...
    0 AS RCMPatientID, --Payment work items are not associated with RCMPatientID, but it is a PK field on all the Work Queue view models...for now...
    0 AS PatientID
    FROM Account.PaymentBatch AS b (NOLOCK)
    INNER JOIN ViewManager.WorkItems AS wi (NOLOCK)
    ON wi.WorkitemIdentifier = b.PaymentBatchID
    AND wi.WorkItemTypeID = 3
    INNER JOIN Account.PaymentBatchStatus AS bs (NOLOCK)
    ON b.PaymentBatchStatusID = bs.PaymentBatchStatusID
    LEFT JOIN Account.PaymentBatchType bt (NOLOCK)
    ON b.PaymentBatchTypeID = bt.PaymentBatchTypeID
    INNER JOIN ViewManager.[User] AS cbu (NOLOCK)
    ON b.CreatedBy_UserID = cbu.UserID
    INNER JOIN ViewManager.[User] AS lmbu (NOLOCK)
    ON b.LastModifiedBy_UserID = lmbu.UserID
    LEFT JOIN (
    SELECT p.PaymentBatchID
    , SUM(p.Amount) AS TotalPayments
    , COUNT(0) AS PaymentsCount
    FROM Account.Payment AS p (NOLOCK)
    WHERE p.PaymentTypeID = 1
    AND ISNULL(p.Voided, 0) = 0
    GROUP BY p.PaymentBatchID
    ) AS Payments ON b.PaymentBatchID = Payments.PaymentBatchID
    LEFT JOIN (
    SELECT p.PaymentBatchID
    , SUM(pa.Amount) AS PostedAmount
    FROM Account.Payment AS p (NOLOCK)
    INNER JOIN Account.PaymentAllocation AS PA (NOLOCK)
    ON p.PaymentID = pa.PaymentID
    AND (pa.AllocationTypeID = 101 OR pa.AllocationTypeID = 111)
    WHERE p.PaymentTypeID = 1
    AND ISNULL(p.Voided, 0) = 0
    GROUP BY p.PaymentBatchID
    ) AS PostedPayments ON b.PaymentBatchID = PostedPayments.PaymentBatchID
    OUTER APPLY (
    SELECT
    P.PaymentBatchID,
    SUM(CASE WHEN P.PaymentTypeID = 1 THEN 1 ELSE 0 END) as PaymentsCount --only count regular payments not adjustments
    FROM
    Account.Payment p (NOLOCK)
    WHERE
    p.PaymentBatchID = b.PaymentBatchID
    AND p.PaymentTypeID IN (1,2) AND ISNULL(p.Voided, 0)= 0
    GROUP BY
    P.PaymentBatchID
    ) payments
    OUTER APPLY (
    SELECT
    P.PaymentBatchID,
    SUM(pa.Amount) as PostedAmount
    FROM
    Account.PaymentAllocation pa (NOLOCK)
    INNER JOIN
    Account.Payment p (NOLOCK) ON pa.PaymentID = p.PaymentID
    INNER JOIN
    Account.AllocationType t (NOLOCK) ON pa.AllocationTypeID = t.AllocationTypeID
    WHERE
    p.PaymentBatchID = b.PaymentBatchID
    AND p.PaymentTypeID IN (1,2)
    AND ISNULL(p.Voided, 0)= 0
    --AND (t.Credit = 0
    --OR (t.Credit <> 0 And Offset_PaymentAllocationID IS NULL AND (SELECT COUNT(1) FROM Account.paymentAllocation pa2 (NOLOCK)
    -- WHERE pa2.PaymentID = pa.PaymentID AND pa2.AllocationTypeID IN (101, 111)
    -- AND pa2.Offset_PaymentAllocationID IS NULL) > 0))
    GROUP BY
    P.PaymentBatchID
    ) PostedPayments

    The percentages you see are only estimates and may not necessarily not reflect where the real bottleneck is. Particularly, if it is due to a misestimate somewhere.
    To be able to help you improve the performance, we need to see the CREATE TABLE and CREATE INDEX statements for the tables. We also need to see the actual query plan. (In XML format, not a screen shot.) Posting all this here is not practical, but you could
    upload it somewhere. (Dropbox, Google Drive etc.)
    Be very careful with the NOLOCK hint. Using the NOLOCK hint casually lead to transient erratic behaviour which is very difficult to understand. Using it consistenly through a query like you do, is definitely bad practice.
    Erland Sommarskog, SQL Server MVP, [email protected]

  • Does SQL Query run faster with/without Conditions....

    Hi All, forgive my novice question.
    Was just wondering" In general if we run a SQL query on a single table; does my query run faster if there are multiple where conditions? or without. What happens if the conditions increase? My table is a big one with 5 million rows and some bitmap indexes defined on it.
    Thanks,
    Kon

    I think it's difficult to give general rule because there are too much dependencies on the fact that the columns are indexed or not, on the way tables and indexes statistics are computed or not, on the possible session or instance parameters that the optimizer may use, on the Oracle version, etc.
    Message was edited by:
    Pierre Forstmann

  • HTML-DB 1.6 SQL Query (Concatenate two columns)

    Hi everyone,
    My query look like this. But I got this message
    ORA-01403: no data found
    Sql query(.....returning ... sql
    What I can do ? I want to concatenate my two columns in one.
    <pre>
    -----Résultats de la recherche
    BEGIN
    DECLARE
    requete varchar2(5000);
    v_code_type varchar2(2000);
    v_ordre varchar2(500);
    BEGIN
    :P1_NOM_BENEFICIAIRE := REPLACE(:P1_NOM_BENEFICIAIRE,' ', '%');
    :P1_NOM_BENEFICIAIRE := REPLACE(:P1_NOM_BENEFICIAIRE,'-', '%');
    requete := 'SELECT
    (FEUI.NOM_BENEFICIAIRE || ''--'' || FEUI.PRENOM_BENEFICIAIRE) ABC,
    FEUI.VALEUR_ID_BENEFICIAIRE,
    FEUI.MONTANT,
    FEUI.CODE_TYPE_DECLARATION,
    FEUI.ANNEE_FISCALE,
    FEUI.CODE_ENTITE,
    FEUI.ID_FEUILLET_IMPOT,
    FEUI.ID_AMENDEMENT,
    FEUI.NO_RELEVE_ORIGINAL_PROV,
    FEUI.ACRONYME_ID_BENEFICIAIRE,
    TYPD.SIGNIFICATION
    FROM
    S29_FEUILLET_IMPOT FEUI,
    S29_TYPE_DECLARATION TYPD
    WHERE
    (TYPD.CODE = FEUI.CODE_TYPE_DECLARATION) AND
    (ANNEE_FISCALE = :P1_ANNEE_FISCALE) AND
    (CODE_ENTITE LIKE ''%'' || SUBSTR(:P1_CODE_ENTITE,1,3) || ''%'') OR
    (CODE_ENTITE = SUBSTR(:P1_CODE_ENTITE,1,3))
    AND
    ((:P1_NAS IS NULL) OR (:P1_NAS = VALEUR_ID_BENEFICIAIRE))
    AND
    ((:P1_NEQ IS NULL) OR (:P1_NEQ = VALEUR_ID_BENEFICIAIRE))
    AND
    ((:P1_NOM_BENEFICIAIRE IS NULL) OR
    ((UPPER(NOM_BENEFICIAIRE) || UPPER(PRENOM_BENEFICIAIRE))
    LIKE ''%'' || UPPER(:P1_NOM_BENEFICIAIRE) || ''%'') OR
    ((UPPER(PRENOM_BENEFICIAIRE) || UPPER(NOM_BENEFICIAIRE))
    LIKE ''%'' || UPPER(:P1_NOM_BENEFICIAIRE) || ''%'') OR
    ((UPPER(RAISON_SOCIALE_LIGNE_1) || UPPER(RAISON_SOCIALE_LIGNE_2))
    LIKE ''%'' || UPPER(:P1_NOM_BENEFICIAIRE) || ''%'') OR
    ((UPPER(RAISON_SOCIALE_LIGNE_2) || UPPER(RAISON_SOCIALE_LIGNE_1))
    LIKE ''%'' || UPPER(:P1_NOM_BENEFICIAIRE) || ''%'') OR
    (UPPER(SUBSTR(COORDONNEE_BENEFICIAIRE_SYGBEC,1,80))
    LIKE ''%'' || UPPER(:P1_NOM_BENEFICIAIRE) || ''%'')
    IF (:P1_CODE_RELEVE = 'A') OR
    (:P1_CODE_RELEVE = 'M') OR
    (:P1_CODE_RELEVE = 'C') THEN
    v_code_type := '(
    (FEUI.CODE_TYPE_DECLARATION = ''A'') OR
    (FEUI.CODE_TYPE_DECLARATION = ''M'') OR
    (FEUI.CODE_TYPE_DECLARATION = ''C'')
    else
    v_code_type :=
    (:P1_CODE_RELEVE = CODE_TYPE_DECLARATION) OR
    (:P1_CODE_RELEVE = ''%'')
    end if;
    WWV_FLOW.DEBUG('V_CODE_TYPE EST EGALE A :' || v_code_type);
    v_ordre := 'ORDER BY NOM_BENEFICIAIRE, VALEUR_ID_BENEFICIAIRE,
    ID_FEUILLET_IMPOT, ID_AMENDEMENT';
    requete := requete || ' AND ' || v_code_type || v_ordre;
    RETURN requete;
    END;
    END;
    </pre>
    Thanks. Bye

    Thank you Scott,
    I'm sorry, I should present you a reduce sql command.
    I had construct my "long" sql command without concatenation. But, I decide to add a column just beside the other column.
    After sending my message on OTN, I tried something else, I decided to copy my sql command without concatenation in an other region. I changed my sql command in the new region by adding my new column and this ''--'' and it works very well. Sometimes, It's really difficult to understand why it doesn't.
    Thanks. Bye,

  • Determining the parameters passed in a Discoverer Report through SQL query

    Hi,
    I want to know the parameters passed in a Discoverer Report through a SQL query.
    i.e if we pass the Report name (Workbook Name) then we get the paramaters used .
    Is there any way we can do this.
    Any help will be really appreciated.
    Thanx in advance
    Ankur

    Hi
    You can indeed get the parameters from the EUL5_QPP_STATS table, although they are extremely difficult to get at.
    Look at this script:
    SELECT
    QS.QS_DOC_OWNER    USER_NAME,
    QS.QS_DOC_NAME     WORKBOOK,
    QS.QS_DOC_DETAILS  WORKSHEET,
    TRUNC(QS.QS_CREATED_DATE) DOC_DATE,
    *(LENGTH(TO_CHAR(EUL5_GET_ITEM_NAME(QS.QS_ID)))+1)/9 ITEMS,*
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),1,  6)) ITEM1,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),10, 6)) ITEM2,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),19, 6)) ITEM3,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),28, 6)) ITEM4,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),37, 6)) ITEM5,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),46, 6)) ITEM6,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),55, 6)) ITEM7,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),64, 6)) ITEM8,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),73, 6)) ITEM9,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),82, 6)) ITEM10,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),91, 6)) ITEM11,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),100,6)) ITEM12,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),109,6)) ITEM13,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),118,6)) ITEM14,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),127,6)) ITEM15,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),136,6)) ITEM16,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),145,6)) ITEM17,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),154,6)) ITEM18,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),163,6)) ITEM19,
    EUL5_GET_ITEM(SUBSTR(EUL5_GET_ITEM_NAME(QS.QS_ID),172,6)) ITEM20
    FROM
    EUL5_QPP_STATS QS--,
    --   APPS.FND_USER          USR
    WHERE
    --   QS.QS_DOC_OWNER = '#' || USR.USER_ID AND
    *(LENGTH(TO_CHAR(EUL5_GET_ITEM_NAME(QS.QS_ID)))+1)/9 < 21*
    AND QS.QS_CREATED_DATE > '01-JAN-2007'
    What this does is return the first 20 items used in a worksheet. It does this by passing 6 characters at a time out of a cusror made up by concatenating QS_DBMP0 to QS_DBMP7 to get the Dimensions and then again by concatenating QS_MBMP0 to QS_MBMP7 to get the Measures. Having got that cursor it then takes each 6 characters and passes them to a nibble algorithm to decode the actual item. The code is extremely difficult to follow.
    I mention this because other fields in the same table are QS_JBMP0 to QS_JBMP7 which I believe are Joins, and QS_FBMP0 to QS_FBMP7 which look like Filters (aka parameters) being used. I think the QS stands for Query Statistics and BMP for bitmap. Somewhere in the EUL5.SQL script is the key to unlocking this.
    Good luck. The reason I say this will become apparent when you look inside EUL5.SQL.
    Best wsihes
    Mcihael

  • Disable SQL query to celltext content in web form of Hyperion Planning

    We are using Hyperion Planning ver 11.1.1.1. We found that there is a SQL query executed for each cell in the web form to query the SQL Server metadata database and check whether there are some celltext associated with this cell.
    As we did not implement the celltext function to our end users, we would like to disable this checking. As some of our web forms have more than 10000 cells, generate 10000 SQL queries to the metadata database definitely is a performance issue.
    We have asked Oracle team whether we can disable the SQL query but the answer is that no such option exist.
    Anyone experienced this case and have workaround solution?
    Thanks!

    Hyperion user wrote:
    Alp Burak wrote:
    Hi,
    We had faced the same issue a few years ago. One of our geeks had done a change in either Enterdata.js or Enterdata.jsp which disabled form cell validation. I don't currently have the code with me but it wasn't a big change really, remarking a function could be doing the trick.
    I don't think this is officially recommended by Oracle though.
    AlpThanks for your advice. We will try to locate the enterdata.jsp and enterdata.js and found out where the SQL being executed.We found out the Enterdata.js under the deployment directory of Weblogic. However it is over 400KB size and many many lines of codes. We think that it is very difficult to locate where should be customized to remove the SQL checking on cell content.
    \\Hqsws04\hyperion\deployments\WebLogic9\servers\HyperionPlanning\webapps\HyperionPlanning

  • Retrieve SQL Query from report without RAS.

    We have a fat client application which uses Crystal Reports.  We upgraded from the RDC/ActiveX viewer to the .Net SDK/.Net Viewer.  One feature that we miss is that we used to read the SQL Query that a report used and wrote it to our log file.  This helped with debugging and with troubleshooting problems in the field.
    Since we only deploy the freely distributable Crystal Reports model and I don't think that RAS falls into this category is there a way which we can read the SQL Query from a report?  If not, could you add this to a list of requested features for future versions.
    I understand why you removed the ability to set the SQL query, but simply reading it does add value.  Maybe it is difficult for you to return this before the report is run in which case giving us the ability to read the value after the report has been run would also be fine.
    Alternatively some sort of event that is fired each time a query is executed would also be helpful as this would allow Crystal Reports clients to monitor SQL from sub-reports.  You could even build a robust logging mechanism which could report additional information (i.e. number of rows returned, formula evaluations, or anything related to report execution).  All of this would make troubleshooting report issues easier for those of us who use Crystal Reports.

    Need to know what version of CR you are using?
    You can use InProc RAS, it comes with CR and is distributed with the runtime files.
    If you are using CR Basic or the version that comes with Visual Studio .NET then no this will not be added to that product line. It is basic functionality only. You will need to upgrade to a Developer version of Crystal reports to take advantage of the the RCAPI features as well as more general API's.
    There is logging for our DB drivers but the log files get very large. If you use ODBC then you have the option to turn on tracing also. Using RAS you don't need to turn on logging as you can get the SQL. This won't be added either.
    Thank you
    Don

Maybe you are looking for