Skip to main content

Identify Missing PrimaryKeys in tables

-- DEFINE &TableOwnerPattern = &1
-- DEFINE &TableNamePattern = &2

-- COLUMN owner            FORMAT A25  HEADING 'Owner'
-- COLUMN table_name       FORMAT A30  HEADING 'Table'
-- COLUMN constraint_name  FORMAT A30  HEADING 'FK constraint'
-- COLUMN column_list      FORMAT A62  HEADING 'FK columns(s)'   WORD WRAP

WITH constr AS 
(
SELECT c.owner, 
       c.table_name, 
       c.constraint_name, 
       listagg(col.column_name, ', ') within group (ORDER BY col.column_name) column_list_alphabetic,
       listagg(col.column_name, ', ') within group (ORDER BY col.position)    column_list
  FROM dba_constraints c
  JOIN dba_cons_columns col ON ( col.owner = c.owner AND col.constraint_name = c.constraint_name AND col.table_name = c.table_name )
 WHERE c.constraint_type = 'R'
   AND c.owner           like '&TableOwnerPattern'
   AND c.table_name      like '&TableNamePattern' 
 GROUP BY c.owner, c.table_name, c.constraint_name
),
idx AS
(
SELECT table_owner, table_name, 
       listagg(column_name, ', ') within group (ORDER BY column_name)     column_list_alphabetic,
       listagg(column_name, ', ') within group (ORDER BY column_position) column_list
  FROM dba_ind_columns
 WHERE table_owner     like '&TableOwnerPattern'
   AND table_name      like '&TableNamePattern' 
 GROUP BY table_owner, table_name, index_owner, index_name
)
SELECT constr.owner, constr.table_name, constr.constraint_name, constr.column_list
  FROM constr
 WHERE NOT EXISTS ( SELECT 1 FROM idx WHERE constr.owner = idx.table_owner AND constr.table_name = idx.table_name 
                                        AND ( idx.column_list_alphabetic = constr.column_list_alphabetic 
                                              OR instr(idx.column_list,constr.column_list) = 1 )
                  );

Comments

Popular posts from this blog

Behavior Driven Development

Behavior Driven Development (BDD) is a development process that originally associated with Test-Driven Development (TDD).  BDD is written in a readable format in an understandable language for anyone involved in software development.  BDD Features Providing better readability and visibility.  Verifying the software against customer requirements.  Assure the implementation of the system is correct. Derives examples of different expected behaviors of the system. Uses examples as acceptance tests. Focus on customer requirements throughout the development. BDD Practice There are two practices in BDD:-  Specification by Example (SbE). Test-Driven Development (TDD). Specification by example (SbE) uses examples in conversation to illustrate the business rules and the behavior of the software.  This uses to have a better understanding for Business Analyst, Product Owners, Testers and the Developers to reduce the misunderstanding abou...