'ANY' clause with a function

Hello Folks,
I have a function that takes an input (Nallax) and outputs ('N', 'A', 'L', 'L', 'A', 'X')
when I try to use it in a join condition, it really doesn't work example
select * from DUAL
where dummy = any FUNCTION('XASDCF')
-- returns null
whereas
select * from DUAL
where dummy = any ('X', 'Y', 'Z')
returns
'X'
any reason why this is not working ??
Thanks in advance

Can you provide the function code?
If I had to guess your funtion is returning a VARCHAR2 string of the form:
'A','B','C'Which would then be interpreted by Oracle as:
some_col = ANY(:bind_variable)That return value is being bound to a single VARCHAR2 variable that contains the string from your function.
You probably need to look at: Varying in lists...
Edited by: Centinul on Mar 9, 2012 1:47 PM

Similar Messages

  • Having clause with Analytic function

    can you pls let me know if we can use HAVING clause with analytic function
    select eid,empno,sum(sal) over(partition by year)
    from employee
    where dept = 'SALES'
    having sum(sal) > 10000I m getting error while using the above,
    IS that we can use HAVING clause with partition by
    Thanks in advance

    Your having clause isn't using an analytical function, is using a regular aggregate function.
    You also can't use analytical functions in the where clause or having clause like that as they are windowing functions and belong at the top of the query.
    You would have to wrap the query to achieve what you want e.g.
    SQL> ed
    Wrote file afiedt.buf
      1  select deptno, total_sal
      2  from (
      3        select deptno,sum(sal) over (partition by deptno) as total_sal
      4        from   emp
      5       )
      6  group by deptno, total_sal
      7* having total_sal > 10000
    SQL> /
        DEPTNO  TOTAL_SAL
            20      10875
    SQL>

  • I have photos in a DVD. In order to visualize them in iPhoto, must I necessarily import them? Can't I see the pictures from the media without importing? If not, is there any application with this functionality? I dont't like pre-visualization for photos.

    I have photos in a DVD. In order to visualize them in iPhoto, must I necessarily import them? Can't I see the pictures from the media without importing? If not, is there any application with this functionality? I need an app that allows me to navigate through the photos without selecting all of them. I realy dont't like pre-visualization for photos...

    In order to visualize them in iPhoto, must I necessarily import them?
    iPhoto is a Database. Before it can work with any data it must be imported to the database, so yes it is necessry to import them.
    Can't I see the pictures from the media without importing?
    See above.
    If not, is there any application with this functionality?
    Hundreds. Any image viewer will do the job. On your Mac the Finder has QuickLook and there is the Preview app as well. Online you can download any of these:
    http://www.macupdate.com/find/mac/image%20viewer

  • Between clause with DECODE function.

    Hi All,
    I have one table which has object, date and quantity columns, Now based on date range I can find out the objects and quantity but the question is: I want a query which returns all the objects and should show quantity 0(zero or null) for those objects which don't falls under that date range. So I thought to use a decode function but it only uses the relational operation, I thought something like this but it's wrong,
    select object,decode(created_date,BETWEEN '01/01/2008' TO '08/01/2008',quantity,0) from table;
    Does anyone have any idea how can I make this work in single sql statement?
    Thanks for your help.

    select object,decode(created_date,BETWEEN '01/01/2008' TO '08/01/2008',quantity,0) from table;
    Does anyone have any idea how can I make this work in single sql statement?If you're still interested in using DECODE over Case when, please try this.
    Check for employees hired between 6/17/1987 and 9/30/1987
    SQL> select first_name||' '||last_name as emp_name, hire_date,
      2         decode(sign((to_date('06/17/1987','MM/DD/YYYY')-1)-hire_date)
      3           + sign((to_date('09/30/1987','MM/DD/YYYY')+1)-hire_date)
      4                   ,0,'Between','Not between') as IsBetween
      5    from employees
      6   where hire_date <to_date('01/01/1991','MM/DD/YYYY')
      7  /
    EMP_NAME                                       HIRE_DATE ISBETWEEN
    Steven King                                    17-JUN-87 Between
    Neena Kochhar                                  21-SEP-89 Not between
    Alexander Hunold                               03-JAN-90 Not between
    Jennifer Whalen                                17-SEP-87 BetweenMessage was edited by:
    Bobbydj

  • Integer parameters not acceptible in WHERE clause with TO_DATE function.

    Please tell me why the following query is not acceptible in a BI Publisher (11.1.1.5) data set.
    SELECT * FROM all_tables
    WHERE
    LAST_ANALYZED >= TO_DATE(:yyyy || '-' || :startmo || '-' || :startday, 'YYYY-MM-DD')
    AND LAST_ANALYZED < TO_DATE(:yyyy || '-' || :endmo || '-' || :endday, 'YYYY-MM-DD')
    Attempting to save the query results in:
    "ORA-01858: a non-numeric character was found where a numeric was expected"
    It doesn't work even if you surround the parameters with TO_NUMBER().
    The query clearly works in SQL Developer.

    Also, neither of the following work, even though they both work in SQL Developer:
    SELECT table_name, last_analyzed
    FROM all_tables
    WHERE
    LAST_ANALYZED >= (TO_DATE(:start_date, 'MM-DD-YYYY') + 1)
    SELECT table_name, last_analyzed
    FROM all_tables
    WHERE
    LAST_ANALYZED >= (TO_DATE(:start_date, 'MM-DD-YYYY') + INTERVAL '1' DAY)
    These don't work in BIP even when the start_date parameter has a format set to the default MM-dd-yyyy. So to sum up, I can't use date parameters, nor can I use integers passed as date parts. What the fuck am I supposed to do?
    After four years, your fucking date parameters still don't work! Fuck off Oracle. I'm going home, frustrated with your garbage as usual.

  • CVI Distibution with Database Functions

    I am working with CVI2012.  I have an application that uses the SQL toolkit.  I made a distribution and installed it on a target machine (Windows 7 with the CVI2012 runtime engine).  However when I install the application on another target (also a Windows 7 machine and also with the CVI2012 runtime engine) I cannot not initialize the database.  The application fails on a call to DBInit(DB_INIT_MULTITHREADED).  I get an error of -100: DB_FAILED_TO_LOAD_DLL.   (I am using  SQL Anywhere 11.)  I know that the ODBC configuration is the same on both targets and I can access the DB manually through Interactive SQL.     
    I am baffled by this.  After some searching I found that the file "cvidb32.dll" was not in the system32 directory so I copied that over.  Still no joy.  (I would also expect this to be installed when I installed the RTE.  I did not have to manually copy this file on to the computer where the application does work.)  I have checked the forums here have not found a solutionl.  One post discussed running sqldistsupp.exe after the installer.  I tried this and got an error "Driver's ConfigDSN, ConfigDriver or ConfigTranslator failed in function SQLConfigDataSource".  Another post suggested simply adding CVISQLShared.msm to the installer.  I tried this but it did not fixt the problem.  I also tried downloading the SQL Distribution Toolkit help and it turns out the file has no content under the help topics.
    Clearly something is missing but I don't know what.  I tried running Dependency Walker to find the missing DLL but it did not show anything was missing. 
    Thoughts?
    Thanks.

    I have not distributed any applications with sql functionality, but looking at the following links it seems it can be a little tricky:
    Why Do I Get Errors When I Try to Run a Distribution of a LabWindows™/CVI™ Program Which Uses the SQ...
    LabWindows™/CVI SQL Toolkit 2.2 Readme
    S. Eren BALCI
    www.aselsan.com.tr

  • Where-Clause with function(entered static parameter)

    Hello,
    I have no clue on the way to deal with this issue.
    Basically, for performance, I removed a join with a table, and replaced it by a call to a function within the where clause. This function only convert the entered date into an id, in order to compare with the id in the selected table.
    I knew (I think I'm right!!) that if I put a function into a where-clause, then the function is called at each row.
    As the parameter of this function is a Discoverer parameter, and therefore, it's a static value, I wanted to know whether with Discoverer, there would be a way to convert the entered Discoverer parameter value into a constant that I could use within my where-clause.
    To summarise, hete is the face of my query, at the moment:
    SELECT myColumns
    FROM myTables
    WHERE thisID < myConvertedDate(:RefDate);
    I would like to do this :
    The User enters the :RefDate, I convert it and save the result into a constant.
    Then, my query would look like :
    SELECT myColumns
    FROM myTables
    WHERE thisID < myConstantFromDate;
    I hope that my explanation is clear, and that one of you will be able to advise me.
    Thanks,
    Olivier

    Hello Nigel,
    I am not too sure that the function is called at each row. This is just my thought, from my "average" knowledge of SQL. We cannot run tkprof at the office, in order to get a better understanding.
    And also, the fact that goes towards this direction is that, when I add the call to my function in the where-clause, I have the impression that the query runs more slowly than without the call.
    I reckon that it would be great if the optimizer notices that the function is called with the same value, and returns always the same result.
    Thanks for your comments,
    Olivier

  • I don't use Photoshop - looking for software with similar functionality to Photoshop's Pixelbender / Oil Painting.  Any suggestions?

    I don't use Photoshop, I'm an Aperture guy.
    I'm looking for software with similar functionality to Photoshop's Pixelbender / Oil Painting. 
    I'm especially interested in the bending of the pixels, along the lines of impressionist paintings - think van Gogh.
    Any suggestions?

    If you are interested in computer simulated drawing and painting effects, have a look at the "ToonIt!" plug-in for Aperture. This will do some of the basic work for you, but you will have to do quite a lot of editing afterwards, to turn the image into a piece of art.
    It might be easier, to do most of the drwing and painting yourself in the first place - ArtRage Deluxe is very versatile, if you have a large trackpad and pen.
    For example: Applying a light ToonIt! effect "Impressionist2": The diagonal
    cross-pattern is due to "Demo" mode - I have not yet bought the plug-in - it is rather expensive:
    The original:

  • My ipad has frozen leaving candy crush, I tried to put it off using the on/off button, but now I have a black screen with no function. I can't read the serial number on the back as it is tiny.! any ideas?

    My Ipad mini has frozen leaving Candy crush. I tried to put it off using the on/off button, now the screen is black with no function. I can hear Siri if I push the control. It is charged. Any ideas? I can't read the very small printed serial number on the back so can't use the Apple help as they require the serial number.

    Hold down the sleep/wake button and the home button for ~10 seconds, or until the apple logo appears.  This is called a reset.
    HTH

  • Anyone have a fully functioning thread server ? (any server with the client

    Anyone have a fully functioning thread server ? (any server with the client source code) ? can u share it to me ? please ? I'm very hard to find a fully functinal example....
    thx ........

    Why not just write one yourself, it's not that hard. If you can't, then maybe you should learn how to write one before you try to use one.

  • Any class with repalces the functionality of the function module

    hi all,
    Can anybody let us know is there is any class with method that replaces the functionality of the Function module REUSE_ALV_BLOCK_LIST_APPEND' .
    Regards,
    Madhavi

    hi ,
    Can anybody know me how to add multiple ALV grtids into one  Custom container.
    I want to add multiple Grids into one custom container.
    Regards,
    Madhavi

  • How to bind an aggregated list to a variable in an IN or ANY clause

    Hello, and thank you for helping -
    I have a process that involves a parameter assertion, the result of which is a string for an IN or ANY clause. I am not able to figure out how to bind the result of the assertion to to executable SQL. The actual business process is long and laborious and, I decided, not worth explaining for the purpose of this forum. I have abstracted the process into some dummy data. The goal is to bind v_any_condition to :a. I could certainly build the SQL without the binding, but I would be very interested to know just the same what I am missing here (I'm sure something simple, or just a basic SQL rules that I have missed).
    Thanks!
    DECLARE
    -- The goal is to bind v_any_condition in an ANY clause
    v_any_condition VARCHAR2(30) DEFAULT '4,9,d'; -- the three rows to return from the sample data
    -- v_any_condition VARCHAR2(30) DEFAULT DBMS_ASSERT.ENQUOTE_LITERAL('4')||','||
    -- DBMS_ASSERT.ENQUOTE_LITERAL('9')||','||
    -- DBMS_ASSERT.ENQUOTE_LITERAL('d');
    v_sql varchar2(2048);
    -- We'll create a simple cursor of VARCHAR2(1) just like DUAL.DUMMY
    rc sys_refcursor;
    rc_record dual%ROWTYPE;
    v_counter NUMBER DEFAULT 0;
    BEGIN -- Build the SQL. In this example, we decompose an aggregated string
    -- containing the first 16 hex numbers. The result is a simple 16-row table
    -- from which we will attempt to return the three rows by binding
    -- v_any_condition to ANY in the SQL below.
    v_sql := '
    SELECT token
    FROM ( -- materialize the list
    WITH t AS (SELECT ''0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f'' AS txt FROM DUAL)
    -- then decompose the list into rows
    SELECT REGEXP_SUBSTR (txt, ''[^,]+'', 1, LEVEL) AS token
    FROM t
    CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(txt,''[^,]*''))+1
    /* WHERE token = ANY(''4'',''9'',''d'') */ -- hardcoding works
    WHERE token = ANY(:a) -- binding does not work; the goal is to get this to work '
    OPEN rc FOR v_sql USING v_any_condition; -- when binding, we never even enter the loop
    LOOP
    v_counter := v_counter + 1;
    FETCH rc INTO rc_record;
    EXIT WHEN rc%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE (v_counter || ': '||rc_record.dummy);
    END LOOP;
    END;
    Edited by: ltps on Jan 9, 2012 4:28 PM

    Superb. Thank you very much.
    For anyone who is interested in the solution I chose, here is the revised SQL that accepts a list as a bind variable after casting the list as a table. The "split string" code is below that. (What look like double quotes in the block below are actually consecutive single quotes.)
    DECLARE
    v_any_condition VARCHAR2(30) DEFAULT '4,9,d';
    v_sql varchar2(2048);
    rc sys_refcursor;
    rc_record dual%ROWTYPE;
    v_counter NUMBER DEFAULT 0;
    BEGIN
    v_sql := '
    SELECT token
    FROM (
    WITH t AS (SELECT ''0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f'' AS txt FROM DUAL)
    -- then decompose the list into rows
    SELECT REGEXP_SUBSTR (txt, ''[^,]+'', 1, LEVEL) AS token
    FROM t
    CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(txt,''[^,]*''))+1
    , TABLE(CAST(XX_SPLIT_STRING(:a,'','') AS XX_SPLIT_TABLE)) cst
    WHERE cst.column_value = token'
    OPEN rc FOR v_sql USING v_any_condition;
    LOOP
    v_counter := v_counter + 1;
    FETCH rc INTO rc_record;
    EXIT WHEN rc%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE (v_counter || ': '||rc_record.dummy);
    END LOOP;
    END;
    -- And the main SQL, just for clarity:
    SELECT token
    FROM (
    WITH t AS (SELECT '0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f' AS txt FROM DUAL)
    SELECT REGEXP_SUBSTR (txt, '[^,]+', 1, LEVEL) AS token
    FROM t
    CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(txt,'[^,]*'))+1
    , TABLE(CAST(XX_SPLIT_STRING('4,9,d',',') AS XX_SPLIT_TABLE)) cst
    WHERE cst.column_value = token;
    CREATE OR REPLACE FUNCTION XX_SPLIT_STRING (
    p_string VARCHAR2
    , p_delimiter VARCHAR2 DEFAULT ','
    RETURN XX_SPLIT_TABLE PIPELINED
    IS
    l_idx PLS_INTEGER;
    l_string VARCHAR2(32767) := p_string;
    l_value VARCHAR2(32767);
    BEGIN
    LOOP
    l_idx := INSTR ( l_string, p_delimiter );
    IF l_idx > 0 THEN
    pipe ROW ( SUBSTR ( l_string, 1, l_idx - 1 ) );
    l_string := SUBSTR ( l_string, l_idx + LENGTH (p_delimiter) );
    ELSE
    PIPE ROW ( l_string);
    EXIT;
    END IF;
    END LOOP;
    RETURN;
    END XX_SPLIT_STRING;

  • Need valuable guidance to make a peformance oriented query, trying to replace unions with analytical function

    Hi,
       Please find below table structure and insert scritps. Requesting for vluable help.
    create table temp2 (col1 number,col2 varchar2(10),col3 number,col4 varchar2(20));
    insert into temp2 values (1,'a',100,'vvv');
    insert into temp2 values (2,'b',200,'www'); 
    insert into temp2 values (3,'c',300,'xxx');
    insert into temp2 values (4,'d',400,'yyy');   
    insert into temp2 values (5,'e',500,'zzz');
    insert into temp2 values (6,'f',600,'aaa');
    insert into temp2 values (7,'g',700,'bbb'); 
    insert into temp2 values (8,'h',800,'ccc');
    I am trying to get same output, what we get from below UNION query with ANALYTICAL Function.
    select * from temp2 where col1 in (1,2,3,4,5)
    union
    select * from temp2 where col1 in (1,2,5,6)
    union
    select * from temp2 where col1 in (1,2,7,8);
    I am seeking help by this dummy example to understand the concept, how can we use analytical functional over UNION or OUTER JOINS.
    In my exact query, I am using same table three times adding UNION clause. here also we scan temp2 three times, so for bulky tables using 'union'  would be hampering query's performance
    It means i go with three time scans of same table that is not performance oriented. With the help of above required concept, i will try to remove UNIONs from my exact query.
    Thanks!!

    Thanks for your time BluShadow and sorry as i think i couldn't make my query clear.
    I try it again. Below there are three queries, you may see all three queries are using same tables. Difference in all three queries are just few conditions, which makes all three queries diff with each other.
    I know, u cant run below query in your database, but i think it will convey my doubt to you. I have mentioned no. of rows with each clause and total i am getting 67 rows as my output. (Reason may be first n third query's result set are the subset of Second Query dataset)
    So i want to take all common rows as well as additional rows, if present in any of the query. This is getting easliy done with UNION clause but want to have it in other way as here my same is getting scanned again n again.
    SELECT
             START_TX.FX_TRAN_ID START_FX_TRAN_ID
            ,END_TX.FX_TRAN_ID END_FX_TRAN_ID
            ,START_TX.ENTERED_DT_TS
            ,USER
            ,START_TX.TRADE_DT
            ,START_TX.DEAL_NUMBER
            ,START_TX.FX_DEAL_TYPE
            ,START_TX.ORIENTATION_BUYSELL
            ,START_TX.BASE_CCY
            ,START_TX.BASE_CCY_AMT
            ,START_TX.SECONDARY_CCY
            ,START_TX.SECONDARY_CCY_AMT
            ,START_TX.MATURITY_DT
            ,START_TX.TRADE_RT
            ,START_TX.FORWARD_PTS              
            ,START_TX.CORPORATE_PIPS           
            ,START_TX.DEAL_OWNER_INITIALS      
            ,START_TX.CORPORATE_DEALER         
            ,START_TX.PROFIT_CENTER_CD
            ,START_TX.COUNTERPARTY_NM
            ,START_TX.COUNTERPARTY_NUMBER
      FROM
          (SELECT * FROM FX_TRANSACTIONS WHERE GMT_CONV_ENTERED_DT_TS >=  TO_DATE('20-Nov-2013 4:00:01 AM','DD-Mon-YYYY HH:MI:SS AM')) START_TX
           INNER JOIN
          (SELECT * FROM FX_TRANSACTIONS WHERE GMT_CONV_ENTERED_DT_TS <=  TO_DATE('20-Nov-2013 4:59:59 PM','DD-Mon-YYYY HH:MI:SS AM'))  END_TX
       ON START_TX.COUNTERPARTY_NM        = END_TX.COUNTERPARTY_NM         AND
          START_TX.COUNTERPARTY_NUMBER    = END_TX.COUNTERPARTY_NUMBER     AND
          START_TX.FX_DEAL_TYPE           = END_TX.FX_DEAL_TYPE            AND
          START_TX.BASE_CCY               = END_TX.BASE_CCY                AND
          START_TX.SECONDARY_CCY          = END_TX.SECONDARY_CCY           AND
          NVL(START_TX.CORPORATE_DEALER,'nullX')=NVL(END_TX.CORPORATE_DEALER,'nullX')       AND
          START_TX.ORIENTATION_BUYSELL='B'                                 AND 
          END_TX.ORIENTATION_BUYSELL='S'                                  AND
          START_TX.FX_TRAN_ID = 1850718                                  AND
         (START_TX.BASE_CCY_AMT           = END_TX.BASE_CCY_AMT          
          OR
          START_TX.SECONDARY_CCY_AMT      = END_TX.SECONDARY_CCY_AMT)        -- 10 Rows
    UNION
    SELECT
             START_TX.FX_TRAN_ID START_FX_TRAN_ID
            ,END_TX.FX_TRAN_ID END_FX_TRAN_ID
            ,START_TX.ENTERED_DT_TS
            ,USER
            ,START_TX.TRADE_DT
            ,START_TX.DEAL_NUMBER
            ,START_TX.FX_DEAL_TYPE
            ,START_TX.ORIENTATION_BUYSELL
            ,START_TX.BASE_CCY
            ,START_TX.BASE_CCY_AMT
            ,START_TX.SECONDARY_CCY
            ,START_TX.SECONDARY_CCY_AMT
            ,START_TX.MATURITY_DT
            ,START_TX.TRADE_RT
            ,START_TX.FORWARD_PTS              
            ,START_TX.CORPORATE_PIPS           
            ,START_TX.DEAL_OWNER_INITIALS      
            ,START_TX.CORPORATE_DEALER         
            ,START_TX.PROFIT_CENTER_CD
            ,START_TX.COUNTERPARTY_NM
            ,START_TX.COUNTERPARTY_NUMBER
      FROM
          (SELECT * FROM FX_TRANSACTIONS WHERE GMT_CONV_ENTERED_DT_TS >=  TO_DATE('20-Nov-2013 4:00:01 AM','DD-Mon-YYYY HH:MI:SS AM')) START_TX
           INNER JOIN
          (SELECT * FROM FX_TRANSACTIONS WHERE GMT_CONV_ENTERED_DT_TS <=  TO_DATE('20-Nov-2013 4:59:59 PM','DD-Mon-YYYY HH:MI:SS AM'))  END_TX
       ON START_TX.COUNTERPARTY_NM        = END_TX.COUNTERPARTY_NM         AND
          START_TX.COUNTERPARTY_NUMBER    = END_TX.COUNTERPARTY_NUMBER     AND
          START_TX.FX_DEAL_TYPE           = END_TX.FX_DEAL_TYPE            AND
          START_TX.BASE_CCY               = END_TX.BASE_CCY                AND
          START_TX.SECONDARY_CCY          = END_TX.SECONDARY_CCY           AND
          NVL(START_TX.CORPORATE_DEALER,'nullX')=NVL(END_TX.CORPORATE_DEALER,'nullX')  AND
          START_TX.FX_TRAN_ID = 1850718                                  AND
          START_TX.ORIENTATION_BUYSELL='B'                                 AND 
          END_TX.ORIENTATION_BUYSELL='S'                        --                                   67 Rows
    UNION 
    SELECT
             START_TX.FX_TRAN_ID START_FX_TRAN_ID
            ,END_TX.FX_TRAN_ID END_FX_TRAN_ID
            ,START_TX.ENTERED_DT_TS
            ,USER
            ,START_TX.TRADE_DT
            ,START_TX.DEAL_NUMBER
            ,START_TX.FX_DEAL_TYPE
            ,START_TX.ORIENTATION_BUYSELL
            ,START_TX.BASE_CCY
            ,START_TX.BASE_CCY_AMT
            ,START_TX.SECONDARY_CCY
            ,START_TX.SECONDARY_CCY_AMT
            ,START_TX.MATURITY_DT
            ,START_TX.TRADE_RT
            ,START_TX.FORWARD_PTS              
            ,START_TX.CORPORATE_PIPS           
            ,START_TX.DEAL_OWNER_INITIALS      
            ,START_TX.CORPORATE_DEALER         
            ,START_TX.PROFIT_CENTER_CD
            ,START_TX.COUNTERPARTY_NM
            ,START_TX.COUNTERPARTY_NUMBER
      FROM
          (SELECT * FROM FX_TRANSACTIONS WHERE GMT_CONV_ENTERED_DT_TS >=  TO_DATE('20-Nov-2013 4:00:01 AM','DD-Mon-YYYY HH:MI:SS AM')) START_TX
           INNER JOIN
          (SELECT * FROM FX_TRANSACTIONS WHERE GMT_CONV_ENTERED_DT_TS <=  TO_DATE('20-Nov-2013 4:59:59 PM','DD-Mon-YYYY HH:MI:SS AM'))  END_TX
       ON START_TX.COUNTERPARTY_NM        = END_TX.COUNTERPARTY_NM         AND
          START_TX.COUNTERPARTY_NUMBER    = END_TX.COUNTERPARTY_NUMBER     AND
          START_TX.FX_DEAL_TYPE           = END_TX.FX_DEAL_TYPE            AND
          START_TX.BASE_CCY               = END_TX.BASE_CCY                AND
          START_TX.SECONDARY_CCY          = END_TX.SECONDARY_CCY           AND
          NVL(START_TX.CORPORATE_DEALER,'nullX')=NVL(END_TX.CORPORATE_DEALER,'nullX') AND
          START_TX.ORIENTATION_BUYSELL='B'                                 AND 
          END_TX.ORIENTATION_BUYSELL='S'                                   AND
          START_TX.FX_TRAN_ID = 1850718                                  AND
            END_TX.BASE_CCY_AMT BETWEEN (START_TX.BASE_CCY_AMT - (START_TX.BASE_CCY_AMT * :PERC_DEV/100)) AND (START_TX.BASE_CCY_AMT + (START_TX.BASE_CCY_AMT * :PERC_DEV/100))        
            OR
            END_TX.SECONDARY_CCY_AMT BETWEEN (START_TX.SECONDARY_CCY_AMT - (START_TX.SECONDARY_CCY_AMT*:PERC_DEV/100) ) AND (START_TX.SECONDARY_CCY_AMT + (START_TX.SECONDARY_CCY_AMT*:PERC_DEV/100))
        );                                                       ---                              10 Rows

  • ORA-00907: missing right parenthesis when using group by clause with xmlagg

    I have the following query and I am getting ORA 00907 Error when I am using group by clause with the xmlagg function.
    select xmlelement("Mitigation",
                    xmlelement("m_szMethodName",tm.DisplayName),
                    xmlelement("SubstanceInterferenceProtocolList",
                                (select xmlagg(xmlelement("MitigationProtocol",
                                        xmlelement("m_szMethodName",tm.DisplayName),
                                        xmlelement("m_szInterferenceProtocolName",tmp.protocol_name),
                                        xmlelement("m_szInterferenceSubstance",tmp.intf_mtrl_prod_code),
                                        xmlelement("m_ProtocolParameters",
                                            xmlelement("m_szProtocolName",tmp.protocol_name),
                                                xmlelement("m_Consumables",
                                                    xmlelement("Consumable",
                                                        xmlelement("m_szConsumId", xrl.rgnt_pack_name),
                                                        xmlelement("m_szProductCode",xrl.pack_prod_code),
                                                        xmlelement("m_nVolume",tmp.fluid_vol),
                                                        xmlelement("m_szProtocolStep",xps.protocol_step_name))),
                                                    xmlelement("m_ProtParamList",
                                                        xmlagg(
                                                        xmlelement("ParameterValues",
                                                            xmlelement("m_szProtocolName",tmp.protocol_name),
                                                            xmlelement("m_Time",xpsd.parameter_ntime_value))
                                                        group by tmp.ccd_test_id,tmp.intf_mtrl_prod_code)
                    order by tmp.ccd_test_id, tmp.intf_mtrl_prod_code, xps.protocol_step_intprotocolstep )
                    from XPR_tdef_mitigation_protocol tmp, xp_reagentlist xrl,
                    xpr_protocol_settings xps, xpr_protocol_settings_default xpsd
                    where tmp.ccd_test_id = tm.ccd_test_id
                    and tmp.ccd_test_id = xrl.ccd_test_id
                    and tmp.pack_prod_code = xrl.pack_prod_code
                    and tmp.intf_type = 1
                    and xps.protocol_name = xpsd.protocol_name
                    and xps.protocol_step_name = xpsd.protocol_step_name
                    and xps.ps_action_parameterlist = xpsd.ps_action_parameterlist
                    and xps.protocol_name =  tmp.PROTOCOL_NAME
    from XPtoXPRTdef_defn_mapping tm
    where tm.DisplayName = 'SYPH'If I remove the xmlagg clause along with the group by clause, the query runs fine and give me the output.
    But in that XML format of the output is incorrect for my application.
    Could someone help here?

    Hi,
    userAtoZ wrote:
    I have the following query and I am getting ORA 00907 Error when I am using group by clause with the xmlagg function.
    ... xmlagg(
    xmlelement("ParameterValues",
    xmlelement("m_szProtocolName",tmp.protocol_name),
    xmlelement("m_Time",xpsd.parameter_ntime_value))
    group by tmp.ccd_test_id,tmp.intf_mtrl_prod_code)Please don't post unformatted code. When posting any formatted text on this site, type these 6 characters:
    \(small letters only, inside curly brackets) before and after each section of formatted text, to preserve spacing.
    If the code above were formatted well, so that you could match each '(' with its closing ')', it would look something like this:... xmlagg ( xmlelement ( "ParameterValues"
                        , xmlelement ( "m_szProtocolName"
                                       , tmp.protocol_name
                        , xmlelement ( "m_Time"
                                       , xpsd.parameter_ntime_value
    group by tmp.ccd_test_id
                        ,     tmp.intf_mtrl_prod_code
    This is exactly what you posted, only the whitespace has been changed.
    This makes it clear that the GROUP BY is inside the parentheses with the argument to XMLAGG.  You can have an ORDER BY clause there, but not a GROUP BY clause.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • Having trouble with put_line function in block statement..

    Am a student, and the request does not appear to be in my book anywhere... Nothing on put_line, or block statements that I can see..
    Need to write a block which will bring back via put_line for department 110: the department_id (departments table), the department_name (departments table), and the city in which the department is located (which must be pulled from locations table... can be joined by department_id). I can write the select statement with join, just not sure how to turn it into a block with put_line function..
    any advice appreciated.. Thanks.

    Hi,
    You need to format your code, so that it's easy to see what statements are in each section (DECLARE, BEGIN, etc.).
    The compiler doesn't care about this, but it will help anyone who tries to read your code, including yourself.
    Type &#123;code&#125; before and after formatted sections when posting messages on this site.
    All statements, including each individual variable declaration) end with a semicolon.
    If a query will return no more than one row, you can capture the results using an INTO-clause, right after the SELECT-clause. For every column in the SELECT-clause, there will be one variable in the INTO-clause.
    Lists, including lists of table names in a query's FROM-clause, are delimited by commas.
    In a query's FROM-clause, the real name of the table comes first, optionally followed by the alias you're using in the query.
    I think this is what you're trying to do:
    SET   SERVEROUTPUT  ON  SIZE 50000
    Declare
        dep_id    NUMBER;
        Dep_string VarChar (100);
    Begin
        select  d.department_id, d.department_name -- , l.city
          into  dep_id,          dep_string
          from  departments  d
             ,  locations    l
          where d.location_id = l.location_id
            and d.location_id = 110;
        DBMS_OUTPUT.PUT_LINE (Dep_string);
    END;
    /No one should ever have this many errors at one time. Write code in much smaller increments, and test after each one. For example, you know you'll be using dbms_output.put_line, so start with something like:
    SET   SERVEROUTPUT  ON  SIZE 50000
    BEGIN
        dbms_output.put_line ('Hello, world!');
    END;You may have problems if you forget semicolons, or SET SERVEROUTPUT. Solve those before you go any further.
    Once the program above is working, add a little (and I mean a little) to it.
    For example, you know you'll be printing a varibale, not a literal, so change it to a variable:
    SET   SERVEROUTPUT  ON  SIZE 50000
    DECLARE
        dep_string  VARCHAR2 (100) := 'Hello, world!';
    BEGIN
        dbms_output.put_line (dep_string);
    END;And so on.
    Edited by: Frank Kulash on Dec 15, 2008 12:36 PM

Maybe you are looking for