Skip to Main Content

SQL Developer

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Searching for column does not bring it when it belongs to a View

nelsonjfrJan 27 2017 — edited Jan 30 2017

Version 4.2.0.16.356

So I have a column named: edi_ref_id

If I do a search using Find Database Objects. Everything is checked: All Objects Types, Al Identifiers Types, etc.

Type the name, choose the connection and hit go.

It brings results from tables and code. But not from the sql of the Views.

I mean:

     create or replace view myview as ( select edi_ref_id from arsedi);

   

Will show edi_ref_id in the results.

However:

     create or replace view myview2 as ( select nvl(edi_ref_id,'810') ref_id from arsedi);

Will not show in the results.

I think it should show it.

Comments

John Stegeman

Do you have the ability to change the table? Varchar2 is not an appropriate datatype for a duration (which is what I assume you mean by "hours")

Frank Kulash

Hi,

You can't add VARCHAR2s.  You can add NUMBERs, so convert the VARCHAR2s to NUMBERs, add those numbers, and then, if necessary, convert back to VARCHAR2s.

If you'd care to post CREATE TABLE and INSERT statements for your sample data, then I could show you exactly.

As John said, it might make more sense for you to permanently store these times as NUMBERs, or as INTERVAL DAY TO SECONDs.

odie_63
Answer

As others have said, use NUMBER to store durations, or the proper INTERVAL datatype, though the latter cannot be aggregated (using SUM).

In the meantime, this will give you the required output in minutes (it's trivial to convert it back to HH:MM format if you like) :

SQL> with sample_data (id, hours1, hours2, hours3) as (

  2    select 1, '02:45', '00:18', '01:25' from dual union all

  3    select 2, '00:38', '01:45', '00:00' from dual union all

  4    select 3, '02:15', '02:00', '00:15' from dual

  5  )

  6  select id

  7       , sum(h1) h1

  8       , sum(h2) h2

  9       , sum(h3) h3

10       , sum(h1+h2+h3) as total

11  from (

12  select id

13       , to_number(substr(hours1, 1, 2))*60 + to_number(substr(hours1, 4, 2)) as h1

14       , to_number(substr(hours2, 1, 2))*60 + to_number(substr(hours2, 4, 2)) as h2

15       , to_number(substr(hours3, 1, 2))*60 + to_number(substr(hours3, 4, 2)) as h3

16  from sample_data

17  )

18  group by rollup(id) ;

        ID         H1         H2         H3      TOTAL

---------- ---------- ---------- ---------- ----------

         1        165         18         85        268

         2         38        105          0        143

         3        135        120         15        270

                  338        243        100        681

Marked as Answer by Kam__apex · Sep 27 2020
00125

Hi,

            I think this may help u.

SELECT to_char ( to_date (to_number(substr(hours1, 1, instr(hours1, ':', 1) - 1)) * 60 +

        to_number(substr(hours1,

                         instr(hours1, ':', 1) + 1,

                         length(hours1)))

+

to_number(substr(hours2, 1, instr(hours2, ':', 1) - 1)) * 60 +

        to_number(substr(hours2,

                         instr(hours2, ':', 1) + 1,

                         length(hours2)))

+

to_number(substr(hours3, 1, instr(hours3, ':', 1) - 1)) * 60 +

        to_number(substr(hours3,

                         instr(hours3, ':', 1) + 1,

                         length(hours3))) total, 'HH24MI'), 'HH:MI')

  FROM dual;

Thanks

RogerT

as the others said....change your data model, it would be much easier, than doing something like this:

with data (hours1, hours2, hours3) as (select '02:45','00:18','01:25' from dual

                                       union all

                                       select '00:38','01:45','00:00' from dual

                                       union all

                                       select '02:15','02:00','00:15' from dual)

    ,minutes as (select regexp_replace(hours1,'^(\d+):\d+$','\1') * 60 + regexp_replace(hours1,'^\d+:(\d+)$','\1') as minutes1

                       ,regexp_replace(hours2,'^(\d+):\d+$','\1') * 60 + regexp_replace(hours2,'^\d+:(\d+)$','\1') as minutes2

                       ,regexp_replace(hours3,'^(\d+):\d+$','\1') * 60 + regexp_replace(hours3,'^\d+:(\d+)$','\1') as minutes3                      

                   from data)

select minutes1 + minutes2 + minutes3

      ,TO_CHAR(floor((minutes1 + minutes2 + minutes3) / 60 ),'FM99900') || ':' ||

       to_char(mod((minutes1 + minutes2 + minutes3),60 ),'FM00') as hours

  from minutes

/

hth

Kam__apex

Thanks Odie. Solved. Very specific and easy. once again thanks.

1 - 6
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Feb 27 2017
Added on Jan 27 2017
8 comments
356 views