Neat!
From my findings, though… This is what I noticed:
The original code:
table_cols = %Q{
select column_name, data_type, data_default,
nullable,
decode(data_type, ‘NUMBER’, data_precision,
‘VARCHAR2’, data_length,
null) as length,
decode(data_type, ‘NUMBER’, data_scale, null)
as scale
from #{scope}_catalog cat, #{scope}_synonyms syn,
all_tab_columns col
where cat.table_name = #{table}
and syn.synonym_name (+)= cat.table_name
and col.table_name = nvl(syn.table_name,
cat.table_name)
and col.owner = nvl(syn.table_owner, #{(scope ==
“all” ? “cat.owner” : “user”)}) }
My version
table_cols = %Q{
select column_name, data_type, data_default,
nullable,
decode(data_type, ‘NUMBER’, data_precision,
‘VARCHAR2’, data_length,
null) as length,
decode(data_type, ‘NUMBER’, data_scale, null)
as scale
from #{scope}_catalog cat, #{scope}_synonyms syn,
all_tab_columns col
where col.table_name = #{table}
and syn.synonym_name (+)= cat.table_name
and col.table_name = nvl(syn.table_name,
cat.table_name)
and col.owner = nvl(syn.table_owner, #{(scope ==
“all” ? “cat.owner” : “user”)}) }
Runs no problem.
I just changed
where cat.table_name = #{table}
To
where col.table_name = #{table}
Since the ALL_TAB_COLUMNS has the table name, this works great… And
this fix makes it just fly!