2014-01-16 2 views
7

Я запускаю запрос на user_views. Столбец «ТЕКСТ» имеет тип данных LONG. Поэтому, когда я использую этот столбец в предложении where, я получаю ошибку, которая ожидается.ORA-00932: непоследовательные типы данных: ожидаемый NUMBER получил LONG

Error: ORA-00932: inconsistent datatypes: expected NUMBER got LONG

И запрос

SELECT view_name, text 
FROM user_views 
WHERE lower(text) LIKE '%company%' 

Как решить эту проблему?

+0

Возможный дубликат HTTP : //stackoverflow.com/questions/5543314/how-to-include-the-column-user-views-text-in-a-where-clause – Incognito

ответ

1

Пожалуйста, обратитесь на ссылку ниже:

ORA-00932

ОПИСАНИЕ

При возникновении ошибки ORA-00932, следующее сообщение об ошибке появится:

ORA-00932: inconsistent datatypes CAUSE

Вы пытались выполнить операцию между двумя различными типами данных, b ut типы данных несовместимы.

РЕЗОЛЮЦИЯ

Опция (s), чтобы устранить эту ошибку Oracle являются:

ВАРИАНТ # 1

Правильная работа, так что типы данных совместимы. Вы можете использовать функцию преобразования, такую ​​как: TO_DATE, TO_NUMBER или TO_CHAR. Полный список наших функций Oracle можно найти на нашей веб-странице функций Oracle.

Одним из примеров этой ошибки является попытка использования условия LIKE с использованием типа LONG.

Например, если вы создали следующую таблицу:

CREATE TABLE suppliers 
(supplier_id numeric(10) not null, 
    supplier_name long not null, 
    contact_name varchar2(50) 
); 

И тогда вы пытались использовать LIKE условие на колонке Имя поставщика, который, как это определено в качестве LONG типа данных:

SELECT * 
FROM suppliers 
WHERE supplier_name LIKE 'IBM%'; 

К сожалению, вы не можете использовать условие LIKE для типа данных LONG.

Чтобы исправить эту ошибку, вы можете выполнить одно из следующих действий:

  • Не использовать LIKE условие в вашем SQL (против LONG поля типа данных).
  • Рассмотрите возможность изменения таблицы таким образом, чтобы поле поставщика_name представляло собой поле VARCHAR2 или CHAR.
  • Попробуйте написать пользовательскую функцию PLSQL для преобразования LONG в VARCHAR2.

ВАРИАНТ # 2

Эта ошибка может также возникнуть при попытке использовать функцию Oracle на LONG типа данных.

Например, если вы создали следующую таблицу:

CREATE TABLE suppliers 
(supplier_id numeric(10) not null, 
    supplier_name long not null, 
    contact_name varchar2(50) 
); 

И тогда вы пытались использовать функцию TO_CHAR на колонке Имя поставщика, который, как это определено в качестве LONG типа данных:

SELECT upper(supplier_name) 
FROM suppliers; 

Вы получили бы сообщение об ошибке:

К сожалению, вы не можете использовать функции Oracle для типа данных LONG.

Чтобы исправить эту ошибку, вы можете выполнить одно из следующих действий:

  • Не использовать функции Oracle в вашем SQL (против LONG поля типа данных).
  • Рассмотрите возможность изменения таблицы таким образом, чтобы поле поставщика_name представляло собой поле VARCHAR2 или CHAR.
  • Попробуйте написать пользовательскую функцию PLSQL для преобразования LONG в VARCHAR2.
+1

Хотя эта ссылка может ответить на вопрос, лучше включить части ответа здесь и укажите ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – LittleBobbyTables

+0

@LittleBobbyTables, я обновил ответ ... я надеюсь, что все в порядке. –

2

Создайте таблицу из пользовательских просмотров и запросите свое требование из недавно созданной новой таблицы.

create table my_tab as 
select view_name myview,to_lob(text) mytext from user_views; 

затем

select * from my_tab 
where mytext like '%company%'; 

Спасибо.

2

Поскольку TO_CLOB (LONG) преобразователь/конструктор необходим физический указатель для хранения (потенциально 4 Гб ...),

Это должно работать для вас (проверено на 11gR2):

CREATE TABLE DBO.MY_ALL_VIEWS AS 
SELECT DV.owner, DV.view_name, TO_LOB(DV.text) AS text 
FROM ALL_VIEWS DV; 

SELECT count(*) 
FROM DBO.MY_ALL_VIEWS 
WHERE REGEXP_LIKE(TEXT,'(company)+','i'); 
Смежные вопросы

 Смежные вопросы