I'm trying to run the following query to find views containing a given keyword:
select *
from ALL_VIEWS
where OWNER = 'SALESDBA'
and TEXT like '%rownum%';
I'm getting the following error message:
ORA-00932: inconsistent datatypes: expected CHAR got LONG
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action:
Error at Line: 4 Column: 13
if I just select from ALL_VIEWS than I see the query (TEXT) in the TEXT field.
What am I doing wrong here?
You could use TEXT_VC as the column to check criteria against. For example:
select *
from ALL_VIEWS
where OWNER = 'SALESDBA'
and TEXT_VC like '%rownum%';
I hope this helps.
Your problem is that TEXT is of type LONG - although Oracle deprecated this type a long, long time ago, they're still using it in their own views :-(
To convert a LONG to a (searchable) CLOB, you can use the TO_LOB()
function (see Oracle documentation for TO_LOB().
Unfortunately, this doesn't work for simple SELECT
statements. You'll have to create an intermediary table:
create table search_all_views as
select av.owner, av.view_name, to_lob(text) as text_clob
from ALL_VIEWS av;
Then, you can search using that table:
select *
from search_all_views
where text_clob like '%rownum%';
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With