SDO_UTIL.EXTRACT fail when single item in geometry collection

Hi folks,
Didn't we have a discussion a while back on whether geometry collections are valid when they only contain a single item? Darned if I can find it with the OTN search function. I think back then the issue was either a multipolygon or multistring with a single item.
Anyhow this time around I have a 2004 geometry collection that for no particular reason happens to only contain a single point. This collection geometry with one item validates TRUE. Just like with multipolygons and multistrings when I attempt to EXTRACT the result I just get back the input geometry (the 2004 in this case) rather than the component part (the 2001). I think this is because there is a test in the EXTRACT routine that checks if there is but one element and if so then returns the original input assuming the original input was gtype 1,2 or 3. Unlike a multipolygon or multistring where I can just assume the output is a polygon or string respectively, with a geometry collection I am rather stumped to figure it out short of inspecting the SDO_ELEM_INFO array. At that point I am kind of writing my own EXTRACT function. I guess I have to do that.
Anyhow, this would lead one to believe that a geometry collection with only one element is not really valid for Oracle Spatial. Or is this a bug in SDO_UTIL.EXTRACT? I have no recollection if that previous conversation ever decided this question. I might humbly suggest that either SDO_UTIL.EXTRACT should successfully unpack the single item or SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT should report an error for this type of collection.
I looked over metalink and cannot find anything logged on the issue. The results are the same on 10gR2 and 11gR2.
If anyone remembers the previous discussion please post the link.
Cheers,
Paul
SELECT
SDO_UTIL.EXTRACT(
   SDO_GEOMETRY(
      2004,
      8265,
      NULL,
      SDO_ELEM_INFO_ARRAY(
         1,
         1,
         1
      SDO_ORDINATE_ARRAY(
         -100.515216953125005261426849756389856339,
         39.98440002562352191262107226066291332245
   1
FROM
dual

Ok,
Let's make a quick distinction between the SDO_GTYPE (all four digits) and the lower-case "gtype" meaning the last digit - e.g. the "type of geometry" per the Oracle Spatial book.
I submitted the above SDO_UTIL.EXTRACT issue to Oracle support yesterday and as I rather expected the response was that this is "expected behavior". The analyst noted that my what I called a collection per its gtype was not a collection but a point. He made the distinction between the gtype and the "geometry definition". I assume by that he means the elem_info_array. So in fact djonio (user 633187) back in November 2009 under Matt's thread had the best answer. I don't see anyway to credit him. :) Hey djonio if you post a response I will give this answer to you.
So the gtype is in truth a kind of convenience marker or fancy hat "hinting" at the contents of the geometry object, but by no means defining it. A point wearing a 2004 hat is still a point and a valid Oracle Spatial point at that. If you want to "really" know what a geometry is you need to unpack and inspect the elem_info_array. So those of us writing code which is only inspecting the gtype are going down the wrong road particularly when our data might be of suspect quality. As djonio says the gtype is a performance shortcut. In my defense I think lots of folks (e.g. certain software from California) work off the gtype alone. So its not like we can just set the gtypes all to be "9999" and say the heck with it all. :) So incorrect gtypes are bad as they hose the performance shortcut that the gtype allows (and certain software demands) but a bad gtype is NOT an invalid geometry. I am not sure I am entirely sold on that idea as VALIDATE_GEOMETRY certainly looks at the gtype when doing its evaluation. Alas, I suppose its all shades of gray here as validate geometry is just responding to my gtype "hint" to give me the best feedback on my input. Perhaps there is a distinction between "good", "bad" and "imprecise" gtypes.
My next question is if the gtype system is just a fancy hat, then how best to catalog basic geometry types? Both multi-points and point clouds share gtype 5 but the elem_info marks them as being unique data types that really require unique handling (I never use point clouds so feel free to argue that point). So rather than just mumbling "5" over and over to myself, what vocabulary might be used? Is it GML time? Hmm, does GML even have a point cloud datatype? I suppose I just make something up? Does anyone else have a system they are using?
Thanks for reading this rambling, feel free to shoot down everything I say. I clearly need more coffee this morning.
Paul

Similar Messages

  • Extract fails when namespace present

    I'm receiving xml results from a SOAP call,
    and am not able to extract attributes or elements
    from the xml when a namespace is present.
    The xml has a defined namespace at the top node, but is
    null 2 nodes down.
    Sample:
    <ImportLeadsResponse xmlns="http://services.wg.com">
    <ImportLeadsResult>
    <importResult count="1" failed="0" xmlns="">
    <lead>
    <steps>
    <step>company: 577813</step>
    <step>individual: 577814</step>
    <step>Survey: 74</step>
    <step>incident: 699006</step>
    <step>workNote: 4014119</step>
    </steps>
    <errors/>
    </lead>
    </importResult>
    </ImportLeadsResult>
    </ImportLeadsResponse>
    This query fails until I remove the
    xmlns="http://services.wg.com" in top node.
    select x.xmldoc.extract('//importResult/@count').getstringval() Result
    from xmldocs x
    Using XMLSpy, I have no problem extracting the attribute.
    I'm running 9.2.0.5

    Hi Antony,
    obvisiosly <extension> is not supported. You have to change the external definition. Extension means, that there are global types referred. How to avoid that?
    Open your file in XML Spy and go to Schema-View, where you see your elements grafical. Open all nodes, the referred global types are yellow marked.
    Mark the "Sequenz" symbol (tree points in it) and draw only a millimeter with control-key. You see as result the same without global definition, of course you have now to delete the global definition (the yellow marked area).
    Regards,
    Udo

  • Litigation Hold, Single Item Recovery, & Mailbox Database Deleted Items Retention

    Hello
    I'm looking for a simple explanation of how the three features mentioned in the subject line interact and affect one another.
    Specifically, I'm after the answer to the following question:
    If a users mailbox has litigation hold enabled, and the mailbox database it lives on has a deleted items retention value of 365 days, does that users "Recoverable Items" get deleted after 365 days, or does litigation hold, as I supspect bypass the retention
    value?
    If Single Item Recovery is enabled for said user as well, and added to the scenario above - how does this affect the retention of the deleted items?
    I cannot find a definitive article that describes mailbox database deleted items retention, litigation hold and single item recovery and their behaviours when used together.
    Regards
    Matt
    Matt

    Hello again,
    Just wanted to open this thread up again, and gain some further clarification, specifically on the behaviour of items in "Recoverable Items\ Deletions" folder.
    In the following scenario how will items be processed:
    -SingleItemRecoveryEnabled -True
    -LitigationHoldEnabled - True
    -UseDatabaseRetentionDefaults -True
    -Items in the Deletions folder have passed the retention value date as specified on the database.
    Given the parameters above, when the I run the Managed Folder Assistant against a mailbox, I'm expecting to see the items in the Deletions folder move, and be placed in Purges folder.
    This is not happening however, items are only removed from the Deletions folder when LitigationHold is disabled. Then, items bypass the Purges folder altogether and are removed from the mailbox/database altogether.
    I referred to the article below for clarification:
    http://blogs.technet.com/b/exchange/archive/2009/09/25/3408389.aspx#_Short-Term_Preservation_of
    "...the message was not purged from the mailbox store. Instead the message was moved from the Recoverable
    Items\Deletions folder to the Recoverable Items\Purges folder. All store hard-deleted items end up in this folder when single item recovery is enabled. The Recoverable Items\Purges folder is not visible to the end user, meaning that they do not see data retained
    in this folder in the Recover Deleted Items tool.
    When the message deletion timestamp has exceeded the deleted item retention window, Records Management will purge the item."
    Can anyone assist in explaining the behaviour I'm observing?
    I'm in a transition period where by our organisation has been journalling all
    email to an Online service since 2008 and this service will continue to be used solely as our archiving and compliance mechanism.
    Since Exchange 2010 was adopted by the company around 18 months ago, the previous mail administrator had litigation hold enabled on all mailboxes
    from the outset, so I'm in the position now where by I have two retention methods running side by side.
    Long story short, the online archiving will be used moving forward and litigation hold will be disabled within Exchange. 
    What I want to do is transition from long term data
    preservation inside Exchange, to short term preservation - hence the reason for now enabling SIR.
    Currently I have mailboxes with 10's of GB's of mail sat in the "Recoverable Items\Deletions" folder, and very little, if anything in some
    cases, in the respective "Purges" folder.....
    Can anyone advise on a "correct" procedure for making this transition?
    Regards
    Matt
    Matt

  • List data validation failed when creating a new list item but does not fail when editing an existing item

    Dear SharePoint Experts,
    Please help.
    Why does my simple formula work in Excel but not-work in SharePoint?
    Why does this formula...
    =IF([Request Type]="Review",(IF(ISBLANK([Request Date]),FALSE,TRUE)),TRUE)
    ...work in Excel but fail when I try to use it in SharePoint?
    The intent of this formula is the following...
    If the field "Request Type" has the value "Review" and the field "Request Data" is blank then show FALSE, otherwise show TRUE.
    SharePoint saves the formula, but when a list item is saved where the formula is implemented, (under List Settings, List Validation), SharePoint does not, say anything other than that the formula failed.
    Note that the "list data validation failed" error only happens when I am creating a new item-- the formula above works just fine when one is trying to Save on the edit form. 
    Can you help?
    Thanks.
    -- Mark Kamoski

    Dear Jason,
    I appreciate your efforts.
    However, it seems to me that this statement of yours is not correct...
    "If it meet the validation formula, then you can new or edit the item, otherwise, it will throw the 'list data validation failed' error, it is by design".
    I believe this is NOT the answer for the following reasons.
    When I create a new item and click Save, the validation error is "list data validation failed".
    When I edit an existing item and click Save, the validation error is "my custom error message" and this is, I believe, the way it needs to work each time.
    I think, at the core, the error my formula does not handle some condition of null or blank or other default value.
    I tried a forumla that casts the date back to a string, and then checked the string for a default value, but that did not work.
    I tried looking up the Correlation ID in the ULS when "list data validation failed" occurs, but that gave no useful information because, even though logging was set to Verbose, the stack trace in the error log was truncated and did not given any
    good details.
    However, it seems to me that SharePoint 2013 is not well-suited for complex validation rules, because...
    SharePoint 2013 list-level validation (NOT column-level validation) allows only 1 input for all the multi-field validation formulas in a given list-- so, if I had more than 1 multi-field validation rule to implement on a given list, it would need to be packed
    into that single-line-of-code forumla style, like Excel does. That is not practice to write, debug, or maintain.
    SharePoint 2013 list-level validation only allows 1 block of text for all such multi-field validation rules. So that will not work because I would have something like "Validation failed for one or more of the following reasons-- withdrawal cannot exceed
    available balance, date-of-birth cannot be after date-of-death,... etc". That will not work for me.
    The real and awesome solution would simply be enhancing SP 2013 so that column-level validation forumlas are able to reference other columns.
    But, for now, my workaround solution is to use JavaScript and jQuery, hook the onclick handler on the Save button, and that works good. The only problem, is that the jQuery validation rules run before any of the column-level rules created  with OOTB
    SP 2013. So, in some cases, there is an extra click for the enduser.
    Thanks,
    Mark Kamoski
    -- Mark Kamoski

  • "Extraction Failed: Cannot Open Output File" error message when installing new drivers

    Hello, I'm trying to install new drivers for my HP Photosmart C4385 Printer.  I downloaded the full feature drivers for Windows XP 32-bit, and when I start to install (extract), I get the error message:
    Extraction Failed
    Cannot Open Output File
    And the process closes.  It happens at about 85% extraction every time.
    Any idea why?  I called HP but since it is out of warranty they wanted money, which I think as absolutely ridiculous - won't even give me basic support??  Poor, poor customer service.
    This question was solved.
    View Solution.

    Hi,
    If you haven't still got the  Full Feature software installer, download it from the link below and save it to your Desktop.  If you already have it, place it on your Desktop.
    ftp://ftp.hp.com/pub/softlib/software10/COL20274/mp-53147-4/100_228_PS_AIO_02_Full_USW_enu_NB.exe
    Make sure the Printer is disconnected from your PC.
    Download and install 7-ZIP.  Once installed, right click on the software installer for your printer, select 7-Zip and choose extract files, then click Ok.
    Open the newly extracted folder and double click the setup application to start the installation ( the setup application will probably have the same icon as the original software installer you downloaded ).  Connect the printer to your PC when the software asks.
    Hope this helps.
    Best wishes,
    DP-K
    ****Click the White thumb to say thanks****
    ****Please mark Accept As Solution if it solves your problem****
    ****I don't work for HP****
    Microsoft MVP - Windows Experience

  • SQL Server 2014 installation using command line fails to remove the extraction folder when complete

    We need to install SQL Server 2014 Express in /QS mode (shows
    progress through the UI, but does not accept any input or show any error messages) as
    my setup-Prerequisite. I passed my installation parameters to
    SQLEXPRWT_x64_ENU.exe, when I ran my application it pop-ups
    user to select the folder to extract files. After I choose the folder, SQL
    files got extracted and the installation proceeded and it got succeed.
    But it fails to remove the extraction folder when installation is complete.

    There is an issue that /qs parameter is not recognized and cannot be used the same
    way as in SQL 2012. That issue will be addressed in SQL Server 2014 Service Pack 1.
    https://connect.microsoft.com/SQLServer/feedback/details/878374/sql-server-2014-express-qs-parameter-requires-user-input

  • When- When Validate Item Fails

    Hi Friends,
    I am having a problem. I have written some code for an item and trigger is WHEN-VALIDATE-ITEM. I am also using RAISE Form_Trigger_Failure; Now when wrong data enters and exception is raised; EXIT Button does not work. Like if a wrong entry in item and user wanna exit the form. The exit button on the form does not work. User have to enter the correct value then the exit button works.
    I tried the following code in the EXIT button:
    EXIT_FORM(NO_VALIDATE);
    then i tried:
    CLEAR_FORM(NO_VALIDATE);
    EXIT_FORM(NO_VALIDATE);
    But still its not working, Any solution how to control this kind of situation???
    Pliz Help,
    Imran

    Set Mouse Navigate = No on the button.
    If Forms is going to navigate to the button, it must first make sure the field the cursor is in is valid, so setting the navigation property should help.

  • How to bridge (fill) gaps when converting a 2006 geometry  into a 2002 geometry

    Is it at all possible to bridge (fill) gaps when converting a 2006 geometry into a single 2002 geometry. I have a solution for the conversion from 2006 to 2002 provided by BHall but upon further investigation investigation of my dataset some of the multi line polygons have gaps which I need to fill and I am not sure how to go about this.
    Here is a simple example of what I am trying to achieve
    Before
    SELECT (sdo_geometry(2006, 81989, NULL,
                    mdsys.sdo_elem_info_array(1,2,1,5,2,1,9,2,1,13,2,1),
                    mdsys.sdo_ordinate_array(16,0.999,16.998,-0.001,17.253,-0.001,18.003,0.999,18.003,0.999,19.001,0.999,19.001,0.999,19.999,-0.001)))
      FROM dual
    After
    SELECT (sdo_geometry(2006, 81989,NULL,
                   mdsys.sdo_elem_info_array(1,2,1),
                   mdsys.sdo_ordinate_array(16,0.999,17.253,-0.001,18.003,0.999,19.001,0.999,19.999,-0.001))) FROM dual    
    Thanks in advance

    Okay Roché,
    You might need to break this problem down into smaller parts for the forum.  All your examples show the gap being replaced by a single vertice - e.g. you want to "snap" the gap together.  I'd suggest this is just complicating your question.  Once the gap is filled (with a line) then you can run SDO_UTIL.REMOVE_DUPLICATE_VERTICES afterwards to remove the new line if its below your tolerance.  I think that Bryan's code wrapped in remove duplicate vertices will solve your second scenario.  But overall I think it would be helpful to focus just on the filling and leave the snapping for a follow-up question.
    So back to scenario #1, below is some code I wrote a while back that might do what you want or at least get you started.     Note that the input must be a multistring and the multistring cannot be "spaghetti".  In other words each line in the multistring must be disjoint or at most touch other lines only at endpoints. The goal is to sift through the lines and create a single linestring using the smallest gaps.  It's not subtle and will indeed produce bad geometries if the inputs are setup in an impossible manner.  There are also some rare geodetic bugs with SDO_GEOM.RELATE that crop up.  So you'll note I test both distance and relate in some places.  That's intentional though kind of dumb.
    Hopefully this helps.  If you improve the code please shoot a copy back to me.
    Cheers,
    Paul   
    CREATE OR REPLACE PACKAGE dz_gap_fill
    AUTHID CURRENT_USER
    AS
       FUNCTION linear_gap_filler(
           p_input            IN  MDSYS.SDO_GEOMETRY
          ,p_tolerance        IN  NUMBER DEFAULT 0.05
       ) RETURN MDSYS.SDO_GEOMETRY;
    END dz_gap_fill;
    CREATE OR REPLACE PACKAGE BODY dz_gap_fill
    AS
       FUNCTION fast_point(
           p_x             IN  NUMBER
          ,p_y             IN  NUMBER
          ,p_z             IN  NUMBER DEFAULT NULL
          ,p_m             IN  NUMBER DEFAULT NULL
          ,p_srid          IN  NUMBER DEFAULT 8265
       ) RETURN MDSYS.SDO_GEOMETRY
       AS
       BEGIN
          -- Step 10
          -- Check over incoming parameters
          IF p_x IS NULL
          OR p_y IS NULL
          THEN
             RAISE_APPLICATION_ERROR(-20001,'x and y cannot be NULL');
          END IF;
          -- Step 20
          -- Do the simplest solution first
          IF  p_z IS NULL
          AND p_m IS NULL
          THEN
             RETURN SDO_GEOMETRY(
                 2001
                ,p_srid
                ,SDO_POINT_TYPE(
                     p_x
                    ,p_y
                    ,NULL
                ,NULL
                ,NULL
          END IF;
          -- Step 30
          -- Do the other wilder choices
          IF p_z IS NULL
          AND p_m IS NOT NULL
          THEN
             RETURN SDO_GEOMETRY(
                 3301
                ,p_srid
                ,SDO_POINT_TYPE(
                     p_x
                    ,p_y
                    ,p_m
                ,NULL
                ,NULL
          ELSIF p_z IS NOT NULL
          AND   p_m IS NULL
          THEN
             RETURN SDO_GEOMETRY(
                 3001
                ,p_srid
                ,SDO_POINT_TYPE(
                     p_x
                    ,p_y
                    ,p_z
                ,NULL
                ,NULL
          ELSIF p_z IS NOT NULL
          AND   p_m IS NOT NULL
          THEN
             RETURN SDO_GEOMETRY(
                 4401
                ,p_srid
                ,NULL
                ,SDO_ELEM_INFO_ARRAY(1,1,1)
                ,SDO_ORDINATE_ARRAY(p_x,p_y,p_z,p_m)
          ELSE
             RAISE_APPLICATION_ERROR(-20001,'ERR!');
          END IF;
       END fast_point;
       FUNCTION get_start_point(
          p_input        IN  MDSYS.SDO_GEOMETRY
       ) RETURN MDSYS.SDO_GEOMETRY
       AS
          int_dims PLS_INTEGER;
          int_gtyp PLS_INTEGER;
          int_lrs  PLS_INTEGER;
       BEGIN
          -- Step 10
          -- Check over incoming parameters
          IF p_input IS NULL
          THEN
             RETURN NULL;
          END IF;
          -- Step 20
          -- Gather information about the geometry
          int_dims := p_input.get_dims();
          int_gtyp := p_input.get_gtype();
          int_lrs  := p_input.get_lrs_dim();
          -- Step 30
          -- Handle point and multipoint inputs
          IF int_gtyp = 1
          THEN
             RETURN p_input;
          ELSIF int_gtyp = 5
          THEN
             RETURN SDO_UTIL.EXTRACT(p_input,1);
          END IF;
          -- Step 40
          -- Return results
          IF int_dims = 2
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(1)
                ,p_input.SDO_ORDINATES(2)
                ,NULL
                ,NULL
                ,p_input.SDO_SRID
          ELSIF  int_dims = 3
          AND int_lrs = 3
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(1)
                ,p_input.SDO_ORDINATES(2)
                ,NULL
                ,p_input.SDO_ORDINATES(3)
                ,p_input.SDO_SRID
          ELSIF  int_dims = 3
          AND int_lrs = 0
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(1)
                ,p_input.SDO_ORDINATES(2)
                ,p_input.SDO_ORDINATES(3)
                ,NULL
                ,p_input.SDO_SRID
          ELSIF  int_dims = 4
          AND int_lrs IN (4,0)
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(1)
                ,p_input.SDO_ORDINATES(2)
                ,p_input.SDO_ORDINATES(3)
                ,p_input.SDO_ORDINATES(4)
                ,p_input.SDO_SRID
          ELSIF  int_dims = 4
          AND int_lrs = 3
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(1)
                ,p_input.SDO_ORDINATES(2)
                ,p_input.SDO_ORDINATES(4)
                ,p_input.SDO_ORDINATES(3)
                ,p_input.SDO_SRID
          ELSE
             RAISE_APPLICATION_ERROR(-20001,'ERR!');
          END IF;
       END get_start_point;
       FUNCTION get_end_point(
          p_input        IN  MDSYS.SDO_GEOMETRY
       ) RETURN MDSYS.SDO_GEOMETRY
       AS
          int_dims PLS_INTEGER;
          int_gtyp PLS_INTEGER;
          int_lrs  PLS_INTEGER;
          int_len  PLS_INTEGER;
       BEGIN
          -- Step 10
          -- Check over incoming parameters
          IF p_input IS NULL
          THEN
             RETURN NULL;
          END IF;
          -- Step 20
          -- Gather information about the geometry
          int_dims := p_input.get_dims();
          int_gtyp := p_input.get_gtype();
          int_lrs  := p_input.get_lrs_dim();
          int_len  := p_input.SDO_ORDINATES.COUNT();
          -- Step 30
          -- Handle point and multipoint inputs
          IF int_gtyp = 1
          THEN
             RETURN p_input;
          ELSIF int_gtyp = 5
          THEN
             RETURN SDO_UTIL.EXTRACT(
                 p_input
                ,SDO_UTIL.GETNUMELEM(p_input)
          END IF;
          -- Step 40
          -- Return results
          IF int_dims = 2
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(int_len - 1)
                ,p_input.SDO_ORDINATES(int_len)
                ,NULL
                ,NULL
                ,p_input.SDO_SRID
          ELSIF  int_dims = 3
          AND int_lrs = 3
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(int_len - 2)
                ,p_input.SDO_ORDINATES(int_len - 1)
                ,NULL
                ,p_input.SDO_ORDINATES(int_len)
                ,p_input.SDO_SRID
          ELSIF  int_dims = 3
          AND int_lrs = 0
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(int_len - 2)
                ,p_input.SDO_ORDINATES(int_len - 1)
                ,p_input.SDO_ORDINATES(int_len)
                ,NULL
                ,p_input.SDO_SRID
          ELSIF  int_dims = 4
          AND int_lrs IN (4,0)
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(int_len - 3)
                ,p_input.SDO_ORDINATES(int_len - 2)
                ,p_input.SDO_ORDINATES(int_len - 1)
                ,p_input.SDO_ORDINATES(int_len)
                ,p_input.SDO_SRID
          ELSIF  int_dims = 4
          AND int_lrs = 3
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(int_len - 3)
                ,p_input.SDO_ORDINATES(int_len - 2)
                ,p_input.SDO_ORDINATES(int_len)
                ,p_input.SDO_ORDINATES(int_len - 1)
                ,p_input.SDO_SRID
          ELSE
             RAISE_APPLICATION_ERROR(-20001,'ERR!');
          END IF;
       END get_end_point;
       FUNCTION is_spaghetti(
           p_input             IN  MDSYS.SDO_GEOMETRY
          ,p_tolerance         IN  NUMBER DEFAULT 0.05
       ) RETURN VARCHAR2
       AS
          num_tolerance    NUMBER := p_tolerance;
          ary_strings      MDSYS.SDO_GEOMETRY_ARRAY := MDSYS.SDO_GEOMETRY_ARRAY();
          ary_starts       MDSYS.SDO_GEOMETRY_ARRAY := MDSYS.SDO_GEOMETRY_ARRAY();
          ary_ends         MDSYS.SDO_GEOMETRY_ARRAY := MDSYS.SDO_GEOMETRY_ARRAY();
          int_count        PLS_INTEGER;
          ary_start_count  MDSYS.SDO_NUMBER_ARRAY := MDSYS.SDO_NUMBER_ARRAY();
          ary_end_count    MDSYS.SDO_NUMBER_ARRAY := MDSYS.SDO_NUMBER_ARRAY();
          ary_inside_count MDSYS.SDO_NUMBER_ARRAY := MDSYS.SDO_NUMBER_ARRAY();
       BEGIN
          -- Step 10
          -- Check over incoming parameters
          IF p_input IS NULL
          THEN
             RETURN NULL;
          ELSIF p_input.get_gtype = 2
          THEN
             RETURN 'FALSE';
          ELSIF p_input.get_gtype <> 6
          THEN
             RAISE_APPLICATION_ERROR(-20001,'input gtype must be 2 or 6');
          END IF;
          IF num_tolerance IS NULL
          THEN
             num_tolerance := 0.05;
          END IF;
          -- Step 20
          -- Break multistring into single linestrings with nodes
          int_count := SDO_UTIL.GETNUMELEM(p_input);
          ary_strings.EXTEND(int_count);
          ary_starts.EXTEND(int_count);
          ary_ends.EXTEND(int_count);
          ary_start_count.EXTEND(int_count);
          ary_end_count.EXTEND(int_count);
          ary_inside_count.EXTEND(int_count);
          FOR i IN 1 .. int_count
          LOOP
             ary_strings(i) := SDO_UTIL.EXTRACT(p_input,i);
             ary_starts(i)  := get_start_point(ary_strings(i));
             ary_ends(i)    := get_end_point(ary_strings(i));
          END LOOP;
          -- Step 30
          -- Loop through and count the nodes connections
          FOR i IN 1 .. int_count
          LOOP
             ary_start_count(i)  := 0;
             ary_end_count(i)    := 0;
             ary_inside_count(i) := 0;
             FOR j IN 1 .. int_count
             LOOP
                IF i != j
                THEN
                   IF SDO_GEOM.RELATE(
                      ary_starts(i),
                      'DETERMINE',
                      ary_strings(j),
                      num_tolerance
                   ) IN ('TOUCH','CONTAINS','COVERS','ON')
                   THEN
                      ary_start_count(i) := ary_start_count(i) + 1;
                   ELSIF SDO_GEOM.RELATE(
                      ary_ends(i),
                      'DETERMINE',
                      ary_strings(j),
                      num_tolerance
                   ) IN ('TOUCH','CONTAINS','COVERS','ON')
                   THEN
                      ary_end_count(i) := ary_end_count(i) + 1;
                   ELSIF SDO_GEOM.RELATE(
                      ary_strings(i),
                      'DETERMINE',
                      ary_strings(j),
                      num_tolerance
                   ) IN ('TOUCH','CONTAINS','COVERS','OVERLAPBYINTERSECT')
                   THEN
                      ary_inside_count(i) := ary_inside_count(i) + 1;
                   END IF;
                END IF;
             END LOOP;
             IF ary_start_count(i) > 1
             OR ary_end_count(i) > 1
             OR ary_inside_count(i) > 0
             THEN
                RETURN 'TRUE';
             END IF;
          END LOOP;
          RETURN 'FALSE';
       END is_spaghetti;
       FUNCTION points2segment(
           p_point_one              IN  MDSYS.SDO_POINT_TYPE
          ,p_point_two              IN  MDSYS.SDO_POINT_TYPE
          ,p_srid                   IN  NUMBER
       ) RETURN MDSYS.SDO_GEOMETRY
       AS
       BEGIN
          IF ( p_point_one.Z IS NULL AND p_point_two.Z IS NOT NULL )
          OR ( p_point_one.Z IS NOT NULL AND p_point_two.Z IS NULL )
          THEN
             RAISE_APPLICATION_ERROR(
                -20001,
                'both points must have the same number of dimensions, point_one Z is ' ||
                NVL(TO_CHAR(p_point_one.Z),'') ||
                ' and point_two Z is ' ||
                NVL(TO_CHAR(p_point_two.Z),'')
          END IF;
          IF p_point_one.Z IS NULL
          THEN
             RETURN SDO_GEOMETRY(
                 2002
                ,p_srid
                ,NULL
                ,SDO_ELEM_INFO_ARRAY(1,2,1)
                ,SDO_ORDINATE_ARRAY(p_point_one.X,p_point_one.Y,p_point_two.X,p_point_two.Y)
          ELSE
             RETURN SDO_GEOMETRY(
                 3002
                ,p_srid
                ,NULL
                ,SDO_ELEM_INFO_ARRAY(1,2,1)
                ,SDO_ORDINATE_ARRAY(p_point_one.X,p_point_one.Y,p_point_one.Z,p_point_two.X,p_point_two.Y,p_point_two.Z)
          END IF;
       END points2segment;
       FUNCTION points2segment(
           p_point_one              IN  MDSYS.SDO_GEOMETRY
          ,p_point_two              IN  MDSYS.SDO_GEOMETRY
       ) RETURN MDSYS.SDO_GEOMETRY
       AS
          int_gtype1 PLS_INTEGER;
          int_dims1  PLS_INTEGER;
          int_gtype2 PLS_INTEGER;
          int_dims2  PLS_INTEGER;
          point_one  MDSYS.SDO_POINT_TYPE;
          point_two  MDSYS.SDO_POINT_TYPE;
       BEGIN
          int_gtype1 := p_point_one.get_gtype();
          int_dims1  := p_point_one.get_dims();
          int_gtype2 := p_point_two.get_gtype();
          int_dims2  := p_point_two.get_dims();
          IF  int_gtype1 = 1
          AND int_gtype2 = 1
          AND int_dims1  = int_dims2
          AND p_point_one.SDO_SRID = p_point_two.SDO_SRID
          THEN
             NULL;  -- Good
          ELSE
             RAISE_APPLICATION_ERROR(
                 -20001
                ,'both point objects must be points and have the same number of dimensions and SRIDs'
          END IF;
          IF int_dims1 = 4
          THEN
             RETURN SDO_GEOMETRY(
                 4402
                ,p_point_one.SDO_SRID
                ,NULL
                ,SDO_ELEM_INFO_ARRAY(1,2,1)
                ,SDO_ORDINATE_ARRAY(
                     p_point_one.SDO_ORDINATES(1)
                    ,p_point_one.SDO_ORDINATES(2)
                    ,p_point_one.SDO_ORDINATES(3)
                    ,p_point_one.SDO_ORDINATES(4)
                    ,p_point_two.SDO_ORDINATES(1)
                    ,p_point_two.SDO_ORDINATES(2)
                    ,p_point_two.SDO_ORDINATES(3)
                    ,p_point_two.SDO_ORDINATES(4)
          ELSE
             -- Use the sdo_point_type method for the rest
             IF p_point_one.SDO_POINT IS NOT NULL
             THEN
                point_one := p_point_one.SDO_POINT;
             ELSE
                IF int_dims1 = 3
                THEN
                   point_one := SDO_POINT_TYPE(
                       p_point_one.SDO_ORDINATES(1)
                      ,p_point_one.SDO_ORDINATES(2)
                      ,p_point_one.SDO_ORDINATES(3)
                ELSE
                   point_one := SDO_POINT_TYPE(
                       p_point_one.SDO_ORDINATES(1)
                      ,p_point_one.SDO_ORDINATES(2)
                      ,NULL
                END IF;
             END IF;
             IF p_point_two.SDO_POINT IS NOT NULL
             THEN
                point_two := p_point_two.SDO_POINT;
             ELSE
                IF int_dims1 = 3
                THEN
                   point_two := SDO_POINT_TYPE(
                        p_point_two.SDO_ORDINATES(1)
                       ,p_point_two.SDO_ORDINATES(2)
                       ,p_point_two.SDO_ORDINATES(3)
                ELSE
                   point_two := SDO_POINT_TYPE(
                       p_point_two.SDO_ORDINATES(1)
                      ,p_point_two.SDO_ORDINATES(2)
                      ,NULL
                END IF;
             END IF;
             RETURN points2segment(
                 p_point_one   => point_one
                ,p_point_two   => point_two
                ,p_srid        => p_point_one.SDO_SRID
          END IF;
       END points2segment;
       FUNCTION linear_gap_filler(
           p_input            IN  MDSYS.SDO_GEOMETRY
          ,p_tolerance        IN  NUMBER DEFAULT 0.05
       ) RETURN MDSYS.SDO_GEOMETRY
       AS
          sdo_input     MDSYS.SDO_GEOMETRY := p_input;
          num_tolerance NUMBER;
          int_counter   PLS_INTEGER;
          ary_edges     MDSYS.SDO_GEOMETRY_ARRAY;
          ary_starts    MDSYS.SDO_GEOMETRY_ARRAY;
          ary_ends      MDSYS.SDO_GEOMETRY_ARRAY;
          ary_nearest   MDSYS.SDO_NUMBER_ARRAY;
          ary_distance  MDSYS.SDO_NUMBER_ARRAY;
          num_temp      NUMBER;
          num_nearest   NUMBER;
          int_winner    PLS_INTEGER;
          int_winner2   PLS_INTEGER;
          sdo_point1    MDSYS.SDO_GEOMETRY;
          sdo_point2    MDSYS.SDO_GEOMETRY;
          boo_done      BOOLEAN;
          num_one       NUMBER;
          num_two       NUMBER;
          int_looper    PLS_INTEGER := 1;
       BEGIN
          -- Step 10
          -- Check over incoming parameters
          IF num_tolerance IS NULL
          THEN
             num_tolerance := 0.05;
          END IF;
          IF sdo_input IS NULL
          OR sdo_input.get_gtype() <> 6
          THEN
             RETURN sdo_input;
          END IF;
          IF is_spaghetti(sdo_input,p_tolerance) = 'TRUE'
          THEN
             RETURN sdo_input;
          END IF;
          <>      ary_edges     := MDSYS.SDO_GEOMETRY_ARRAY();
          ary_starts    := MDSYS.SDO_GEOMETRY_ARRAY();
          ary_ends      := MDSYS.SDO_GEOMETRY_ARRAY();
          ary_nearest   := MDSYS.SDO_NUMBER_ARRAY();
          ary_distance  := MDSYS.SDO_NUMBER_ARRAY();
          -- Step 20
          -- Break multistring into edges and start and end nodes
          int_counter := SDO_UTIL.GETNUMELEM(sdo_input);     
          ary_edges.EXTEND(int_counter);
          ary_starts.EXTEND(int_counter);
          ary_ends.EXTEND(int_counter);
          FOR i IN 1 .. int_counter
          LOOP 
             ary_edges(i)  := SDO_UTIL.EXTRACT(sdo_input,i);
             ary_starts(i) := get_start_point(ary_edges(i));
             ary_ends(i)   := get_end_point(ary_edges(i));
          END LOOP;
          -- Step 30
          -- Determine the closest endpoints
          ary_nearest.EXTEND(int_counter);
          ary_distance.EXTEND(int_counter);
          FOR i IN 1 .. int_counter
          LOOP
             num_nearest := NULL;
             int_winner := NULL;
             FOR j IN 1 .. int_counter
             LOOP
                IF j != i
                THEN
                   num_temp := SDO_GEOM.SDO_DISTANCE(
                       ary_edges(i)
                      ,ary_edges(j)
                      ,num_tolerance
                   IF num_nearest IS NULL
                   OR num_temp < num_nearest
                   THEN
                      num_nearest := num_temp;
                      int_winner := j;
                   END IF;
                END IF;
             END LOOP;
             ary_nearest(i) := int_winner;
             ary_distance(i) := num_nearest;
          END LOOP;
          -- Step 40
          -- Find the smallest gap
          int_winner := NULL;
          num_nearest := NULL;
          FOR i IN 1 .. int_counter
          LOOP
             IF num_nearest IS NULL
             OR ary_distance(i) < num_nearest
             THEN
                 int_winner := i;
                 num_nearest := ary_distance(i);
                 int_winner2 := ary_nearest(i);
             END IF;
          END LOOP;
          -- Step 50
          -- Determine the endpoints to connect
          num_one := SDO_GEOM.SDO_DISTANCE(
             get_start_point(ary_edges(int_winner)),
             ary_edges(int_winner2),
             num_tolerance
          num_two := SDO_GEOM.SDO_DISTANCE(
             get_end_point(ary_edges(int_winner)),
             ary_edges(int_winner2),
             num_tolerance
          IF ( num_one = 0 AND SDO_GEOM.RELATE(
             get_start_point(ary_edges(int_winner)),
             'ANYINTERACT',
             ary_edges(int_winner2),
             num_tolerance
          ) = 'TRUE' )
          OR ( num_two = 0 AND SDO_GEOM.RELATE(
             get_end_point(ary_edges(int_winner)),
             'ANYINTERACT',
             ary_edges(int_winner2),
             num_tolerance
          ) = 'TRUE' )
          THEN
             sdo_point1 := NULL;
          ELSIF num_one < num_two
          THEN
             sdo_point1 := get_start_point(ary_edges(int_winner));
          ELSE
             sdo_point1 := get_end_point(ary_edges(int_winner));
          END IF;
          num_one := SDO_GEOM.SDO_DISTANCE(
             get_start_point(ary_edges(int_winner2)),
             ary_edges(int_winner),
             num_tolerance
          num_two := SDO_GEOM.SDO_DISTANCE(
             get_end_point(ary_edges(int_winner2)),
             ary_edges(int_winner),
             num_tolerance
          IF ( num_one = 0 AND SDO_GEOM.RELATE(
             get_start_point(ary_edges(int_winner2)),
             'ANYINTERACT',
             ary_edges(int_winner),
             num_tolerance
          ) = 'TRUE' )
          OR ( num_two = 0 AND SDO_GEOM.RELATE(
             get_end_point(ary_edges(int_winner2)),
             'ANYINTERACT',
             ary_edges(int_winner),
             num_tolerance
          ) = 'TRUE' )
          THEN
             sdo_point2 := NULL;
          ELSIF num_one < num_two
          THEN
             sdo_point2 := get_start_point(ary_edges(int_winner2));
          ELSE
             sdo_point2 := get_end_point(ary_edges(int_winner2));
          END IF;
          -- Step 50
          -- Smash together
          IF sdo_point1 IS NULL
          OR sdo_point2 IS NULL
          THEN
             sdo_input := SDO_UTIL.CONCAT_LINES(
                ary_edges(int_winner),
                ary_edges(int_winner2)
          ELSE
             sdo_input := SDO_UTIL.CONCAT_LINES(
                SDO_UTIL.CONCAT_LINES(
                   ary_edges(int_winner),
                   points2segment(sdo_point1,sdo_point2)
                ary_edges(int_winner2)
          END IF;
          boo_done := TRUE;
          FOR i IN 1 .. int_counter
          LOOP
             IF i NOT IN (int_winner,int_winner2)
             THEN
                sdo_input := SDO_UTIL.APPEND(sdo_input,ary_edges(i));
                boo_done := FALSE;
             END IF;
          END LOOP;
          -- Step 60
          -- Check if valid if returning
          IF sdo_input.get_gtype() = 2
          OR boo_done = TRUE
          THEN
             RETURN sdo_input;
          END IF;
          int_looper := int_looper + 1;
          GOTO TOP_OF_IT;
       END linear_gap_filler;
    END dz_gap_fill;

  • Exchange 2013 - Public Folder Mailbox and Single Item Recovery

    Hello,
    I recently had a request to recover some messages that an ex-employee deleted from the "recover deleted items" folder in their public folder. Since this resides on a public folder mailbox and it does have the option for
    "Single Item Recovery" to be enabled on the box (which I enabled not knowing if this really works or not), is there a way I can still recovery these items or do I have to go to a backup to obtain those messages. Since ExFolders does not work that
    is not an option. I've seen commands to restore a public folder that was deleted but not items that were deleted directly from a public folder. I checked using MFCMAPI and I do see the dumper root and the public folder dumpster for each folder but it
    looks to be only the "deletions" folder and don't see anything similar to a "purges" type folder. Any ideas or am I stuck recovering from backup? Thanks in advance!

    So I think you are stuck and will need to restore the EDB to a Recovery Database to restore the items because when the end user purged the items from the "Recover Deleted Items" it removes them from the Recoverable Items/Deletions folder. 
    Check out this article
    http://blogs.technet.com/b/exchange/archive/2013/08/23/recovering-public-folder-information-in-exchange-2013.aspx
    I have not played with the recoverable items settings on the 2013 public folder enabled mailbox EDB  but you might try checking out Litigation or In Place Hold to use as a safety mechanism moving forward.  That said this will also increase the
    DB size so consider all the options before implementing
    Search, Recover, & Extract Mailboxes, Folders, & Email Items from Offline Exchange Mailbox and Public Folder EDB's and Live Exchange Servers or Import/Migrate direct from Offline EDB to Any Production Exchange Server, even cross version i.e. 2003 -->
    2007 --> 2010 --> 2013 with Lucid8's
    DigiScope

  • Script fails when passing values from pl/sql to unix variable

    Script fails when passing values from pl/sql to unix variable
    Dear All,
    I am Automating STATSPACK reporting by modifying the sprepins.sql script.
    Using DBMS_JOB I take the snap of the database and at the end of the day the cron job creates the statspack report and emails it to me.
    I am storing the snapshot ids in the database and when running the report picking up the recent ids(begin snap and end snap).
    From the sprepins.sql script
    variable bid number;
    variable eid number;
    begin
    select begin_snap into :bid from db_snap;
    select end_snap into :eid from db_snap;
    end;
    This fails with the following error:
    DB Name DB Id Instance Inst Num Release Cluster Host
    RDMDEVL 3576140228 RDMDEVL 1 9.2.0.4.0 NO ibm-rdm
    :ela := ;
    ERROR at line 4:
    ORA-06550: line 4, column 17:
    PLS-00103: Encountered the symbol ";" when expecting one of the following:
    ( - + case mod new not null &lt;an identifier&gt;
    &lt;a double-quoted delimited-identifier&gt; &lt;a bind variable&gt; avg
    count current exists max min prior sql stddev sum variance
    execute forall merge time timestamp interval date
    &lt;a string literal with character set specification&gt;
    &lt;a number&gt; &lt;a single-quoted SQL string&gt; pipe
    The symbol "null" was substituted for ";" to continue.
    ORA-06550: line 6, column 16:
    PLS-00103: Encountered the symbol ";" when expecting one of the following:
    ( - + case mod new not null &lt;an identifier&gt;
    &lt;a double-quoted delimited-identifier&gt; &lt;a bind variable&gt; avg
    count current exists max min prior sql stddev su
    But when I change the select statements below the report runs successfully.
    variable bid number;
    variable eid number;
    begin
    select '46' into :bid from db_snap;
    select '47' into :eid from db_snap;
    end;
    Even changing the select statements to:
    select TO_CHAR(begin_snap) into :bid from db_snap;
    select TO_CHAR(end_snap) into :eid from db_snap;
    Does not help.
    Please Help.
    TIA,
    Nischal

    Hi,
    could it be the begin_ and end_ Colums of your query?
    Seems SQL*PLUS hs parsing problems?
    try to fetch another column from that table
    and see if the error raises again.
    Karl

  • Error: Show Details cannot be executed when multiple items are selected in a report filter field or in a slicer

    I have connected TABULAR Model to Excel, and in the pivot the filter is on multiple dimensions. When doing the drillthrough action it gives error - Error: Show Details cannot be executed when multiple items are selected in a report filter field or in a slicer
    Is there any workaround to this error?  so that drillthrough can be done even with multiple selection.

    Hi Vikas,
    The reason behind the error message requires the knowledge on what happens at the backend. When you perform a drill-through action, a query is sent to Analysis Services. This query is expressed in a query language called Multi-Dimensional Expression (MDX).
    Since the MDX language doesnot support drill-through command against a set (collection of tuples) an error is persisted. 
    For now, there is no workaround as it is a limitation of the underlying language that is generating the query.
    When multiple items are selected you lose the ability to drill-down on individual metrics. To resolve you must either:
    1. Select a single Item.
    2. Select all items.
    Hope this helps!
    Please mark as Answer if this helps! Thanks, Rajasekhar.

  • How to use first_record or Next_record in WHEN-VALIDATE-ITEM.

    Hi All,
    I have a multi-record block where, in one of the fields I need to add this PL/SQL so that for there is no gaps in sequence for S_type and cer_dl fields.below is the sample of how the record should appear.
    s_type cer_dl seq xyz
    ASD Y 1 N
    ASD Y 2 Y
    ASD Y 3 N
    The program is working perfectly when I use it Key-Next-item but I have to add this pl/sql in WHEN-VALIDATE-ITEM for validating the seq field but as the below program have FIRST_RECORD and NEXT_RECORD this will fail in WHEN-VALIDATE-ITEM.
    My Query is that IS there any other way of replacing FIRST_RECORD and NEXT_RECORD
    in the below program and put this in WHEN-VALIDATE-iTEM of seq field.
    I know its pain to understand the below pl/sql and then answer my query.
    PROCEDURE val_seq IS
    --Validation to check that there is no gaps in sequence for S_TYPE and cer_dl fields
         l_value_to_check varchar2(100);
         l_seq_found number;
         l_curr_sequence number;
         l_new_value varchar2(100);
         l_found boolean:=FALSE;
         l_new_set boolean := FALSE; --s_type and cer_dl are different from previous set.
    begin
         if trim(:b1.s_type) is not null
              or trim(:b1.cer_dl) is not null
         then
         -- Program continues here only if all the items are not null
         -- Get information from record that needs to be validated
         l_value_to_check := trim(:b1.s_type) || ':'|| trim(:b1.cer_dl) ;
         l_curr_sequence := :sequence;
         if :SYSTEM.CURSOR_RECORD = '1' then
              if :sequence <> 1 then ----- to check sequence is entered as 1 in the first record
              message('Error:Sequence should start with 1');
         raise form_trigger_failure;
         end if;     
              go_item('b1.XYZ');
         else
              FIRST_RECORD;
              while :SYSTEM.LAST_RECORD <> 'TRUE'
              loop
              l_found := FALSE;
              l_new_value := trim(:b1.S_type) || ':'|| trim(:cer_dl) ;
    if l_new_value = l_value_to_check then -- If the S_type and cer_dl is same then get sequence
                   l_new_set:= FALSE;
              l_seq_found := :seq;
                        if l_seq_found >= l_curr_sequence then
                             --If sequence is duplicated for S_type and cer_dl 
                   go_item('b1.seq');
                        l_new_set := FALSE;
                        elsif l_seq_found < l_curr_sequence - 1 then
                             --If sequence entered is not in order for S_type and cer_dl  .
                        go_item('b1.sequence');
                        l_found := FALSE;
                        elsif l_seq_found = l_curr_sequence - 1 then
                        -- if sequence is entered in order for S_type and cer_dl
                        l_found:= TRUE;
                        go_item('b1.xyz); --go to next item
                        end if;
              else
                   l_new_set := TRUE;
              end if;
              NEXT_RECORD;
              end loop;
         if l_new_set then
         go_item('b1.xyz'); -- go to next item
         else
         if not l_found then
              warn_alert('Error:Sequence should be in order.');
              go_item('b1.seq');
              raise form_trigger_failure;
         end if;
         end if;
         go_item('b1.xyz'); ---go to next item
    end if;
    end if;
    end;

    Hi Gurus,
    When I say enter-query and put 'IAS' in the s_type field and then do a execute query it brings all the records of 'IAS'.
    Now as I want to update the records, and when I navigate across field(s_type,cer_dl,Seq,xyz) using tab and move the cursor down on second record(IAS N 2 N), what happens is when I navigate to sequence field the cursor jumps to LAST RECORD( IAS Y 3 N ) of LAST field XYZ. I am putting the sample record
    s_type cer_dl seq xyz
    IAS N 1 N
    IAS N 2 N
    IAS N 3 N
    IAS N 4 N
    IAS Y 1 N
    IAS Y 2 N
    IAS Y 3 N
    The cursor moves to last record --IAS -Y -3-N when I tab across the second record.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • I can't clear single item in Location Bar History

    I can't clear single item in Location Bar History. I use Firefox 3.6.13 on Mac 10.6.5.
    I do select the item in location bar, press Shift and delete keys, but it delete the item only temporary...
    My Firefox Privacy pref indicate:
    - Use custom settings for history
    - Suggest History when using location bar

    Entries in the location bar drop down list with a yellow (blue on Mac) star at the right end are bookmarks.<br />
    You can remove such a bookmarked item that shows in the list if you open that url in a tab and click the yellow star in the location bar.<br />
    This will open the Edit This Bookmark dialog and you can click the Remove button to remove the bookmark.<br />
    This can also be a problem with the file places.sqlite that stores the bookmarks and the history.
    * http://kb.mozillazine.org/Bookmarks_history_and_toolbar_buttons_not_working_-_Firefox

  • EAL extract fails with ORA-03113 end-of-file on communication channel error

    Hi,
    We are trying to run an EAL (v11.1.1.4) extract from an HFM (v9.3.1.4) environment onto Oracle database. We are able to run the extract successfully for few hundred records, but when the records exceeds 10 million we get the error below
    [03 Dec 2011 06:02:41] [dbmgr] ERROR: OCI: HR#13579: Cannot execute statement for insert
    [03 Dec 2011 06:02:41] [dbmgr] ERROR: OCI: HR#01428: OCI_ERROR: (ORA-03113: end-of-file on communication channel;Process ID: 16323;Session ID: 15 Serial number: 8288; (code=3113)) [rec#1]
    [03 Dec 2011 06:02:41] [dbmgr] ERROR: OCI: HR#13580: Cannot rollback
    [03 Dec 2011 06:02:41] [dbmgr] ERROR: OCI: HR#01428: OCI_ERROR: (ORA-03114: not connected to ORACLE; (code=3114)) [rec#1]
    [03 Dec 2011 06:02:41] [dbmgr] WARN : HR#13674: Data move region job failed: HR#00000: some operations failed, see details in the log file; 81877900 cell(s) processed in 70348 second(s)
    We checked on the DB and the Oracle session that was doing the insert was open even after the extract failed with the above error.
    Any idea what could be causing this??
    Thanks
    Ramya Suresh

    Hi,
    I was able to fix this issue.
    From the trace file identified the related objects and validated them.
    More details can be found in below MOS note.
    [ID 421711.1]--Understanding and Diagnosing ORA-00600 [17069] Errors
    Thanks for all the inputs...

  • Database logon failed when opening report with parameter values in CrystalReportViewer

    Hi,
    I designed 2 crystal reports: report A contains parameter fields and report B did not contain any parameter
    I can open both reports in development site using CrystalReportViewer control. When I open the reports in testing site,
    I can open report B but can't open report A. It display error message "Database logon failed". When I set EnableDatabaseLogonPrompt
    to true and try to open the report A again, it shows database connection data which was created on report.
    In addition, it is strange that it displays error "Database logon failed" when I click an item in group tree panel of the report B. This indicates that it can load data from database
    in testing site but it connect to development database when clicking items in group tree panel
    All reports connect to database using Windows Authenication. It use dynamic database connection at runtime
    How to ensure the report always connect database using login data dynamically at runtime?
    Below is my code about database connection:
    string strServerName = null;
    string strDatabaseName = null;
    ReportDocument rptDoc = new ReportDocument();
    rptDoc.Load(strFilePath);
    ConnectionInfo connInfo = new ConnectionInfo();
    TableLogOnInfo logonInfo;
    for (int i = 0; i < rptDoc.Database.Tables.Count; i++)
    logonInfo = rptDoc.Database.Tables[i].LogOnInfo;
    ReportHelper.GetReportConnection(ref strServerName, ref strDatabaseName, strSystemType);
    logonInfo.ConnectionInfo.ServerName = strServerName; 
    logonInfo.ConnectionInfo.DatabaseName = strDatabaseName;
    logonInfo.ConnectionInfo.IntegratedSecurity = true;
    rptDoc.Database.Tables[i].ApplyLogOnInfo(logonInfo);
    rptDoc.Database.Tables[i].Location = rptDoc.Database.Tables[i].Location.Substring(0, rptDoc.Database.Tables[i].Location.Length - 2);
    crvViewer.ReportSource = rptDoc;
    crvViewer.DataBind();
    Development environment:
    - SAP Crystal Reports 2013 Support Pack 1
    - Visual Studio Professional 2012
    - .NET Framework 3.5
    - DDL
    CrystalDecisions.Shared (v 13.0.8.1216)
    CrystalDecisions.Web (v 13.0.8.1216)
    CrystalDecisions.CrystalReports.Engine (v 13.0.8.1216)
    Database connection in crystal report:
    - Database Type: OLEDB (ADO)
    - Provider: SQLOLEDB
    - Integrated Security: True
    Thanks and Regards,
    Tony

    Hi Tonylck
    Try  to pass login info to crystal report dynamically as follows:
    using System;
    using System.Windows.Forms;
    using CrystalDecisions.CrystalReports.Engine;
    using CrystalDecisions.Shared;
    namespace WindowsApplication1
    public partial class Form1 : Form
    public Form1()
    InitializeComponent();
    private void button1_Click(object sender, EventArgs e)
    ReportDocument cryRpt = new ReportDocument();
    TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
    TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
    ConnectionInfo crConnectionInfo = new ConnectionInfo();
    Tables CrTables ;
    cryRpt.Load("PUT CRYSTAL REPORT PATH HERE\CrystalReport1.rpt");
    crConnectionInfo.ServerName = "YOUR SERVER NAME";
    crConnectionInfo.DatabaseName = "YOUR DATABASE NAME";
    crConnectionInfo.UserID = "YOUR DATABASE USERNAME";
    crConnectionInfo.Password = "YOUR DATABASE PASSWORD";
    CrTables = cryRpt.Database.Tables ;
    foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
    crtableLogoninfo = CrTable.LogOnInfo;
    crtableLogoninfo.ConnectionInfo = crConnectionInfo;
    CrTable.ApplyLogOnInfo(crtableLogoninfo);
    crystalReportViewer1.ReportSource = cryRpt;
    crystalReportViewer1.Refresh();
    Ref
    http://csharp.net-informations.com/crystal-reports/csharp-crystal-reports-dynamic-login.htm
    Mark as answer if you find it useful
    Shridhar J Joshi Thanks a lot

Maybe you are looking for