lá vai...
o código a seguir mostra as colunas da tabela...
Selecionar tudo
SELECT column_name, data_type, data_length, data_precision, data_scale, nullable
FROM user_tab_columns
WHERE table_name = upper(prm_nome_tabela)
ORDER BY column_id
o código a seguir mostras as pk da tabela...
Selecionar tudo
select u.table_name
,u.constraint_name
,u.column_name
from user_constraints q
,user_cons_columns u
where q.table_name like upper(prm_nome_tabela)
and q.constraint_type = 'P'
and u.table_name = q.table_name
and u.constraint_name = q.constraint_name
então fim um único select, mas só mostra as pk...
Selecionar tudo
SELECT c.column_name,
c.data_type,
c.data_length,
c.data_precision,
c.data_scale,
c.nullable,
decode(u.column_name,NULL,NULL,'PK') PK
FROM user_tab_columns c,
user_constraints q,
user_cons_columns u
WHERE c.table_name = upper(prm_nome_tabela)
AND c.table_name = q.table_name
AND c.column_name = u.column_name
AND q.constraint_type = 'P'
AND q.table_name = u.table_name
AND q.constraint_name = u.constraint_name
ORDER BY c.column_id
Selecionar tudo
COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_PRECISION DATA_SCALE NULLABLE PK
------------------------- ----------- ----------- -------------- ---------- -------- --
CD_TIPO_PESSOA_EMPRESA NUMBER 22 3 0 N PK
CD_PESSOA_EMPRESA NUMBER 22 7 0 N PK
CD_TIPO_PESSOA_FILIAL NUMBER 22 3 0 N PK
CD_PESSOA_FILIAL NUMBER 22 7 0 N PK
CD_NOTA_FISCAL NUMBER 22 7 0 N PK
e deveria ser algo mais ou menos assim... na última coluna mostrando se o campo é pk ou não...
Selecionar tudo
COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_PRECISION DATA_SCALE NULLABLE PK
------------------------- ----------- ----------- -------------- ---------- -------- --
CD_TIPO_PESSOA_EMPRESA NUMBER 22 3 0 N PK
CD_PESSOA_EMPRESA NUMBER 22 7 0 N PK
CD_TIPO_PESSOA_FILIAL NUMBER 22 3 0 N PK
CD_PESSOA_FILIAL NUMBER 22 7 0 N PK
CD_NOTA_FISCAL NUMBER 22 7 0 N PK
CD_SERIE_NOTA_FISCAL VARCHAR2 3 N
NR_NOTA_FISCAL NUMBER 22 7 0 N
NR_PIM_NOTA_FISCAL NUMBER 22 6 0 N
ID_TIPO_NOTA_FISCAL VARCHAR2 2 N
CD_OPERACAO_FISCAL_MAT NUMBER 22 4 0 Y
CD_OPERACAO_FISCAL_SRV NUMBER 22 4 0 Y
CD_TIPO_DOCUMENTO NUMBER 22 3 0 N
CD_FORMA_PAGAMENTO NUMBER 22 3 0 Y
DT_EMISSAO DATE 7 N
DT_SAIDA DATE 7 Y
HR_SAIDA DATE 7 Y
...
...
...
...
mas como disse nesse último select, só está retornado as pk´s...