2012-01-20 1 views
0

Мне нужно создать хранимую процедуру, которая обрабатывает таблицу, ищущую соответствие строк по определенному идентификатору с разными статусами.
Я знаю синтаксис, чтобы получить данные о строках, но я никогда не пробовал сравнивать 2 строки из той же таблицы раньше? Как это делается? Нужно ли мне использовать переменные для хранения данных от каждого? Или каким-то другим способом?Как сравнить 2 строки из одной таблицы (Oracle 11g)

Этот вопрос является на основе этого one, но на Oracle с некоторыми изменениями:

Сначала одна эта таблица может иметь или не иметь многие ко многим, многие к одному, один ко многим отношений с другими таблицами.

Edit 1:

Таблица выглядит следующим образом:
create table Test(
id char32 not null,
column1 varchar2(2048),
column2 varchar2(2048),
...
column30 varchar2(2048) )

Любое различие в любом столбце приведет их отличаться от других. Сохраненная процедура возвращает только истину или ложь, если они идентичны или нет.

+1

@ Fioradu88 - Что ваша таблица выглядит? Каков результат, который вы пытаетесь получить? Вам просто нужен список значений «ID», которые несколько раз появляются в таблице с разными статусами? Вы также хотите получить статусы? Вы хотите получить другие столбцы? Как бы выглядел результирующий набор, если определенный 'ID' существовал с 5 различными статусами или 10 различными статусами? –

+1

Итак, вы хотите сохранить хранимую функцию, которая принимает идентификатор и возвращает TRUE, если в таблице есть две или несколько строк с одинаковым идентификатором, которые не идентичны и FALSE в противном случае? –

+0

Да, это то, чего я хочу. –

ответ

2

следующая форма выбора испытает для дубликатов:

select id , 
column1 , 
column2 , 
... 
column30 , 
count(*) 
from test 
group by id , 
column1 , 
column2 , 
... 
column30 
having count(*) > 1 
; 

Вы также можете самостоятельно присоединиться к тестовой таблицы для себя или использования МИНУС