|
|
|
|
|
|
|
|
|
Re: display columns names from all_tab_columns with primary key on top rows [message #429712 is a reply to message #429711] |
Thu, 05 November 2009 05:58   |
mohan1760
Messages: 59 Registered: June 2008
|
Member |
|
|
SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
FROM all_constraints cons, all_cons_columns cols
WHERE cols.table_name = 'T_TONNAGE_WEIGHT_BREAK'
AND cons.constraint_type = 'P'
AND cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner
ORDER BY cols.table_name, cols.position;
but it gives only primary columns how do i join those to get a ll columns
|
|
|
|
Re: display columns names from all_tab_columns with primary key on top rows [message #429714 is a reply to message #429709] |
Thu, 05 November 2009 06:04   |
 |
Michel Cadot
Messages: 68761 Registered: March 2007 Location: Saint-Maur, France, https...
|
Senior Member Account Moderator |
|
|
select decode(nullable,'Y','Optional','Mandatory'), a.COLUMN_NAME
from all_tab_columns a, all_constraints b, all_cons_columns c
where a.TABLE_NAME = 'T_TONNAGE_WEIGHT_BREAK'
and a.owner = user
and c.owner (+) = a.owner
and c.table_name (+) = a.table_name
and c.column_name (+) = a.column_name
and b.owner (+) = c.owner
and b.table_name (+) = c.table_name
and b.constraint_type (+) = 'P'
order by decode(c.table_name,null,1,0),
nvl(c.position,a.column_id)
/
Regards
Michel
|
|
|
|
|
Re: display columns names from all_tab_columns with primary key on top rows [message #429718 is a reply to message #429716] |
Thu, 05 November 2009 06:29   |
 |
ramoradba
Messages: 2457 Registered: January 2009 Location: AndhraPradesh,Hyderabad,I...
|
Senior Member |
|
|
Quote:primary columns repeating
Did you try the code given By Michel ?
SQL> create table emp_sriram as select * from emp;
Table created.
SQL> alter table emp_sriram add constraint pk_empno primary key(sal,empno);
Table altered.
SQL> ed
Wrote file afiedt.buf
1 select a.table_name||','||b.column_name||','||a.constraint_name||','||a.constraint_type||','||a.r_constraint_name||','||count(*)
2 from user_constraints a,user_cons_columns b
3 where a.OWNER=b.owner
4 and a.CONSTRAINT_NAME=b.CONSTRAINT_NAME
5 and a.table_name=b.table_name
6 and a.table_name in('EMP_SRIRAM')
7 and a.constraint_type in('P','R')
8 and a.table_name not like 'BIN%'
9 group by a.table_name,b.column_name,a.constraint_name,a.constraint_type,a.r_constraint_name
10* order by a.table_name,a.constraint_type,a.r_constraint_name
11 /
A.TABLE_NAME||','||B.COLUMN_NAME||','||A.CONSTRAINT_NAME||','||A.CONSTRAINT_TYPE
--------------------------------------------------------------------------------
EMP_SRIRAM,EMPNO,PK_EMPNO,P,,1
EMP_SRIRAM,SAL,PK_EMPNO,P,,1
SQL> ed
Wrote file afiedt.buf
1 select decode(nullable,'Y','Optional','Mandatory'), a.COLUMN_NAME
2 from all_tab_columns a, all_constraints b, all_cons_columns c
3 where a.TABLE_NAME = 'EMP_SRIRAM'
4 and a.owner = 'SCOTT'
5 and c.owner (+) = a.owner
6 and c.table_name (+) = a.table_name
7 and c.column_name (+) = a.column_name
8 and b.owner (+) = c.owner
9 and b.table_name (+) = c.table_name
10 and b.constraint_type (+) = 'P'
11 order by decode(c.table_name,null,1,0),
12* nvl(c.position,a.column_id)
SQL> /
DECODE(NU COLUMN_NAME
--------- ------------------------------
Mandatory SAL
Mandatory EMPNO
Optional ENAME
Optional JOB
Optional MGR
Optional HIREDATE
Optional COMM
Optional DEPTNO
8 rows selected.
SQL> desc emp_sriram
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NOT NULL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL>
[Updated on: Thu, 05 November 2009 06:31] Report message to a moderator
|
|
|
Re: display columns names from all_tab_columns with primary key on top rows [message #429719 is a reply to message #429698] |
Thu, 05 November 2009 07:01  |
 |
Alessandro Rossi
Messages: 166 Registered: September 2008 Location: Rome
|
Senior Member |
|
|
You may try this one
Very slow
select *
from all_tab_columns tc
left outer join (
all_cons_columns cc
join all_constraints c on (
c.owner=cc.owner
and c.constraint_name = cc.constraint_name
and c.constraint_type='P'
)
)on (
tc.owner = cc.owner
and tc.table_name = cc.table_name
and tc.column_name = cc.column_name
)
order by tc.table_name,cc.position nulls last,tc.column_id
or this faster one
with cons_columns as (
-------
-- Optimized redefinition of DBA_cons_columns in order to avoid
-- additional redudant joins
-------
select /*+inline*/u.name as owner, -- owner
c.name as constraint_name, -- constraint_name
decode(cd.type#,2,'PRIMARY KEY',3,'UNIQUE',4,'FOREIGN KEY')
as constraint_type, -- constraint_type
o.name as table_name, -- table_name
col.name as column_name, -- column_name
cc.pos# as position -- ordinal position
from sys.con$ c
join sys.user$ u on (c.owner# = u.user#)
join sys.cdef$ cd on (c.con# = cd.con# and cd.type# != 12 /* don't include log groups */)
join sys.ccol$ cc on (cd.con# = cc.con#)
join sys.col$ col on (cc.obj# = col.obj# and cc.intcol# = col.intcol#)
join sys.obj$ o on (cc.obj# = o.obj#)
)
select *
from dba_tab_columns tc
left outer join cons_columns cc on (
tc.owner = cc.owner
and tc.table_name = cc.table_name
and tc.column_name = cc.column_name
)
where cc.constraint_type = 'PRIMARY KEY'
order by tc.table_name,cc.position nulls last,tc.column_id
Bye Alessandro
[Updated on: Thu, 05 November 2009 07:12] Report message to a moderator
|
|
|