3.1.2 - apex collections and invalid number

Hi,
We use collections on a number of pages in our production applications and everything is running well. Those applications are running on Apex 3.0 right now in 4 different environments.
We have now upgraded to Apex 3.1.2 on 3 of those environments. 2 of them work properly, but with the other one we get an error message "invalid number" with the collections. The data is the same on all the environments.
The query looks like this (c002 is always a number) :
select to_number(c002), to_number(c001)
into   v_seq, v_page
from   htmldb_collections
where  collection_name = 'COLLECTION_NAME'
and    to_number(c002) = 1;
I have modified the query like this to get it working again :
select to_number(c002), to_number(c001)
into   v_seq, v_page
from   htmldb_collections
where  collection_name = 'COLLECTION_NAME'
and c002 = '1';
1) Why is that happening in only one of the 3 environments using Apex 3.1.2 and none of the Apex 3.0 environments ?
2) Why can't i do a to_number in the where clause when i do it in the select with the same data ?
Thanks for your help !
Patrick

probably there is some data in c002 which is not number and when you convert it with to_number(c002) it is failing, but when compare it with c002 = '1' as there is no conversion of data before compare every thing works fine.

Similar Messages

  • Apex Collections and dates

    Apex Collections and Dates
    I made an earlier posting today on the forum titled “‘ORA-01861: literal does not match format string’ error after my hosting company upgraded to Apex 3.2.” The issue relates to Apex collections and dates. Prior to the hosting company upgrading Apex 3.2 from 3.1 all was working OK. It seemed a reasonable assumption that the issue relates to the upgrade to 3.2. Having tested the code against another Apex 3.2 installation I am satisfied that the issue is not with Apex 3.2. That said, I am still getting the issue on the hosting site.
    To demonstrate the issue to my hosting company and this forum, I put together a simple one page application that demonstrates the issue using the least amount of code.
    I created a page with an ‘On Load – Before header” process that sets up an Apex Collection with a single value of ’20-FEB-2009’ in the c001 element as follows:
    if apex_collection.collection_exists(p_collection_name=>'THEISSUE') then
    apex_collection.delete_collection(p_collection_name=>'THEISSUE');
    end if;
    apex_collection.create_collection(p_collection_name => 'THEISSUE');
    APEX_COLLECTION.ADD_MEMBER(
    p_collection_name => 'THEISSUE',
    p_c001 => '20-FEB-2009');
    I added an SQL REPORT region to the page which uses the Apex Collection as follows:
    select to_date(c001,'DD-MON-YYYY') testdate
    from apex_collections
    where collection_name='THEISSUE'
    and to_date('20-FEB-2009','DD-MON-YYYY')
    = to_date(c001,'DD-MON-YYYY')
    When the page is run I get the ‘ORA-01861: literal does not match format string’ error.
    If I remove the following from the SQL Report Region:
    and to_date('20-FEB-2009','DD-MON-YYYY')
    = to_date(c001,'DD-MON-YYYY')
    and run the page, the date is displayed OK, i.e., c001 is converted to a date OK. This made me wonder whether it does not like the line to_date('20-FEB-2009','DD-MON-YYYY')? So I changed the where code for the report to :
    and to_date(c001,'DD-MON-YYYY')
    = to_date(c001,'DD-MON-YYYY')
    i.e., convert c001 to a date and compare it to itself. The rationale being that if the c001 converts to a date OK, then comparing c001 converted to a date with itself should not give an error. It did it gave the same error ‘ORA-01861’
    It would seem on my hosting site since the upgrade, that Apex and Oracle have problems with Apex Collection elements being converted to dates as part of the where clause.
    Now my understating of Oracle Apex collections in simple terms is that all Apex collections are held in a single Oracle table managed by a series of Apex functions. Given that all Apex collections are in the same table, could the issue be with the Oracle database when it is creating its execution plan for the query? Could Oracle be including the value of c001 from other collections (i.e., when c001 is not in a date format ) in the initial stages of its execution plan?
    I hope the above make sense and thanks in advance.
    Ian

    Scott,
    I believe I have found the answer the statistics on WWV_FLOW_COLLECTIONS$ and WWV_FLOW_COLLECTION_MEMBERS$. are out of date and Oracle is doing a full table scan instead of using the indices to select only the c001 columns that belong to the given collection_id. If I change my simple example to store the date value in c050 it works ok. (In all probability this will be the only collection on the hosted database to use c050).
    I have asked the hosting company to gather stats on all the apex tables.
    Thanks for your help
    Ian

  • Interactive Report and the mysterious invalid number

    Hello,
    I have an application that is ready, or so I thought, to be sent to a client to update an existing application. One page in the application has an interactive report that is based on a table in the parsing schema that is joined to the apex_collections view. The report works without issue in my dev environment as well as in the client's test environment. But when a colleague tested the updated app in a different test environment, the report errors out with an ORA-01722: invalid number error.
    Needless to say I'm now hesitant about the update to production because I can't find the cause of the issue on my colleague's machine and would hate for this to happen in production. In trying to find the issue in on my colleague's machine, I first tried removing all of the columns (save the id) from the report to see if it was being generated there, no change. Then I started removing the joins and when the join to the apex_collections view was removed the error disappeared. The join was written as:
    SELECT *
    FROM table tbl
    JOIN apex_collections col
       ON tbl.id = col.c001
    WHERE col.collection_name = 'MY_COLLECTION';I know that the underlying tables for the apex_collections view store columns c001 .. c050 as VARCHAR2(4000) so I was relying on implicit data conversion to apply the join. Perhaps this is where the error is coming from but that would mean that "extra" rows are being returned as all of the c001 values returned in the session (from dev toolbar) are also valid numbers. As I said before, the problem is only occurring in 1 of 3 apex instances so I tested it in a 4th, and again, there was NO problem. I then realized that my query is potentially dangerous if c001 is used to hold something other than a number in the current session, which is NOT the case in any of the instances, but I tried updating the report to the following to see if it would help:
    SELECT *
    FROM table tbl
    JOIN (
       SELECT TO_NUMBER(c001) AS c001
       FROM apex_collections col
       WHERE collection_name = 'MY_COLLECTION'
    ) apex_col
       ON apex_col.c001 = tbl.idThat query worked as expected in the dev environment and will be used as the query going forward. However, it failed to fix the problem in the "problem" instance. This seems to be a local issue but I'd like to know for sure. All of the systems are configured as follows:
    1. Dev - Oracle 10g R2 XE - ApEx 3.1.2 - Works
    2. Test1 - Oracle 10g R2 EE - ApEx 3.1.2 - Works
    3. Test2 (colleague) - Oracle 10g R2 XE - ApEx 3.1.2 - Fails
    4. Test3 (my localhost) - Oracle 10g R2 XE - ApEx 3.1.2 - Works
    5. Prod - Oracle 10g R2 EE - ApEx 3.1.2 - ???
    Any ideas?
    Regards,
    Dan
    http://danielmcghan.us
    http://sourceforge.net/projects/tapigen

    Dan,
    I'm always suspicious of problems that disappear without knowing why - usually they reappear the very moment that an end-user starts using the app :D
    You didn't show how you are populating the collection in your original posting, so I'm not clear on exactly what the data would show. What I was thinking was, knowing that collections are all varchar2's, that something like TO_CHAR() had been used in the SQL statement that created the collection.
    I don't think that trimming the data would have any effect. If the problem does happen again, I would suggest creating a report based on the collection (basically doing a data dump onto a page) and then see exactly what is in there. If any number contains a comma (or other characters such as currency symbols), then you have to use a number format string to get back to the actual raw number.
    Andy

  • User Accounts and ORA-01722: invalid number error

    Hello,
    I have been using Express for a month or so now but have very limited knowledge of how it works.
    My Problem:
    I have a listing screen for user records which creates records in table QAS_USERS.
    When I add a record it saves the data OK and put the record in the list.
    When I click on the record in the list it takes me to the edit screen and I can change
    the details and it works OK and all the changes get saved to the database.
    On the data entry screen I have a list of the User Groups so I can select what group
    the user will be in, usual details in username, fullname, email address, password etc..
    I then added a routine to create a USER in the APEX Manage USERs.
    It creates the record in my table QAS_USERS and it creates a APEX User Account with
    the correct details and the record is displayed in the list.
    So far so good.
    Now the errors start:
    1. When I look at the User Account in Administration -> Manage Application Express Users
    most of the details have been added but the User Group does not get allocated.
    2. The record I created in QAS_USERS appears in the list on my listing screen but when
    I click on the Edit Icon on the left of the list I get the following error appear
    when the screen changes to the edit screen:
    ORA-01722: invalid number
    Unable to fetch row error
    QAS_USER Table:
    ID NUMBER
    CREATED_ON DATE
    CREATED_BY VARCHAR2(10)
    CHANGED_ON DATE
    CHANGED_BY VARCHAR2(10)
    ACTIVE VARCHAR2(3)
    USERNAME VARCHAR2(10)
    FULLNAME VARCHAR2(30)
    TEAMLEADER VARCHAR2(3)
    TEAMLEADER_ID NUMBER
    LAB NUMBER
    DIRECTOR VARCHAR2(3)
    ACTION_MANAGER VARCHAR2(3)
    SDM VARCHAR2(3)
    GM VARCHAR2(3)
    EMAIL_ADDRESS VARCHAR2(50)
    PASSWORD VARCHAR2(12)
    SDTL VARCHAR2(3)
    FIRSTNAME VARCHAR2(30)
    LASTNAME VARCHAR2(30)
    GROUP_ID NUMBER
    USER_ID VARCHAR2(20)
    Process Script to create the Express User Account:
    Declare
    group_id NUMBER;
    BEGIN
    group_id := APEX_UTIL.get_group_id (:P15_GROUP_ID);
    APEX_UTIL.CREATE_USER (
    P_USER_NAME => :P15_USERNAME,
    P_FIRST_NAME => :P15_FIRSTNAME,
    P_LAST_NAME => :P15_LASTNAME,
    P_WEB_PASSWORD => :P15_PASSWORD,
    P_EMAIL_ADDRESS => :P15_EMAIL_ADDRESS,
    p_developer_privs => 'ADMIN',
    p_group_ids => group_id);
    END;
    If any one has any ideas I would be very grateful.
    Regards,
    Simon.

    Hi,
    It could be that this is because you are using SYSDATE which contains the time as a fraction rather than TRUNC(SYSDATE) which just contains the current time. It could be that your working_dates_between raises this error.
    However, your formula is far more complicated than it needs to be.
    Firstly, you want to look at the date window ADD_MONTHS(TRUNC(SYSDATE), -6) to TRUNC(SYSDATE). Then you want to look at the portion of the absence that falls in the date window. This is GREATEST(Absence Attendance.Actual Start Date, ADD_MONTHS(TRUNC(SYSDATE), -6)) to LEAST(NVL(Absence Attendance."Actual End Date",TRUNC(SYSDATE)), TRUNC(SYSDATE)). You may need to add 1 to the absence end date because this is the last day of their absence rather than the date they return. It depends how you calculate the days between the start and end
    date of the absence. You can create calculations for the start and end date of the absences within the 6 months time window. Create calculation AbsenceStart as
    GREATEST(Absence Attendance.Actual Start Date, ADD_MONTHS(TRUNC(SYSDATE), -6))
    and AbsenceEnd as
    LEAST(NVL(Absence Attendance."Actual End Date",TRUNC(SYSDATE)), TRUNC(SYSDATE))
    Then you need to only pick up absence that a part of the absence in your 6 month date window. You can use a condition in the workbook or a condition in a case statement to do this. You then need to calculate the difference between these dates and SUM all the values.
    SUM(CASE WHEN AbsenceEnd >= AbsenceStart THEN WORKING_DAYS_BETWEEN(AbsenceStart, AbsenceEnd) END)
    That's it. Not so complicated after all.
    Rod West

  • ORA-01722: invalid number error with Bulk collect

    Hi ,
    I have been using the script to delete old seasonal data from my application DB tables. The stored procedure has been created successfully but when i try to run the proc it has been throwing 'ORA-01722: invalid number' exception at line 'FETCH C1_CUR BULK COLLECT INTO C1_TYPE_VAR LIMIT v_bulklimit;'.
    Could you please help me here?
    Below is the stored proc:
    CREATE OR REPLACE PROCEDURE clean_old_season_data(P_SEASON VARCHAR2) AS
    CURSOR C1_CUR IS SELECT ROWID RID,pro.* FROM PROPS pro where pro.ITEMPK IN
    (SELECT sve.pk FROM SAVEDVALUEENTRY sve WHERE sve.p_parent IN
    (SELECT s.pk FROM SAVEDVALUES s WHERE s.P_MODIFIEDITEM IN
    (SELECT a.PK
    FROM products a
    WHERE a.p_season IN (select s.pk from Seasons s where s.P_code=P_SEASON)
    ) ) ) and rownum<5;
    CURSOR C2_DEL IS SELECT RID FROM PROPS_HISTORY;
    TYPE C1_TYPE IS TABLE OF C1_CUR%ROWTYPE;
    C1_TYPE_VAR C1_TYPE;
    TYPE C2_TYPE IS TABLE OF UROWID;
    C2_TYPE_VAR C2_TYPE;
    ex_dml_errors EXCEPTION;
    PRAGMA EXCEPTION_INIT(ex_dml_errors, -24381);
    l_error_count NUMBER;
    err_num NUMBER;
    err_msg VARCHAR2 (300);
    COMMIT_VARIABLE PLS_INTEGER:=0;
    v_bulklimit NUMBER:=2;
    BEGIN
    /*------------------ Data Selection and INSERTION IN HISTORY TABLE ---------------------------------------*/
    OPEN C1_CUR;
    LOOP
    DBMS_OUTPUT.put_line('Cursor opend now in loop');
    FETCH C1_CUR BULK COLLECT INTO C1_TYPE_VAR LIMIT v_bulklimit;//ERROR OCCURS HERE
    DBMS_OUTPUT.put_line('Cursor count is'|| C1_TYPE_VAR.COUNT);
    FORALL I IN 1..C1_TYPE_VAR.COUNT SAVE EXCEPTIONS
    INSERT INTO PROPS_HISTORY VALUES C1_TYPE_VAR(I);
    COMMIT_VARIABLE := COMMIT_VARIABLE + v_bulklimit;
    DBMS_OUTPUT.put_line('Commit variable'|| COMMIT_VARIABLE.COUNT);
    IF COMMIT_VARIABLE = v_bulklimit THEN
    COMMIT;
    COMMIT_VARIABLE := 0;
    END IF;
    EXIT WHEN C1_CUR%NOTFOUND;
    END LOOP;
    DBMS_OUTPUT.put_line('Cursor closed now in loop and data inserted in history table');
    CLOSE C1_CUR;
    /*------------------ Data Selection and DELETION IN Live TABLE ---------------------------------------*/
    COMMIT_VARIABLE := 0;
    OPEN C2_DEL;
    LOOP
    FETCH C2_DEL BULK COLLECT INTO C2_TYPE_VAR LIMIT 2;
    FORALL I IN 1..C2_TYPE_VAR.COUNT SAVE EXCEPTIONS
    DELETE FROM PROPS WHERE ROWID = C2_TYPE_VAR(I);
    COMMIT_VARIABLE := COMMIT_VARIABLE + 2;
    IF COMMIT_VARIABLE = 2 THEN
    COMMIT;
    COMMIT_VARIABLE := 0;
    END IF;
    EXIT WHEN C2_DEL%NOTFOUND;
    END LOOP;
    CLOSE C2_DEL;
    END;

    Although there are many things which should not have been done in the posted code, I could not find any reason why the Invalid number error should occur at the Fetch clause.
    I would suggest you to Insert into Table by providing the Order of Columns i.e. Insert into table (col1, ... colN) values (coll(i).col1...col(i).colN);
    I tested below code and it did not give any errors.
    drop table test_table;
    create table test_Table
      rid   varchar2(100),
      emp_id  number(5),
      fname   varchar2(20),
      lname   varchar2(50)
    set serveroutput on;
    declare
      cursor c_cur is
          select rowid rid, e.*
            from employees e
           where rownum < 10;
      type typ_cur is table of c_cur%rowtype;
      typ typ_cur;
      l_bulk_limit    number := 5;
    begin
      open c_cur;
      loop
        fetch c_cur bulk collect into typ limit l_bulk_limit;
        dbms_output.put_line('Collection Count :: ' || typ.count);
        forall i in 1..typ.count --typ.first..typ.last
          insert into test_Table (rid, emp_id, fname, lname) values (typ(i).rid,typ(i).employee_id,typ(i).first_name,typ(i).last_name);
        dbms_output.put_line('Processed ' || l_bulk_limit || ' records.');
        exit when c_cur%notfound;
      end loop;
      commit;
    end;
    select * from test_table;PS:- 1. When you are processing only 4 Records, then why are you breaking them in 2 Loops?
    2. Why Commit every time you are processing a DML? Why not maintain an Error Flag and Rollback the Transaction as soon as error is encountered?
    3. Use "{code}" (Exclude Double Quotes) to format the code. I am not sure if works.
    Regards,
    P.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

  • "Invalid number" error using Interactive Report search  on collection

    hi -- I have several interactive reports based on collections. In the IR reqion query definition,
    I cast the collection values as needed (number, date, etc). Everything's been working great.
    In both development and production, I can use the search feature of interactive reports
    and it finds rows containing the text I type in (as well as everything else working fine...)
    I just imported a new version of an application into our production database. Now, when I use the
    interactive report search, I always get "invalid number". This even happens on interactive reports
    that still work in the previous version of the production application... and these IRS
    have not been modified at all.
    If I create a filter and search for "elevation" in a string column, the filter works. If I create a filter
    searching for "elevation" in a number column, I get "invalid number". (In the development
    environment, I can do the latter -- it just doesn't find any rows.)
    Clearly it's choking on the types of the columns in the IR... but why now and not before, and why
    in the production database but not the development DB? Both are running 4.0.1.00.03.
    This is a pretty major loss of functionality... and it comes at a really bad time... Help?!
    Thanks,
    Carol

    hi Andy, Tony -- Completely understand about your email address. I've actually wondered at the fact that any
    of you gurus are willing to give them out.
    It's not tons of stuff, so here it is.
    1) The application process that creates the collection. This process that runs whenever an IR
    page is being rendered. The various DB names are application items. This application can affect data
    on multiple databases. You'll see see this in the process that builds the query.
    IF (apex_collection.collection_exists (      
        p_collection_name=>'IR_COLLECTION')) then
        apex_collection.delete_collection(p_collection_name=>'IR_COLLECTION');
    END IF;
    apex_collection.create_collection_from_query_b(p_collection_name=>'IR_COLLECTION', p_query=>meta_data_pkg.build_ir_collection_query(:TABLE_NAME, :MASTER_DB_NAME, :CZAR_DB_NAME, :DB_NAME));2) The database function that constructs the query. Called in the above create_collection statement.
    FUNCTION build_ir_collection_query (table_name varchar2, master_db_name varchar2, czar_db_name varchar2, ref_db_name varchar2)
    return varchar2
    IS
      query VARCHAR2(3000);
    BEGIN
      IF /* check for other table names here */ THEN
        -- build queries for other tables
       -- *** HDB_EXT_DATA_CODE
      ELSIF (upper(table_name) in ('HDB_EXT_DATA_CODE', 'HDB_EXT_DATA_CODE_SYN')) THEN
        query := 'SELECT /*+DRIVING_SITE(dcs)*/ dc.ext_data_code_sys_id, dcs.ext_data_code_sys_name, dcs.agen_id, a.agen_name, dc.primary_data_code,';
        query := query||' dc.secondary_data_code, dc.hdb_datatype_id, d.datatype_name, d.unit_id, u.unit_name, d.physical_quantity_name, to_char(dc.date_time_loaded,''DD-MON-YYYY HH24:MI:SS'')';
        query := query||' FROM hdb_ext_data_code_syn@'||master_db_name || ' dc, hdb_ext_data_code_sys_syn@'||master_db_name ||
                 ' dcs, hdb_agen_syn@'||master_db_name||' a, hdb_datatype_syn@'||master_db_name||' d, hdb_unit@'||czar_db_name||' u';
        query := query||' WHERE dc.ext_data_code_sys_id = dcs.ext_data_code_sys_id AND dcs.agen_id = a.agen_id(+) AND dc.hdb_datatype_id = d.datatype_id AND d.unit_id = u.unit_id';
       /* continue w/ other tables */
    END;3) The query that it builds for the table in question:
    SELECT /*+DRIVING_SITE(dcs)*/ dc.ext_data_code_sys_id, dcs.ext_data_code_sys_name, dcs.agen_id, a.agen_name,
    dc.primary_data_code, dc.secondary_data_code, dc.hdb_datatype_id, d.datatype_name, d.unit_id, u.unit_name,
    d.physical_quantity_name, to_char(dc.date_time_loaded,'DD-MON-YYYY HH24:MI:SS')
    FROM hdb_ext_data_code_syn@UCHDB2 dc,  hdb_ext_data_code_sys_syn@UCHDB2 dcs, hdb_agen_syn@UCHDB2 a,
    hdb_datatype_syn@UCHDB2 d, hdb_unit@UCHDB2 u
    WHERE dc.ext_data_code_sys_id = dcs.ext_data_code_sys_id AND dcs.agen_id = a.agen_id(+)
    AND dc.hdb_datatype_id = d.datatype_id AND d.unit_id = u.unit_id           4) The explain plan results on the development database
    PLAN_TABLE_OUTPUT                                                                                  
    Plan hash value: 583729845                                                                         
    | Id  | Operation                       | Name                  | Rows  | Bytes | Cost (%CPU)| Time
        | Inst   |                                                                                     
    |   0 | SELECT STATEMENT REMOTE         |                       |    97 | 16490 |    19  (16)| 00:00
    :01 |        |                                                                                     
    |*  1 |  HASH JOIN                      |                       |    97 | 16490 |    19  (16)| 00:00
    :01 |        |                                                                                     
    |   2 |   TABLE ACCESS FULL             | HDB_UNIT              |   177 |  3540 |     3   (0)| 00:00
    :01 | UCHDB2 |                                                                                     
    |*  3 |   HASH JOIN RIGHT OUTER         |                       |    95 | 14250 |    15  (14)| 00:00
    :01 |        |                                                                                     
    |   4 |    TABLE ACCESS FULL            | HDB_AGEN              |    54 |  1944 |     3   (0)| 00:00
    :01 | UCHDB2 |                                                                                     
    |*  5 |    HASH JOIN                    |                       |    95 | 10830 |    12  (17)| 00:00
    :01 |        |                                                                                     
    |   6 |     MERGE JOIN                  |                       |   112 |  5936 |     6  (17)| 00:00
    :01 |        |                                                                                     
    |   7 |      TABLE ACCESS BY INDEX ROWID| HDB_EXT_DATA_CODE_SYS |    15 |   405 |     2   (0)| 00:00
    :01 | UCHDB2 |                                                                                     
    |   8 |       INDEX FULL SCAN           | HDB_EXT_DATA_CODE_SYS |    15 |       |     1   (0)| 00:00
    :01 | UCHDB2 |                                                                                     
    |*  9 |      SORT JOIN                  |                       |   112 |  2912 |     4  (25)| 00:00
    :01 |        |                                                                                     
    |  10 |       TABLE ACCESS FULL         | HDB_EXT_DATA_CODE     |   112 |  2912 |     3   (0)| 00:00
    :01 | UCHDB2 |                                                                                     
    |  11 |     TABLE ACCESS FULL           | HDB_DATATYPE          |   711 | 43371 |     5   (0)| 00:00
    :01 | UCHDB2 |                                                                                     
    Predicate Information (identified by operation id):                                                
       1 - access("A2"."UNIT_ID"="A1"."UNIT_ID")                                                       
       3 - access("A4"."AGEN_ID"="A3"."AGEN_ID"(+))                                                    
       5 - access("A5"."HDB_DATATYPE_ID"="A2"."DATATYPE_ID")                                           
       9 - access("A5"."EXT_DATA_CODE_SYS_ID"="A4"."EXT_DATA_CODE_SYS_ID")                             
           filter("A5"."EXT_DATA_CODE_SYS_ID"="A4"."EXT_DATA_CODE_SYS_ID")                             
    Note                                                                                               
       - fully remote statement                                                                         5) The explain plan results on the production database
    PLAN_TABLE_OUTPUT                                                                                                                                                                  
    Plan hash value: 583729845                                                                                                                                                         
    | Id  | Operation                       | Name                  | Rows  | Bytes | Cost (%CPU)| Time     |                                                                          
    |   0 | SELECT STATEMENT                |                       |    97 | 16490 |    19  (16)| 00:00:01 |                                                                          
    |*  1 |  HASH JOIN                      |                       |    97 | 16490 |    19  (16)| 00:00:01 |                                                                          
    |   2 |   TABLE ACCESS FULL             | HDB_UNIT              |   177 |  3540 |     3   (0)| 00:00:01 |                                                                          
    |*  3 |   HASH JOIN RIGHT OUTER         |                       |    95 | 14250 |    15  (14)| 00:00:01 |                                                                          
    |   4 |    TABLE ACCESS FULL            | HDB_AGEN              |    54 |  1944 |     3   (0)| 00:00:01 |                                                                          
    |*  5 |    HASH JOIN                    |                       |    95 | 10830 |    12  (17)| 00:00:01 |                                                                          
    |   6 |     MERGE JOIN                  |                       |   112 |  5936 |     6  (17)| 00:00:01 |                                                                          
    |   7 |      TABLE ACCESS BY INDEX ROWID| HDB_EXT_DATA_CODE_SYS |    15 |   405 |     2   (0)| 00:00:01 |                                                                          
    |   8 |       INDEX FULL SCAN           | HDB_EXT_DATA_CODE_SYS |    15 |       |     1   (0)| 00:00:01 |                                                                          
    |*  9 |      SORT JOIN                  |                       |   112 |  2912 |     4  (25)| 00:00:01 |                                                                          
    |  10 |       TABLE ACCESS FULL         | HDB_EXT_DATA_CODE     |   112 |  2912 |     3   (0)| 00:00:01 |                                                                          
    |  11 |     TABLE ACCESS FULL           | HDB_DATATYPE          |   711 | 43371 |     5   (0)| 00:00:01 |                                                                          
    Predicate Information (identified by operation id):                                                                                                                                
       1 - access("D"."UNIT_ID"="U"."UNIT_ID")                                                                                                                                         
       3 - access("DCS"."AGEN_ID"="A"."AGEN_ID"(+))                                                                                                                                    
       5 - access("DC"."HDB_DATATYPE_ID"="D"."DATATYPE_ID")                                                                                                                            
       9 - access("DC"."EXT_DATA_CODE_SYS_ID"="DCS"."EXT_DATA_CODE_SYS_ID")                                                                                                            
           filter("DC"."EXT_DATA_CODE_SYS_ID"="DCS"."EXT_DATA_CODE_SYS_ID")                                                                                                             6) This is the source query for the interactive report in question. The application process that creates the
    collection runs before this region is rendered.
    Select /*+ NO_QUERY_TRANSFORMATION */
    to_number(C001) Ext_Data_Code_Sys_Id,
    C002 Ext_Data_Code_Sys_Name,
    to_number(C003) Agen_Id,
    C004 Agen_Name,
    C005 Primary_Data_Code,
    C006 Secondary_Data_Code,
    to_number(C007) Hdb_Datatype_Id,
    C008 Datatype_Name,
    to_number(C009) Unit_Id,
    C010 Unit_Name,
    C011 Physical_Quantity_Name,
    C012 Date_Time_Loaded
    from apex_collections
    where collection_name = 'IR_COLLECTION'
    order by 1,5,7Well, maybe it is alot... !
    Happy New Year!
    Carol

  • How to create an apex collection to store and loop through the values

    I couldn't find any simple example to do this
    Apex 4.2
    I need to create an apex collection. I have a query that returns multiple roles for a user. I need to check to see if one of my item values is within the collection but am not sure how to do so. So far I have:
    begin
    APEX_COLLECTION.CREATE_COLLECTION (
    p_collection_name => 'ALL_ROLES');
    select count(granted_role) into count from dba_role_privs where upper(grantee) = upper(:APP_USER);
    end;
    How would I store the query results in the collection?

    Trying to understand your code and a better suggestion:
    declare
    is_viewable boolean;
    v_count number;
    l_query varchar2(2000);
    i_counter number(10) :=1;
    begin
    --l_query := 'select granted_role from dba_role_privs where upper(grantee) = upper(:APP_USER)';
    --why do you need a collection, this is a simple select count(1) question
    APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY (
    p_collection_name => 'ALL_ROLES',
    p_query => l_query,
    p_generate_md5 => 'YES');
    -- You create a collection, but where are you using it?
    -- select count(granted_role) into count from dba_role_privs where upper(grantee) = upper(:APP_USER);
    -- discard the above code
    -- If you want to see  how many elements in a collection
    -- determine # of elements in a collection
    http://docs.oracle.com/cd/E23903_01/doc/doc.41/e21676/apex_collection.htm#CJAFFEAH
    v_count := APEX_COLLECTION.COLLECTION_MEMBER_COUNT ('ALL_ROLES');
    IF :P32_SUBMISSION_DATE IS NOT NULL THEN
      begin
      select count(granted_role) into v_count
         from dba_role_privs
      where upper(grantee) = upper(:APP_USER) and
        granted_role in ('SURVEY_SUID','SURVEY_JOB_SUID');
      exception
      when no_rows_found then
        v_count := 0;
      end;
      if v_count > 0 then
        is_viewable := true;
      else
        is_viewable := false;
      endif;
    else
      is_viewable := false;
    endif;
    return is_viewable;
    end;Thank you,
    Tony Miller
    Ruckersville, VA

  • Case When Statement and ORA:01722 Invalid number error

    Hi folks, I have posted this under another heading as well under E-business suite so apologies if some you have already seen it but I would really appreciate some help on this one. Any suggestions are most welcome.
    We are trying to put together a calculation that returns the number of days absent an individual has had in a given time period. We need to cater for those absences that started before the period and are closed during it, absence that start during the period and end after it, and those that open and close within it.
    The period is always a rolling 6 months from sysdate.
    This is the calc we have come up with so far which works for some people but we get the invalid number error if the absence includes a half day - so 0.5, 1.5,etc.
    This is probably over complicated but we are not techie at all so are learning as we go!
    We are using the HRMS - Administration - Oracle Human Resources (Core) business area in 10G and the Absence Attendance and Person folders.
    SUM(TO_NUMBER(NVL(( CASE WHEN Absence Attendance.Actual Start Date < TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') THEN ( CASE WHEN Absence Attendance."Actual End Date" > SYSDATE THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),SYSDATE) ) ELSE ( CASE WHEN ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) END ) END ) END ) IS NULL THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),SYSDATE) ) ELSE ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) END ) END ) END ) END ) END ) ELSE ( CASE WHEN ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) END ) END ) END ) IS NULL THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),SYSDATE) ) ELSE ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( Absence Attendance.Duration Days ) END ) END ) END ) END ) END ),( DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") )),'999999990D00'))

    Hi,
    It could be that this is because you are using SYSDATE which contains the time as a fraction rather than TRUNC(SYSDATE) which just contains the current time. It could be that your working_dates_between raises this error.
    However, your formula is far more complicated than it needs to be.
    Firstly, you want to look at the date window ADD_MONTHS(TRUNC(SYSDATE), -6) to TRUNC(SYSDATE). Then you want to look at the portion of the absence that falls in the date window. This is GREATEST(Absence Attendance.Actual Start Date, ADD_MONTHS(TRUNC(SYSDATE), -6)) to LEAST(NVL(Absence Attendance."Actual End Date",TRUNC(SYSDATE)), TRUNC(SYSDATE)). You may need to add 1 to the absence end date because this is the last day of their absence rather than the date they return. It depends how you calculate the days between the start and end
    date of the absence. You can create calculations for the start and end date of the absences within the 6 months time window. Create calculation AbsenceStart as
    GREATEST(Absence Attendance.Actual Start Date, ADD_MONTHS(TRUNC(SYSDATE), -6))
    and AbsenceEnd as
    LEAST(NVL(Absence Attendance."Actual End Date",TRUNC(SYSDATE)), TRUNC(SYSDATE))
    Then you need to only pick up absence that a part of the absence in your 6 month date window. You can use a condition in the workbook or a condition in a case statement to do this. You then need to calculate the difference between these dates and SUM all the values.
    SUM(CASE WHEN AbsenceEnd >= AbsenceStart THEN WORKING_DAYS_BETWEEN(AbsenceStart, AbsenceEnd) END)
    That's it. Not so complicated after all.
    Rod West

  • Case When Statement and ORA:1722 Invalid number error

    Sorry I posted this in the wrong forum - I have the answer now
    Cheers
    HELP!!!
    We are trying to put together a calculation that returns the number of days absent an individual has had in a given time period. We need to cater for those absences that started before the period and are closed during it, absence that start during the period and end after it, and those that open and close within it.
    The period is always a rolling 6 months from sysdate.
    This is the calc we have come up with so far which works for some people but we get the invalid number error if the absence includes a half day - so 0.5, 1.5,etc.
    This is probably over complicated but we are not Techie at all so are learning as we go! We are using the HRMS - Administration - Oracle Human Resources (Core) business area in 10G and the Absence Attendance and Person folders.
    SUM(TO_NUMBER(NVL(( CASE WHEN Absence Attendance.Actual Start Date < TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') THEN ( CASE WHEN Absence Attendance."Actual End Date" > SYSDATE THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),SYSDATE) ) ELSE ( CASE WHEN ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) END ) END ) END ) IS NULL THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),SYSDATE) ) ELSE ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) END ) END ) END ) END ) END ) ELSE ( CASE WHEN ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) END ) END ) END ) IS NULL THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),SYSDATE) ) ELSE ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( Absence Attendance.Duration Days ) END ) END ) END ) END ) END ),( DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") )),'999999990D00'))
    Edited by: CPearce on Sep 25, 2008 8:03 AM

    Hi,
    It could be that this is because you are using SYSDATE which contains the time as a fraction rather than TRUNC(SYSDATE) which just contains the current time. It could be that your working_dates_between raises this error.
    However, your formula is far more complicated than it needs to be.
    Firstly, you want to look at the date window ADD_MONTHS(TRUNC(SYSDATE), -6) to TRUNC(SYSDATE). Then you want to look at the portion of the absence that falls in the date window. This is GREATEST(Absence Attendance.Actual Start Date, ADD_MONTHS(TRUNC(SYSDATE), -6)) to LEAST(NVL(Absence Attendance."Actual End Date",TRUNC(SYSDATE)), TRUNC(SYSDATE)). You may need to add 1 to the absence end date because this is the last day of their absence rather than the date they return. It depends how you calculate the days between the start and end
    date of the absence. You can create calculations for the start and end date of the absences within the 6 months time window. Create calculation AbsenceStart as
    GREATEST(Absence Attendance.Actual Start Date, ADD_MONTHS(TRUNC(SYSDATE), -6))
    and AbsenceEnd as
    LEAST(NVL(Absence Attendance."Actual End Date",TRUNC(SYSDATE)), TRUNC(SYSDATE))
    Then you need to only pick up absence that a part of the absence in your 6 month date window. You can use a condition in the workbook or a condition in a case statement to do this. You then need to calculate the difference between these dates and SUM all the values.
    SUM(CASE WHEN AbsenceEnd >= AbsenceStart THEN WORKING_DAYS_BETWEEN(AbsenceStart, AbsenceEnd) END)
    That's it. Not so complicated after all.
    Rod West

  • I have a new iPhone 5 and receive the following message when texting some people within my contacts.  Message sent using invalid number of digits please resend using 10 digit number or valid short code Msg:2114

    I have a new iPhone 5 and receive the following message when texting some people within my contacts.  Message sent using invalid number of digits please resend using 10 digit number or valid short code Msg:2114. Online I found a discussion that stated i needed to delete contact and re-add. I have done that to no avail. Any ideas?

    I had the same issue with the iPhone 6 and tried everything!  I now understand that at some point I stored a number for a contact without including the area code and sent a text message.  So, to correct the issue, you must literally "erase" all references to the contact, not just the number.  Deleting the contact and entering a new one is not enough because the iPhone stores references to that number in multiple places.  The steps below worked and are very simple:
    1) On the contact screen, delete everything stored for that number.  You can't just edit the contact to fix the problem, so write down or record the info somewhere before you complete this step.  Choose edit and then select DELETE to eliminate the entire contact which means home, work, cell, email address, etc.
    2) Delete the entire string of messages you sent to that number.  That's every single message...
    3) Now delete the entire string of invalid 2114 messages you received after your text(s) failed.
    4) Finaly, remove the contact from FAVORITES if you saved it that way. 
    5) To validate that all this worked, simply go to the keypad or contact screen and enter the number associated with the contact to verify successful removal.  I used the keypad and dialed to confirm.  If the contact number still shows up, you need to go back and recheck your steps.  Trust me, I had to do this a few times.
    Several posts suggested that you should  reset and turn off your phone.  After following these steps, it was not necessary for me to reset or turn off my device. 
    is there a much faster way to achieve the same results?  Probably, but this was safe for an iPhone novice and may help you avoid inadvertently deleting other contacts or replacing factory settings that you need.  

  • Subquery, TO_NUMBER and ORA-01722 invalid number

    I'm running into a invalid number error (ORA-01722) when I expect none.
    I have a table that stores a semester term as a VARCHAR2, all term codes are actually numbers like 200609. There is one exception which I filter out, using a subquery, to prevent the invalid number error.
    My query looks like this:
    SELECT NVL(SUM(s.balance))
    FROM (SELECT s1.term, s1.balance
    FROM student_account s1
    WHERE s1.student_id = :student_id
    AND s1.term <> 'SCRIPT') s
    WHERE TO_NUMBER(s.term) <= 200609;
    The query errors with ORA-01722.
    Now I've checked and rechecked that there isn't another bad term that is not a number.
    SELECT DISTINCT '[' || term || ']'
    FROM student_account
    WHERE student_id = :student_id;
    The error complains at line of the WHERE clause.
    I've ran just the subquery and changed the column list to select distinct term. All terms are numbers. I think that the outer WHERE clause for some reason still gets the 'SCRIPT' term. Though I've tried to verify this with no luck.
    I created a function that simply takes the term writes it to DBMS_OUTPUT and returns it as a VARCHAR2. The weird thing is then the query works. For example the outer WHERE clause becomes: WHERE TO_NUMBER(PRINT_TERM(s.term)) <= 200609
    I've also tried to move the TO_NUMBER to the subquery without any luck, same error.
    Anyone know what is going on?

    Oracle is allowed to push predicates into the subquery, so there is no guarantee that the problem row is filtered out before TO_NUMBER is called. You can get into some very interesting discussions about whether this is the right behavior from a relational theory and/or ANSI standard perspective, but you're probably stuck with the behavior (unless you want to get Oracle to rework their optimizer)
    One way to get around the problem would be to write a my_to_number function that catches the error and returns NULL if the to_number conversion fails, i.e.
    CREATE FUNCTION my_to_number( p_num IN VARCHAR2 )
      RETURN NUMBER
    IS
      l_num number;
    BEGIN
      l_num := to_number( p_num );
      RETURN l_num;
    EXCEPTION
      WHEN <<Exception whose name escapes me>> THEN
        RETURN NULL;
    END;And use that in your query.
    Justin
    Message was edited by:
    Justin Cave

  • TO_NUMBER and ORA-01722 invalid number pls delete

    I cannot see where to delete a post I made. I found out my problem. It was in my NLS settings. Decimals were set to be commas instead of periods.
    please disregard this post, and delete if you are a moderator
    I recently tried to bring in lat/long coordinates from a VARCHAR2 field (and even as a flat file) into a NUMBER field with a setup of NUMBER(20,13) to ensure I'd capture all of the signifigant digits.
    I even ran this through a procedure to check if the data is a number first, and update only. I've found however that I keep getting the ORA-01722 invalid number error.
    So I started testing out some points, and came across this:
    select to_number('-79.662965387') from dual;
    this query results in the invalid number error. I don't want to have to load these as an SDO GEOMETRY object, has anyone encountered this scenario before?
    Or is my choice of 13 decimal places too high for Oracle?

    I just ran that code in my database (10g) and it returned this
    select to_number('-79.662965387') from dual;
    TO_NUMBER('-79.662965387')
                    -79.662965
    1 row selected.Message was edited by:
    Tridith

  • To_number function and the "invalid number" error

    Dear all,
    I have searched the forum for threads relating to the ORA-01722: invalid number error, could not find the answer I am looking for.
    What I was trying to do was
    select * from table1 where to_number(field1) > 1000
    field1 is a varchar2 data type.
    I tried all sorts of things i.e using fmt, nls params as defined in the documentation, nothing worked.
    Though the practical problem was solved by
    select * from table1 where field1 > '1000'
    I would still like to know why this error occurs. Can someone help ?
    Regards
    Crusoe

    I think the database engine should simply return the rows that successfully convert to number and meet the where condition Oracle does not work in that way ;)
    Then try this...
    Just you need to add the below where clause to your source query. as this will retrieve only the number, to_number should work without any problem.
    But still you have to create a subquery to escape the invalid number error.
    PRAZY@11gR1> select * from tablea;
    FIELD1
    123
    123.345
    45
    AVC
    23.234.234
    ABC.234
    345.45
    7 rows selected.
    Elapsed: 00:00:00.00
    PRAZY@11gR1> select to_number(field1) from tablea where  rtrim(trim(regexp_replace(field1,'\.','',1,1)),'0123456789') is null;
    TO_NUMBER(FIELD1)
                  123
              123.345
                   45
               345.45
    4 rows selected.
    Elapsed: 00:00:00.01Regards,
    Prazy
    Edited by: Prazy on Mar 23, 2010 4:00 PM

  • I just updated my 3gs to the latest iOS 5 update and now I am unable to text certain numbers.  I keep getting the error code 1121611611 invalid number, even though the number I have in my contacts is a 10 digit number.  Any suggestions on fixing this?

    I just updated my 3gs to the latest iOS 5 update and now I am unable to text certain numbers.  I keep getting the error code 1121611611 invalid number, even though the number I have in my contacts is a 10 digit number.  Any suggestions on fixing this?

    PhotogYogi wrote:
    I Have the same issue on a brand new iPad mini 2. My battery is only lasting up to 5 hours. I went on chat with Apple last night and they said my battery is fine and its a Safari issue. I'm literally losing 1% every 3-4 minutes. I tried recalibrating my battery, signing out of iCloud, shutting off all locations, turning off background app refresh, restoring network settings, restoring all, and finally restoring from iTunes with no luck. This is just awful. I got this iPad so I could use it on my long flight for a trip I have coming up, and unfortunately, it's not going to last that long, plus I'm concerned about how many times i will be recharging my battery because of this since battery's do have a life cycle dependent on the number of charges. This is frustrating and needs to be fixed ASAP and addressed by Apple.
    By the way, Apple told me to bring my device to the Apple Store because it's still under warranty. That's great and all, but I'm going to waste my time if there is no fix for this issue.
    Ok so you want Apple to address the problem, but yet you don't want to take it to them just in case they can't fix it? What if they can fix it? Complaining here certainly won't fix it.

  • Using wwv_flow_load_excel_data and apex collections

    Hi!
    I have a question regarding very popular subject: parsing csv files.
    I made one application, which takes csv file, parses it using Vicas's code, presents validation report to the user, and finally allows to submit data into the datatable.
    Everything works fine, but I don't like this solution. CSV can cause problems when quotation mark is used inside, when numbers have 1000 separators and so on.
    Besides that, I have to add some code to validate column types. Lot of mess.
    The solution incorporated into apex tool, called "Data Load/Unload" looks much better. It would be nice to use that inside apex application adding some business validations, and hardcoding table and columns names.
    I have seen wwv_flow_load_excel_data package and I'm wondering if it is possible to use load_excel_data procedure to perform that task?
    Is there any documentation to that package?
    Somebody heard about using that with apex collections (to avoid a need of temporary table)?
    Regards,
    Arek

    And if somebody else is looking for "ApEx" forum:
    Oracle Application Express (APEX)

Maybe you are looking for

  • How to close a pop up window of used component ( usage defined )

    Hi Friends , I'm calling a window as a pop up of used component ( Usage defined ). I want to close that pop up using a button on the embedded view of that window. it would be great help If any one can help me in this. Regards, Laeeq

  • Movies wont sync to my 30 gb video ipod Someone PLz Help me

    I have had my 30 gig video ipod since they came out. everything is up to date(My ipod software and itunes software). Whenever i sync my ipod it says that the movies couldnt sync to it because they are not playable on it. I think my ipod is a fifth ge

  • HTML viewer component

    Hi, Does anyone know of a third party component that I can use in flash to view HTML pages? Thanks in advance.

  • Changes to track in cjr2 t-code

    cost Planning has been done in cjr2. some one has made changes in cjr2? hhow can i track, who has made the changes and wht changes he made? Regards SURYA

  • After Security Update 2009-002 no connection to server

    After running Security update 2009-002 I can not connect to a server, e.g. a webdisk with Apple+K command. Rebooting does not help, nor entering fresh login data. Does anybody have a clue? thanks in advance, Flip