همانطور که می دانید، تعدادی از فیلدهای مربوط به ویوهای data dictionary، هنوز(در اوراکل 18c) از نوع long می باشند. برای مثال، فیلد text در ویوی USER_VIEWS از این دسته می باشد:
SQL> desc USER_VIEWS
Name Type Comments
———— ————– ———————————-
VIEW_NAME VARCHAR2(128) Name of the view
TEXT_LENGTH NUMBER Length of the view text
TEXT LONG View text
در صورتی که قصد جستجوی عبارتی را در این فیلد داشته باشیم، با خطا مواجه خواهیم شد:
SQL> select * from user_views where text like ‘%SELECT%’;
ORA-00932: inconsistent datatypes: expected CHAR got LONG
در همین زمینه، در اوراکل 12c، ستونهایی به بعضی از ویوهای data dictionary اضافه شدند که نام انها فرمت VC_* دارد و داده های از نوع long را به صورت varchar2 نمایش می دهند. لیست این ستونها با دستور زیر قابل مشاهده می باشد:
SQL> select table_name, column_name from dba_tab_cols where column_name like ‘%_VC’ escape ‘’ order by 1;
این ستونها از نوع varchar2 می باشند. این اتفاق برای ویوی user_views هم رخ داده است:
SQL> desc USER_VIEWS
Name Type Comments
———————- ————– —————————————–
VIEW_NAME VARCHAR2(128) Name of the view
TEXT_LENGTH NUMBER Length of the view text
TEXT LONG View text
TEXT_VC VARCHAR2(4000) Possibly truncated view text as VARCHAR2
همانطور که می بینید، در ویوی user_views، برای فیلد TEXT که از نوع long می باشد، فیلد دیگری هم از نوع varchar2 اضافه شده است که می توان به راحتی در ان جستجو را انجام داد:
SQL> select count(*) from user_views where text_vc like ‘%SELECT%’;
150