Solved

what're Oracle equivalent of DB2 sysibm.sysindexes,sysibm.sysrels

Posted on 2004-09-10
8
1,618 Views
Last Modified: 2008-01-09
Hi,
I have the following two queries from db2 system tables to return primary key and a list of children tables of a given table

Could anybody help to convert them to Oracle equivalent

1. SELECT colnames
                FROM sysibm.sysindexes
                  WHERE tbName = 'mytableName' AND
                  uniquerule = 'P' AND colcount = 1

2.
SELECT tbname, fkcolnames
                  FROM sysibm.sysrels
                  WHERE reftbname = 'myTableName'
                  ORDER BY timestamp

Thanks.
0
Comment
Question by:oldyyy
8 Comments
 
LVL 23

Assisted Solution

by:seazodiac
seazodiac earned 150 total points
ID: 12029953
sure. try this:

1.

SELECT column_name
FROM all_ind_columns
WHERE table_name= '<table name in CAPS>'
AND column_position=1;


0
 
LVL 23

Expert Comment

by:seazodiac
ID: 12029993
2.

select table_name, column_name
from all_cons_columns A, all_constraints B
where A.constraint_name=B.constraint_name
and B.constraint_type='R'
and  table_name='<table_name in CAPS>'
0
 
LVL 3

Assisted Solution

by:dnarramore
dnarramore earned 150 total points
ID: 12030090
1.

select all_ind_columns.column_name
from all_indexes,
     all_ind_columns
where all_indexes.index_name = all_ind_columns.index_name
and  all_indexes.table_owner = all_ind_columns.table_owner
and uniqueness = 'UNIQUE'
and all_indexes.table_name = 'MyTableName'
and all_indexes.index_name || all_indexes.table_owner in (select index_name || table_owner
                   from all_ind_columns
                           group by index_name, table_owner
                           having count(*) > 1)
0
 

Author Comment

by:oldyyy
ID: 12030776
Thanks seazodiac and dharramore.

seazodiac's1 give me a list of 6 rows on oracle, where the db2 one only returned one row--> the first row.
Seazodiac's 1 is equivalent to the following db2  
SELECT colnames
                FROM sysibm.sysindexes
                  WHERE tbName = 'mytableName'
 

( without uniquerule = 'P' AND colcount = 1)


seazodiac's 2 give me 0 rows, where the db2 one returned 4 rows on db2 database.

dnarramore's 1 gives me 0 rows

Could anyone help again?
Thanks
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 23

Expert Comment

by:seazodiac
ID: 12032095
oldyyy:

Here is the explanation for my first query to return 6 rows in oracle but the similar query return only 1 rows.

that's because when you have "colcount=1" and "uniquerule='P'" in the where clause, you are limited the ONLY PRIMARY KEY column in the MytableName , and conceivably, you have only one PRimary key in one table.

the similar query in Oracle will return all the Indexed columns including PRIMARY key (because Oracle db will create a unique index on PK by default).

0
 
LVL 23

Expert Comment

by:seazodiac
ID: 12032139
just to add, still on the first question, colcount in IBM sysindexes table means the number of columns in the index.

so your original query is trying to get the single-column Primary key from sysindexes table.

there is really no need to try to find the matching query, as long as you are getting comfortable with Metadata in each database, you will get what you want.
0
 
LVL 13

Accepted Solution

by:
riazpk earned 200 total points
ID: 12034073
1.
SELECT column_name
FROM all_ind_columns a
WHERE table_name= '<table name in CAPS>'
AND column_position=1
and
exists (select null from all_indexes b where a.index_name=b.index_name and UNIQUENESS='UNIQUE')

OR

select column_name
FROM all_ind_columns a, all_indexes b
WHERE table_name= '<table name in CAPS>'
and a.index_name=b.index_name
and UNIQUENESS='UNIQUE'
AND column_position=1
0
 
LVL 13

Expert Comment

by:riazpk
ID: 12034087
(2)

select column_name,position
from all_cons_columns a, all_constraints b
where b.table_name='TABLEName'
and a.constraint_name=b.constraint_name
and constraint_type='R'
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Working with Network Access Control Lists in Oracle 11g (part 1) Part 2: http://www.e-e.com/A_9074.html So, you upgraded to a shiny new 11g database and all of a sudden every program that used UTL_MAIL, UTL_SMTP, UTL_TCP, UTL_HTTP or any oth…
This post first appeared at Oracleinaction  (http://oracleinaction.com/undo-and-redo-in-oracle/)by Anju Garg (Myself). I  will demonstrate that undo for DML’s is stored both in undo tablespace and online redo logs. Then, we will analyze the reaso…
Video by: Steve
Using examples as well as descriptions, step through each of the common simple join types, explaining differences in syntax, differences in expected outputs and showing how the queries run along with the actual outputs based upon a simple set of dem…
Via a live example, show how to take different types of Oracle backups using RMAN.

930 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now