Results of a query greater than 32kb

I am trying to generate an XML based on the results of a query. Is there any builtin/advanced ORACLE API that checks to see if the query's result/output is greater than 32kb or not? Please ignore my earlier question from yesterday.

@rp0428: Are you suggesting that I use the variable vStrSqlQuery that I had declared as VARCHAR2(32767) as a CLOB and then find out the length using the built in API?
I'm saying that:
1. Oracle does NOT know how many bytes generated XML will take until you generate it.
2. You need to store the generated XML in a table column or variable that is large enough to contain it. A VARCHAR2 can NOT hold more than 32k but a CLOB can
3. the DBMS_LOB package has functionality for getting the length of a CLOB
4. You can try to generate the XML into a VARCHAR2 and then trap any 'too long' exception but then you will NOT have any data
5. You can generate the XML into a CLOB and then see how long it is and then do whatever you like with the entire value.

Similar Messages

  • Variables in query, greater than

    Please tell me if the following is possible.
    I have a query with a variable that asks for a date to be entered, e.g. 02.2006 and spits out the results.
    However I have been asked to set this variable in such a way that it should display the results of 02.2006 or whatever I have
    entered and all of the months greater than 02.2006 or whatever. ( not less than only 02.2006 and greater than )
    Is it possible. I do not think so but I thought I verify from the SDN gurus. Please help if you can. Thanks.

    So basically, you want to know the different value of calmonth in row with key figures being in column.
    I thought you want the report strucutre in ROW like:
    User Entered calmonth
    User Entered Calmonth - 12.9999
    But your report requirement is
    User Entered Calmonth
    User Entered Calmonth + 1
    User Entered Calmonth + 2
    12.9999
    If this is the requirement,
    Create a customer exit variable, ready for input with interval.
    Let user enter a date say 05.2006
    Now in the customer exit,
    Set LOW as user entered low value 05.2006
    Set HIGH as '999912'.
    That would restrict your calmonth by user entered - 12.9999 and in the row you will see one row per one calmonth value and once your row is restricted by month, you will see KF restricted by that month automatically.
    - Danny
    Edited by: Danny Matt on Jul 7, 2009 11:02 AM

  • How to come up with a magic number for any table that returns more than 32KB?

    I am in a unique situation where in I am trying to retrieve values from multiple tables and publish them as XML output. The problem is based on the condition a few tables could retrieve data more than 32KB and a few less than 32KB. Less than 32KB is not an issue as XML generation is smooth. The minute it reaches greater than 32KB it generates a run time error. Just wondering if there is any way to ensure that the minute the query's results is greater than 32 kb, it should break say - if the results is 35KB, then I should break that result into 32 KB and 3kb; once done then pass this data to be published as an XML output. This is again not just for one table, but all the tables that are called in the function.
    Is there any way?? I am unable to get any ideas nor have I done anything so complex from production support stand point. Would appreciate if someone can guide me on this.
    The way it is, is as follows:
    I have a table called ctn_pub_cntl
    CREATE TABLE CTNAPP.ctn_pub_cntl
    (ctn_pub_cntl_id          NUMBER(18)
    ,table_name                  VARCHAR2(50)
    ,last_pub_tms              DATE
    ,queue_name               VARCHAR2(50)
    ,dest_system              VARCHAR2(50)
    ,frequency                  NUMBER(6)
    ,status                      VARCHAR2(8)
    ,record_create_tms          DATE
    ,create_user_id                VARCHAR2(8)
    ,record_update_tms          DATE
    ,update_user_id             VARCHAR2(8)
    ,CONSTRAINT ctn_pub_cntl_id_pk PRIMARY KEY(ctn_pub_cntl_id)
    Data for this is:
    INSERT INTO CTNAPP.ctn_pub_cntl
    (ctn_pub_cntl_id   
    ,table_name        
    ,last_pub_tms 
    ,queue_name 
    ,dest_system       
    ,frequency         
    VALUES
    (CTNAPP_SQNC.nextval
    ,'TRKFCG_SBDVSN'
    ,TO_DATE('10/2/2004 10:17:44PM','MM/DD/YYYY HH12:MI:SSPM')
    ,'UT.TSD.TSZ601.UNP'
    ,'SAP'
    ,15
    INSERT INTO CTNAPP.ctn_pub_cntl
    (ctn_pub_cntl_id   
    ,table_name        
    ,last_pub_tms 
    ,queue_name 
    ,dest_system       
    ,frequency         
    VALUES
    (CTNAPP_SQNC.nextval
    ,'TRKFCG_TRACK_SGMNT_DN'
    ,TO_DATE('02/06/2015 9:50:00AM','MM/DD/YYYY HH12:MI:SSPM')
    ,'UT.TSD.WRKORD.UNP'
    ,'SAP'
    ,30
    INSERT INTO CTNAPP.ctn_pub_cntl
    (ctn_pub_cntl_id   
    ,table_name        
    ,last_pub_tms 
    ,queue_name 
    ,dest_system       
    ,frequency         
    VALUES
    (CTNAPP_SQNC.nextval
    ,'TRKFCG_FXPLA_TRACK_LCTN_DN'
    ,TO_DATE('10/2/2004 10:17:44PM','MM/DD/YYYY HH12:MI:SSPM')
    ,'UT.TSD.YRDPLN.INPUT'
    ,'SAP'
    ,30
    INSERT INTO CTNAPP.ctn_pub_cntl
    (ctn_pub_cntl_id   
    ,table_name        
    ,last_pub_tms 
    ,queue_name 
    ,dest_system       
    ,frequency         
    VALUES
    (CTNAPP_SQNC.nextval
    ,'TRKFCG_FXPLA_TRACK_LCTN2_DN'
    ,TO_DATE('02/06/2015 9:50:00AM','MM/DD/YYYY HH12:MI:SSPM')
    ,'UT.TSD.TSZ601.UNP'
    ,'SAP'
    ,120
    INSERT INTO CTNAPP.ctn_pub_cntl
    (ctn_pub_cntl_id   
    ,table_name        
    ,last_pub_tms
    ,queue_name 
    ,dest_system       
    ,frequency         
    VALUES
    (CTNAPP_SQNC.nextval
    ,'TRKFCG_FXPLA_TRACK_LCTN2_DN'
    ,TO_DATE('04/23/2015 11:50:00PM','MM/DD/YYYY HH12:MI:SSPM')
    ,'UT.TSD.YRDPLN.INPUT'
    ,'SAP'
    ,10
    INSERT INTO CTNAPP.ctn_pub_cntl
    (ctn_pub_cntl_id   
    ,table_name        
    ,last_pub_tms
    ,queue_name 
    ,dest_system       
    ,frequency         
    VALUES
    (CTNAPP_SQNC.nextval
    ,'TRKFCG_FIXED_PLANT_ASSET'
    ,TO_DATE('04/23/2015 11:50:00AM','MM/DD/YYYY HH12:MI:SSPM')
    ,'UT.TSD.WRKORD.UNP'
    ,'SAP'
    ,10
    INSERT INTO CTNAPP.ctn_pub_cntl
    (ctn_pub_cntl_id   
    ,table_name        
    ,last_pub_tms
    ,queue_name 
    ,dest_system       
    ,frequency         
    VALUES
    (CTNAPP_SQNC.nextval
    ,'TRKFCG_OPRLMT'
    ,TO_DATE('03/26/2015 7:50:00AM','MM/DD/YYYY HH12:MI:SSPM')
    ,'UT.TSD.WRKORD.UNP'
    ,'SAP'
    ,30
    INSERT INTO CTNAPP.ctn_pub_cntl
    (ctn_pub_cntl_id   
    ,table_name        
    ,last_pub_tms
    ,queue_name 
    ,dest_system       
    ,frequency         
    VALUES
    (CTNAPP_SQNC.nextval
    ,'TRKFCG_OPRLMT_SGMNT_DN'
    ,TO_DATE('03/28/2015 12:50:00AM','MM/DD/YYYY HH12:MI:SSPM')
    ,'UT.TSD.WRKORD.UNP'
    ,'SAP'
    ,30
    COMMIT;
    Once the above data is inserted and committed, then I created a function in a package:
    CREATE OR REPLACE PACKAGE CTNAPP.CTN_PUB_CNTL_EXTRACT_PUBLISH
    IS
    TYPE tNameTyp IS TABLE OF ctn_pub_cntl.table_name%TYPE INDEX BY BINARY_INTEGER;
    g_tName tNameTyp;
    TYPE tClobTyp IS TABLE OF CLOB INDEX BY BINARY_INTEGER;
    g_tClob tClobTyp;
    FUNCTION GetCtnData(p_nInCtnPubCntlID IN CTN_PUB_CNTL.ctn_pub_cntl_id%TYPE,p_count OUT NUMBER ) RETURN tClobTyp;
    END CTNAPP.CTN_PUB_CNTL_EXTRACT_PUBLISH;
    --Package body
    CREATE OR REPLACE PACKAGE BODY CTNAPP.CTN_PUB_CNTL_EXTRACT_PUBLISH
    IS
         doc           xmldom.DOMDocument;
         main_node     xmldom.DOMNode;
         root_node     xmldom.DOMNode;
         root_elmt     xmldom.DOMElement;
         child_node    xmldom.DOMNode;
         child_elmt    xmldom.DOMElement;
         leaf_node     xmldom.DOMNode;
         elmt_value    xmldom.DOMText;
         tbl_node      xmldom.DOMNode;
         table_data    XMLDOM.DOMDOCUMENTFRAGMENT;
         l_ctx         DBMS_XMLGEN.CTXHANDLE;
         vStrSqlQuery  VARCHAR2(32767);
         l_clob        tClobTyp;
         l_xmltype     XMLTYPE;
    --Local Procedure to build XML header    
    PROCEDURE BuildCPRHeader IS
      BEGIN
        child_elmt := xmldom.createElement(doc, 'PUBLISH_HEADER');
        child_node  := xmldom.appendChild (root_node, xmldom.makeNode (child_elmt));
        child_elmt := xmldom.createElement (doc, 'SOURCE_APLCTN_ID');
        elmt_value := xmldom.createTextNode (doc, 'CTN');
        leaf_node  := xmldom.appendChild (child_node, xmldom.makeNode (child_elmt));
        leaf_node  := xmldom.appendChild (leaf_node, xmldom.makeNode (elmt_value));
        child_elmt := xmldom.createElement (doc, 'SOURCE_PRGRM_ID');
        elmt_value := xmldom.createTextNode (doc, 'VALUE');
        leaf_node  := xmldom.appendChild (child_node, xmldom.makeNode (child_elmt));
        leaf_node  := xmldom.appendChild (leaf_node, xmldom.makeNode (elmt_value));
        child_elmt := xmldom.createElement (doc, 'SOURCE_CMPNT_ID');
        elmt_value := xmldom.createTextNode (doc, 'VALUE');
        leaf_node  := xmldom.appendChild (child_node, xmldom.makeNode (child_elmt));
        leaf_node  := xmldom.appendChild (leaf_node, xmldom.makeNode (elmt_value));
        child_elmt := xmldom.createElement (doc, 'PUBLISH_TMS');
        elmt_value := xmldom.createTextNode (doc, TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
        leaf_node  := xmldom.appendChild (child_node, xmldom.makeNode (child_elmt));
        leaf_node  := xmldom.appendChild (leaf_node, xmldom.makeNode (elmt_value));
    END BuildCPRHeader;
    --Get table data based on table name
    FUNCTION GetCtnData(p_nInCtnPubCntlID IN CTN_PUB_CNTL.ctn_pub_cntl_id%TYPE,p_Count OUT NUMBER) RETURN tClobTyp IS
        vTblName      ctn_pub_cntl.table_name%TYPE;
        vLastPubTms   ctn_pub_cntl.last_pub_tms%TYPE;
    BEGIN
                g_vProcedureName:='GetCtnData';   
                g_vTableName:='CTN_PUB_CNTL';
            SELECT table_name,last_pub_tms
            INTO   vTblName, vLastPubTms
            FROM   CTN_PUB_CNTL
            WHERE  ctn_pub_cntl_id=p_nInCtnPubCntlID;
        -- Start the XML Message generation
            doc := xmldom.newDOMDocument;
            main_node := xmldom.makeNode(doc);
            root_elmt := xmldom.createElement(doc, 'PUBLISH');
            root_node := xmldom.appendChild(main_node, xmldom.makeNode(root_elmt));
          --Append Table Data as Publish Header
            BuildCPRHeader;
          --Append Table Data as Publish Body
           child_elmt := xmldom.createElement(doc, 'PUBLISH_BODY');
           leaf_node  := xmldom.appendChild (root_node, xmldom.makeNode(child_elmt));
           DBMS_SESSION.SET_NLS('NLS_DATE_FORMAT','''YYYY:MM:DD HH24:MI:SS''');
           vStrSqlQuery := 'SELECT * FROM ' || vTblName
                          || ' WHERE record_update_tms <= TO_DATE(''' || TO_CHAR(vLastPubTms, 'MM/DD/YYYY HH24:MI:SS') || ''', ''MM/DD/YYYY HH24:MI:SS'') ' ;
                        --  ||  ' AND rownum < 16'
          DBMS_OUTPUT.PUT_LINE(vStrSqlQuery);
           l_ctx  := DBMS_XMLGEN.NEWCONTEXT(vStrSqlQuery);
          DBMS_XMLGEN.SETNULLHANDLING(l_ctx, 0);
          DBMS_XMLGEN.SETROWSETTAG(l_ctx, vTblName);
          -- Append Table Data as XML Fragment
          l_clob(1):=DBMS_XMLGEN.GETXML(l_ctx); 
          elmt_value := xmldom.createTextNode (doc, l_clob(1));
         leaf_node  := xmldom.appendChild (leaf_node, xmldom.makeNode (elmt_value));
         xmldom.writeToBuffer (doc, l_clob(1));
         l_clob(1):=REPLACE(l_clob(1),'&lt;?xml version=&quot;1.0&quot;?&gt;', NULL);
         l_clob(1):=REPLACE(l_clob(1),'&lt;', '<');
         l_clob(1):=REPLACE(l_clob(1),'&gt;', '>');
         RETURN l_clob;
         DBMS_OUTPUT.put_line('Answer is' ||l_clob(1));
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
            DBMS_OUTPUT.put_line('There is no data with' || SQLERRM);
            g_vProcedureName:='GetCtnData';
            g_vTableName:='CTN_PUB_CNTL';
            g_vErrorMessage:=SQLERRM|| g_vErrorMessage;
            g_nSqlCd:=SQLCODE;
            ctn_log_error('ERROR',g_vErrorMessage,'SELECT',g_nSqlCd,p_nInCtnPubCntlID,g_vPackageName,g_vProcedureName,g_vTableName);
            WHEN OTHERS THEN
           DBMS_OUTPUT.PUT_LINE('ERROR : ' || SQLERRM);
           ctn_log_error('ERROR',g_vErrorMessage,'OTHERS',g_nSqlCd,p_nInCtnPubCntlID,g_vPackageName,g_vProcedureName,g_vTableName);
    END GetCtnData;
    PROCEDURE printClob (result IN OUT NOCOPY CLOB) IS
        xmlstr   VARCHAR2 (32767);
        line     VARCHAR2 (2000);
    BEGIN
        xmlstr := DBMS_LOB.SUBSTR (result, 32767);
        LOOP
           EXIT WHEN xmlstr IS NULL;
           line := SUBSTR (xmlstr, 1, INSTR (xmlstr, CHR (10)) - 1);
           DBMS_OUTPUT.put_line (line);
           xmlstr := SUBSTR (xmlstr, INSTR (xmlstr, CHR (10)) + 1);
        END LOOP;
    END printClob;
    END CTN_PUB_CNTL_EXTRACT_PUBLISH;
    If you notice my query:
    vStrSqlQuery := 'SELECT * FROM ' || vTblName
                          || ' WHERE record_update_tms <= TO_DATE(''' || TO_CHAR(vLastPubTms, 'MM/DD/YYYY HH24:MI:SS') || ''', ''MM/DD/YYYY HH24:MI:SS'') ' ;
                         ||  ' AND rownum < 16'
    The minute I comment
    ||  ' AND rownum < 16' ;
    , it throws an error because this query returns around 600 rows and all of those rows need to be published as XML and the tragedy is that there is a C program in between as well i.e. C will call my packged functions and then will do all the processing. Once this is done will pass the results back to C program. So obviously C does not recognise CLOB and somewhere in the process I have to convert the CLOB to VARCHAR or instead of CLOB I have to use VARCHAR array as a return type. This is my challenge.
    Anyone that can help me to find out the required magic number and also a brief know how, I would appreciate that. Many thanks in advance.

    Not sure I understand which part is failing.
    Is it the C program calling your packaged function? Or does the error occur in the PL/SQL code, in which case you should be able to pinpoint where it's wrong?
    A few comments :
    1) Using DOM to build XML out of relational data? What for? Use SQL/XML functions.
    2) Giving sample data is usually great, but it's not useful here since we can't run your code. We're missing the base tables.
    3) This is wrong :
    vStrSqlQuery := 'SELECT * FROM ' || vTblName                     || ' WHERE record_update_tms <= TO_DATE(''' || TO_CHAR(vLastPubTms, 'MM/DD/YYYY HH24:MI:SS') || ''', ''MM/DD/YYYY HH24:MI:SS'') ' ;
    A bind variable should be used here for the date.
    4) This is wrong :
    elmt_value := xmldom.createTextNode (doc, l_clob(1));
    createTextNode does not support CLOB so it will fail as soon as the CLOB you're trying to pass exceeds 32k.
    Maybe that's the problem you're referring to?
    5) This is most wrong :
         l_clob(1):=REPLACE(l_clob(1),'&lt;?xml version=&quot;1.0&quot;?&gt;', NULL); 
         l_clob(1):=REPLACE(l_clob(1),'&lt;', '<'); 
         l_clob(1):=REPLACE(l_clob(1),'&gt;', '>'); 
    I understand what you're trying to do but it's not the correct way.
    You're trying to convert a text() node representing XML in escaped form back to XML content.
    The problem is that there are other things to take care of besides just '&lt;' and '&gt;'.
    If you want to insert an XML node into an existing document, treat that as an XML node, not as a string.
    Anyway,
    Anyone that can help me to find out the required magic number
    That would be a bad idea. Fix what needs to be fixed.
    And please clearly state which part is failing : the C program or the PL/SQL code?
    I'd vote for PL/SQL, as pointed out in [4].

  • Count statement for fields greater than 10 characters

    Hi,
    I am trying to write a query to select results from a database table where the results are only fields greater than 10 characters in length.
    e.g.
    Table
    Employee----
    Andrew
    Jennifer Smith
    Jamal
    the query would only show the result Jennifer Smith because this field exceeds 10 characters in length.
    Any help is appreciated....

    Have you tried coding anything yet for this homework assignment?
    HINT: Use the LENGTH() function.

  • Query to select values greater than, where AS clause is used

    Oracle 10g
    Requesting your help in writing the query correctly.
    I have the following 2 tables. The AddProjectPhase and AddProject tables. It is many to many relationship. Each project can have a predefined set of 4 different phases under it. Each phase has a start date and an end date. I am writing a report to get the phases which have a duration greater than, for example, 3 months.
    The query below is working fine to just display the list of all the phases along with the duration of each phase. I am not able to modify it to select the phases which have a duration, for example, 3 or more months.
    CREATE TABLE  "ADDPROJECT"
       (     "VERSIONNO" NUMBER(*,0),
         "PROJID" VARCHAR2(20),
         "PROJNAME" VARCHAR2(60),
         "PROJSTARTDATE" DATE,
         "PROJSTATUS" VARCHAR2(20),
         "PROJENDDATE" DATE,
         "PROJENDTYPE" VARCHAR2(20),
         "PROJENDREASON" VARCHAR2(1000),
         "UCPROJECTMANAGER" VARCHAR2(20),
         "FROMDATE" DATE,
         "TODATE" DATE,
         "SRCHFIELD" VARCHAR2(20),
         "OPERATOR" VARCHAR2(20),
         "PARENTPROJID" VARCHAR2(20),
         "PROJHIDDENDATE" VARCHAR2(20),
          CONSTRAINT "PK_B36" PRIMARY KEY ("PROJID", "PROJHIDDENDATE") ENABLE
    CREATE TABLE  "ADDPROJECTPHASE"
       (     "VERSIONNO" NUMBER(*,0),
         "PROJPHASEID" NUMBER(9,0),
         "PHASESTARTDATE" DATE,
         "PHASEENDDATE" DATE,
         "RRDATE" DATE,
         "PHASENAME" VARCHAR2(30),
         "PROJPHASESTATUS" VARCHAR2(20),
         "PROJID" VARCHAR2(20),
         "OPERATOR" VARCHAR2(20),
         "FROMDATE" DATE,
         "TODATE" DATE,
         "SRCHFIELD" VARCHAR2(20),
         "REVIEWCOMMENTS" VARCHAR2(1000),
         "PROJHIDDENDATE" VARCHAR2(20),
         "ISUEVALUATION" NUMBER(1,0),
         "SOLUTIONINGTEAMINVOLVEMENT" NUMBER(1,0),
         "ISUNAME" VARCHAR2(20),
          CONSTRAINT "PK_A63" PRIMARY KEY ("PROJPHASEID") ENABLE
       )Below is the query to display the list of all the phases along with the duration of each phase which is working fine.
    SELECT pp.phaseName "phasename",
    pp.phaseStartDate "phaseStartDate",
    pp.phaseEndDate "phaseEndDate",
    pp.projPhaseStatus "projPhaseStatus",
    ap.projID "projID",
    ap.projName "projName",
    ap.projHiddenDate "projHiddenDate",
    ap.projStartDate "projStartDate",
    CASE
        WHEN pp.phaseEndDate IS NOT NULL
        THEN MONTHS_BETWEEN(1+pp.phaseEndDate,pp.phaseStartDate)
        WHEN pp.phaseEndDate IS NULL
        THEN MONTHS_BETWEEN(1+sysDate,pp.phaseStartDate)
        ELSE null
    END "phaseMonths"
    FROM AddProjectPhase pp, AddProject ap
    WHERE ap.projID = pp.projID
    AND ap.projHiddenDate = pp.projHiddenDate
    ORDER BY ap.projIDHowever the modified query shown below to select all the phases greater than, for example, 3 months, is resulting in
    ORA-00904: "PHASEMONTHS": invalid identifier SELECT pp.phaseName, pp.phaseStartDate, pp.phaseEndDate
    FROM AddProjectPhase pp, AddProject ap
    WHERE ap.projID = pp.projID
    AND ap.projHiddenDate = pp.projHiddenDate
    AND PhaseMonths IN
    (SELECT
    (CASE
    WHEN pp.phaseEndDate IS NOT NULL
    THEN MONTHS_BETWEEN(1+pp.phaseEndDate,pp.phaseStartDate)
    WHEN pp.phaseEndDate IS NULL
    THEN MONTHS_BETWEEN(1+sysDate,pp.phaseStartDate)
    ELSE null
    END) AS PhaseMonths
    FROM AddProjectPhase pp, AddProject ap
    WHERE ap.projID = pp.projID
    AND ap.projHiddenDate = pp.projHiddenDate)
    ORDER BY ap.projID

    Looking for this?
    select *
       from (
            SELECT pp.phaseName "phasename"
              , pp.phaseStartDate "phaseStartDate"
              , pp.phaseEndDate "phaseEndDate"
              , pp.projPhaseStatus "projPhaseStatus"
              , ap.projID "projID"
              , ap.projName "projName"
              , ap.projHiddenDate "projHiddenDate"
              , ap.projStartDate "projStartDate"
              , CASE WHEN pp.phaseEndDate IS NOT NULL THEN MONTHS_BETWEEN(1+pp.phaseEndDate,pp.phaseStartDate)
                     WHEN pp.phaseEndDate IS NULL     THEN MONTHS_BETWEEN(1+sysDate,pp.phaseStartDate)
                     ELSE null
                END "phaseMonths"
              FROM AddProjectPhase pp, AddProject ap
             WHERE ap.projID = pp.projID
               AND ap.projHiddenDate = pp.projHiddenDate
             ORDER
                BY ap.projID
      where "phaseMonths" >= 3

  • Unit Testing  - Results greater than 0

    I am unit testing a PL/SQL function. The function has no inputs and one output (Interval Day to Second) . The output is the time it takes to run a query therefore a valid value for the output would be greater than 0.
    When I setup the test the result only takes a Interval Day to Second value. I want to be able to say any result greater than 0 is a success.
    How can I do this?
    tom

    I am unit testing a PL/SQL function. The function has no inputs and one output (Interval Day to Second) . The output is the time it takes to run a query therefore a valid value for the output would be greater than 0.
    When I setup the test the result only takes a Interval Day to Second value. I want to be able to say any result greater than 0 is a success.
    How can I do this?
    tom

  • KQL query using "Greater Than" fails

    I have developed a CSOM app that does a KQL query against several managed properties. One of these properties is numeric (mapped to RefinableDouble01), so I have a greater than (>) comparison in the query string:
         RefinableDouble01>41.12345
    I developed the app in Office 365 and when I run the query there, it works fine (no errors).  However, when I run it to our internal SharePoint 2013 site, it fails with the error:
         "We didn't understand your search terms. Make sure they're using proper syntax."
    As far as I can tell, the configuration of the internal site matches the Office 365 site.
    If I use a query on a text property, so that I don't use the greater than comparison, that query works. The query results from that query also show that the managed property RefinableDouble01 is properly mapped and returns the expected numeric value.
    Does anyone know what the problem is? I'm wondering if the KQL query functionality is not properly set up in our internal site, but that is not an area that I am familiar with.
    Bob Feldman

    Here is more information, from the ULS Log file, regarding the error:
    06/27/2014 11:05:13.47  NodeRunnerQuery1-d8a6a564-7b37- (0x0BA4) 0x0DC4 Search                         Query Processing             
     aizc0 High     Microsoft.Office.Server.Search.Query.Ims.ImsQueryInternal : New request: Query text 'RefinableDouble01>41.12345', Query template ''; HiddenConstraints: ; SiteSubscriptionId: 00000000-0000-0000-0000-000000000000 fa039f9c-0884-60df-c11a-64f9b09837c4
    06/27/2014 11:05:13.48  NodeRunnerQuery1-d8a6a564-7b37- (0x0BA4) 0x0DC4 Search                         Query Processing             
     aizgn Medium   Microsoft.Office.Server.Search.Query.Pipeline.Executors.QueryPipelineHardWiredFlowExecutor : (FlowExecutor)eventSearchFlowDone: d8a6a564-7b37-4815-a35f-f97acc0d6cba, RefinableDouble01>41.12345, Microsoft.ProductivitySearchFlow,
    0, SPWFEAPP, Error=Exception occurred due to some other exception fa039f9c-0884-60df-c11a-64f9b09837c4 fa039f9c-0884-60df-c11a-64f9b09837c4
    06/27/2014 11:05:13.48  NodeRunner.exe (0x0BA4)                  0x0DC4 SharePoint Server Search       Query                        
     aisyt High     ExecuteFlowInternal FlowExecutor:Microsoft.ProductivitySearchFlow Exception: Microsoft.Ceres.Evaluation.DataModel.CommonEvaluationException: Exception occurred due to some other exception ---> Microsoft.Office.Server.Search.Query.QueryMalformedException:
    Query 'RefinableDouble01>41.12345' failed: syntax error at position 0, The operation is illegal for the given property, property expression: RefinableDouble01>41.8882213637562     --- End of inner exception stack trace ---    
    at Microsoft.Office.Server.Search.Query.Pipeline.Processing.KeywordQueryParserEvaluator.KeywordQueryParserProducer.ParseKeywordQuery(String queryText, ParsingContext parsingContext, Boolean debugMode, String& searchTerms)     at Microsoft.Office.Server.Search.Query.Pipeline.Processing.KeywordQueryParserEvalua... fa039f9c-0884-60df-c11a-64f9b09837c4
    06/27/2014 11:05:13.48  w3wp.exe (0x196C)                        0x41B0 SharePoint Server Search       Query                        
     dk68 High     SearchServiceApplication::Execute--Exception: Microsoft.Office.Server.Search.Query.QueryMalformedException: We didn't understand your search terms. Make sure they're using proper syntax. ---> System.ServiceModel.FaultException`1[Microsoft.Office.Server.Search.Administration.SearchServiceApplicationFault]:
    Query 'RefinableDouble01>41.12345' failed: syntax error at position 0, The operation is illegal for the given property, property expression: RefinableDouble01>41.8882213637562    Server stack trace:      at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime
    operation, ProxyRpc& rpc)     at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)     at ... fa039f9c-0884-60df-c11a-64f9b09837c4

  • Rownum greater than query

    Hi all,
    first of all, what I am aware about...
    I am aware about the fact, that ROWNUM filters, inside the query which is to be filtered by rownum, are incorrect. That is this is incorrect:
    select * from <table> where rownum < 20;
    Also I am aware, that the following will never return a result:
    select * from <table> where rownum > 20;
    That is clear. The correct version of the "less than" query is:
    select * from (select * from <table> order by a) where rownum < 20;
    Now the question: what does the last example still not work with "greater than" queries:
    Take e.g. following example:
    select * from (
    select * from dba_objects order by object_name
    ) where rownum > 5
    ;

    I ckeck it again. It's working for me !
    Any way I'll quote it.
    How ROWNUM Works
    ROWNUM is a pseudocolumn (not a real column) that is available in a query. ROWNUM will be assigned the numbers 1, 2, 3, 4, ... N, where N is the number of rows in the set ROWNUM is used with. A ROWNUM value is not assigned permanently to a row (this is a common misconception). A row in a table does not have a number; you cannot ask for row 5 from a table—there is no such thing.
    Also confusing to many people is when a ROWNUM value is actually assigned. A ROWNUM value is assigned to a row after it passes the predicate phase of the query but before the query does any sorting or aggregation. Also, a ROWNUM value is incremented only after it is assigned, which is why the following query will never return a row:
    select *
    from t
    where ROWNUM > 1;
    Because ROWNUM > 1 is not true for the first row, ROWNUM does not advance to 2. Hence, no ROWNUM value ever gets to be greater than 1. Consider a query with this structure:
    select ..., ROWNUM
    from t
    where <where clause>
    group by <columns>
    having <having clause>
    order by <columns>;
    Think of it as being processed in this order:
    1. The FROM/WHERE clause goes first.
    2. ROWNUM is assigned and incremented to each output row from the FROM/WHERE clause.
    3. SELECT is applied.
    4. GROUP BY is applied.
    5. HAVING is applied.
    6. ORDER BY is applied.
    That is why a query in the following form is almost certainly an error:
    select *
    from emp
    where ROWNUM <= 5
    order by sal desc;
    The intention was most likely to get the five highest-paid people—a top-N query. What the query will return is five random records (the first five the query happens to hit), sorted by salary. The procedural pseudocode for this query is as follows:
    ROWNUM = 1
    for x in
    ( select * from emp )
    loop
    exit when NOT(ROWNUM <= 5)
    OUTPUT record to temp
    ROWNUM = ROWNUM+1
    end loop
    SORT TEMP
    It gets the first five records and then sorts them. A query with WHERE ROWNUM = 5 or WHERE ROWNUM > 5 doesn't make sense. This is because a ROWNUM value is assigned to a row during the predicate evaluation and gets incremented only after a row passes the WHERE clause.
    Here is the correct version of this query:
    select *
    from
    ( select *
    from emp
    order by sal desc )
    where ROWNUM <= 5;
    This version will sort EMP by salary descending and then return the first five records it encounters (the top-five records). As you'll see in the top-N discussion coming up shortly, Oracle Database doesn't really sort the entire result set—it is smarter than that—but conceptually that is what takes place.

  • How to filter results of the timedifference where great than a value

    To all,
    How do I filter the results of this so I only get that which is greater than 2 seconds?
    Here is the query:
    SELECT
    A.REQUEST_UU_ID, TO_CHAR(B.CREATE_BY_TS - A.CREATE_BY_TS) AS ElapsedTime
    FROM
    TELLER_MESSAGE A INNER JOIN TELLER_MESSAGE B ON B.REQUEST_UU_ID = A.REQUEST_UU_ID
    WHERE
    A.MESSAGE_TYPE_CD LIKE '%REQ%' AND
    B.MESSAGE_TYPE_CD LIKE '%REP%'
    ORDER BY A.REQUEST_UU_ID
    Here are the results which I want to filter to get only the one row with 3 second time difference.
    99ac8695-18fb-a59d-1d6b-3d2a577fff22     +000000000 00:00:03.000000 <<<this is the one I want
    99ac8696-18fb-a59d-1d6b-3d2a577fff22     +000000000 00:00:02.000000
    99ac8896-18fb-a59d-1d6b-3d2a577fff22     +000000000 00:00:02.000000
    I tried it without the TO_CHAR casting but that gave an error.
    Thanks,
    Eric

    Hi, Eric,
    Add this to your WHERE clause:
    AND     b.create_by_ts > a.create_by_ts + INTERVAL '2' SECONDOr you could add this to the join condition.
    I hope this answers your question.
    If not, post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) for all tables involved, and also post the results you want from that data.
    Always say which version of Oracle you're using (e.g., 11.2.0.2.0).
    See the forum FAQ {message:id=9360002}

  • Camel Query : Calender list : Get Items agains given date that must be greater than and eqaul to start date and greater less than or equal to end date ?

    Camel Query : Calender list : Get Items agains given date that must be greater than and eqaul to start date and greater less than or equal to end date ?
    A Snap of Employee holiday list
    Case : Anne juul Sondergaar is on leave from 05-06-2014 to 07-06-2014
    I need a query to check wheither Anne juul is on leave at 06-06-2014 ????
    I am using this query that return nothing
    SPQueryquery =
    newSPQuery();
                                query.Query =
    @"<Where>
    <And>
    <And>
    <Leq>
    <FieldRef Name='Til' />
    <Value Type='DateTime'>"
    + WorkingStartDate.ToString("yyyy-MM-dd")
    + @"</Value>
    </Leq>
    <Geq>
    <FieldRef Name='Fra' />
    <Value Type='DateTime'>"
    + WorkingStartDate.ToString("yyyy-MM-dd")
    + @"</Value>
    </Geq>
    </And>
    <Eq>
    <FieldRef Name='Medarbejdere' />
    <Value Type='Lookup'>"
    + EmployeeName.Trim() +
    @"</Value>
    </Eq>
    </And>
    </Where>"
                                query.ViewFields =
    " <FieldRef Name='ID' />";
    Ahsan Ranjha

    Hello,
    Download CAML query builder from below location and use it to build your query:
    http://social.msdn.microsoft.com/Forums/sharepoint/en-US/f7b36ebc-6142-404a-8b04-9c87de272871/where-can-i-download-the-u2u-caml-query-builder-for-sharepoint-2010may-i-know-the-exact-link?forum=sharepointgeneralprevious
    Hemendra:Yesterday is just a memory,Tomorrow we may never see
    Please remember to mark the replies as answers if they help and unmark them if they provide no help

  • Xpath query using greater than operator

    I'm trying to evaluate some xml to determine if it matches some criterium.
    MyXmlColumns contains the following kind of data "<Values><Value>data1</Value><Value>data2</Value><Values>"
    When I execute the following query I get zero rows returned when it should match some rows containing this data.
    select * from mydata
    where existsNode(MyXmlColumn, '/Values/Value[. > "data1"]') = 1
    The question is why greter than, lesser than, does not work, and if there is any alternative.
    If I use equals operator, or greater than but using a number it works.
    I know that I can use XmlExists function but I'm using Oracle 9i r2 so it's not an option.
    Thanks in advance for any suggestion.

    but I'm using Oracle 9i r2
    The question is why greter than, lesser than, does not workWorks on 9.2.0.8:
    SQL> select * from v$version where rownum = 1
    BANNER                                                         
    Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
    1 row selected.
    SQL> with mydata as
       select xmltype('<Values><Value>data1</Value><Value>data2</Value></Values>') MyXmlColumn from dual
    select * from mydata t where existsNode(t.MyXmlColumn, '/Values/Value') < 3
    MYXMLCOLUMN                                                              
    <Values>                                                                 
      <Value>data1</Value>                                                   
      <Value>data2</Value>                                                   
    </Values>                                                                
    1 row selected.

  • Is it possible to make a calculated field only appear when the result is greater than 0?

    I am using Adobe Acrobat X Standard.  I have created a form that has caculated fields.  However, the fields always show the "$0.00" when it doesnt have anything to calculate.  I would only like a result to appear in this field when the result is greater than 0.  Is this possible?

    The use of currency and percentage signs always behave this way since the display format is a character string and not a plain number.
    You will have to use some custom JavaScript in the Custom JS calculation, the custom format format, or the validation script.
    There is not a lot of documentation for this, but Acrobat JavaScripting Guide Version 6 has some infromation about usin the AFNumber_Format built-in function.
    If your users are using version 8 or below, you will need to adjust the format of the field.

  • Greater than or equal to

    Hi everyone. I have what I think is a simple query (see
    below) that pulls date information from a table. As you can see
    from the query, I want it to pull dates for anything greater than
    and equal to today's date and anything less than and equal to a
    date one week from today's date.
    This works, however, CF does not output any events on today's
    date; it begins outputting tomorrow's events. Can someone point me
    in the right direction as how to fix this so dates for today are
    output as well? Thanks!

    For the "up through day" portion, I truncate the time component off of now(), add a day, and then use only the less than comparison. Example:
         <cfset variables.dt1 = dateAdd("d",1,int(now())) />
         <cfset variables.dt2 = dateAdd("d",-8,variables.dt1) />
         <p>dt1 = #variables.dt1# / dt2 = #variables.dt2#</p>
    This results into:
         dt1 = {ts '2013-09-28 00:00:00'} / dt2 = {ts '2013-09-20 00:00:00'}
    Lastly, use the results in your query comparison:
         where
              [someDateField] < <cfqueryparam value="#variables.dt1#" cfsqltype="CF_SQL_DATE" />
              and [someDateField] >= <cfqueryparam value="#variables.dt2#" cfsqltype="CF_SQL_DATE" />
    Also, the cfsqltype of CF_SQL_DATE seems to truncate the time component off the date for you in CF9 & CF10, but I don't like dependencies like that as I've been burned in the past. If you don't mind the risk, you can simplify the logic by removing the int() function from the above.

  • Date Greater Than Operator

    I am comparing two date fields from two tables. Both are in DATE format. The dates look like this: 22-Apr-2006 07:00:10 AM and 01-Jun-2007 12:00:00 AM. I am adding this statement to a WHERE clause:
    and vendors.vend_obsolete_date > document_xref.acceptance_date;
    In this particualr case, I should get no result because the 1st date came before the 2nd date. But when I run my program, it seems to be ignoring my > statement. Is using a greater than sign the proper syntax to compare if the 1st date field is bigger (came after) another?
    Thanks!

    Greater than works on DATE columns, no problem. A simple test confirms it.
    SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jul 9 17:50:52 2007
    select 'oops, something is wrong' as result
    from   dual
    where
      to_date( '22-Apr-2006 07:00:10 AM', 'dd-Mon-yyyy hh12:mi:ss AM' )
      > to_date( '01-Jun-2007 12:00:00 AM', 'dd-Mon-yyyy hh12:mi:ss AM' )
    no rows selectedThere must be something else about your query or data that's causing the anomaly.
    Joe Fuda
    SQL Snippets

  • Greater than 90 Days

    Hi ,
       I have a characteristic ZMANUDATE.
       Basically, I need to provide a query whereby only materials which have been manufactured greater than 90 days ago
       Please advice

    Cheers Arun,
         My concern is if I was to offset by -90 , would this result
         1) show me all the machines which were produced at exactly 90 days ago
         2) show me all the machines which were produced from CURRENT DATE to 90 days ago.
          Option (2) is my requirement.
          Please advice if your proposition will still hold.

Maybe you are looking for