|
дублирующие значения в БД
|
|||
---|---|---|---|
#18+
Здравствуйте Задача такая: необходимо добавить строку в таблицу при этом предварительно проверив что такой строки еще нет Реализовываю проверку на дублирующие строки при помощи validation: type - function return error text проверка следующая: Declare ret varchar2(4000); BEGIN select * into ret from ( SELECT "SA"."CATALOGUE_LEVEL_2"."PLATFORM_SC" FROM "SA"."CATALOGUE_LEVEL_2" WHERE ( ( "SA"."CATALOGUE_LEVEL_2"."PLATFORM_SC" = :P4_PLATFORM_SC ) AND ( "SA"."CATALOGUE_LEVEL_2"."ID_LEVEL_1" = :P4_STR_SERVICE_SC ) ) union select 'пустое' from dual ) where ROWNUM=1; if ret= 'пустое' then return 'На этом уровне уже есть такое значение'; else return null; end if; END; Потом доваляю значения через процесс PL/SQL. Проблема в том что этот запрос (выделенный жирным красным) работает с логической ошибкой и я не могу понять какой, может кто нибудь подскажет как его поправить или как сделать решение более простым и правильным? заранее благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2010, 13:28 |
|
дублирующие значения в БД
|
|||
---|---|---|---|
#18+
VisMaster, ваш запрос всегда возвращает как минимум одну строку, причём: когда данных не находится, возвращается 'пустое', в противном случае все зависит, скорее всего, от сортировки. Одно из решений для validation: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2010, 14:02 |
|
дублирующие значения в БД
|
|||
---|---|---|---|
#18+
Спасибо за подробный и быстрый ответ, очень помогло ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2010, 14:38 |
|
дублирующие значения в БД
|
|||
---|---|---|---|
#18+
А почему не работает такой вариант того же запроса: Declare ret varchar2(4000); BEGIN if (:P5_VERSION is NULL) then SELECT .. into ret FROM ... WHERE (...mytable.myversion is NULL and and rownum < 2); return 'Такое требование или различие уже есть на данном уровне'; else SELECT ... into ret FROM ... WHERE (...mytable.myversion=:P5_VERSION AND rownum < 2); return 'Такое требование или различие уже есть на данном уровне'; end if; exception when no_data_found then return null; END; Ошибок не выдает но на exception не вылетает ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2010, 17:36 |
|
дублирующие значения в БД
|
|||
---|---|---|---|
#18+
VisMasterА почему не работает такой вариант того же запроса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Ошибок не выдает но на exception не вылетает Вы уверены, что "ошибок не выдаёт"? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2010, 19:53 |
|
дублирующие значения в БД
|
|||
---|---|---|---|
#18+
Да ошибок не выдает точно. Второй "AND" появился когда я писал сообщение Реальный запрос выглядит так: Declare ret varchar2(4000); BEGIN if (:P5_VERSION is NULL) then SELECT "SA"."CATALOGUE_LEVEL_3_HW"."REQUIREMENT_CHARACTER" into ret FROM "SA"."CATALOGUE_LEVEL_3_HW" WHERE ("SA"."CATALOGUE_LEVEL_3_HW"."ID_LEVEL_2" = :P5_PLATFORM AND "SA"."CATALOGUE_LEVEL_3_HW"."ID_LEVEL_2_VERSION" IS NULL AND "SA"."CATALOGUE_LEVEL_3_HW"."ID_REQUIREMENT" = :P5_REQ_OR_DIFF and rownum < 2); return 'Такое требование или различие уже есть на данном уровне'; else SELECT "SA"."CATALOGUE_LEVEL_3_HW"."REQUIREMENT_CHARACTER" into ret FROM "SA"."CATALOGUE_LEVEL_3_HW" WHERE ("SA"."CATALOGUE_LEVEL_3_HW"."ID_LEVEL_2" = :P5_PLATFORM AND "SA"."CATALOGUE_LEVEL_3_HW"."ID_LEVEL_2_VERSION" = :P5_VERSION AND "SA"."CATALOGUE_LEVEL_3_HW"."ID_REQUIREMENT" = :P5_REQ_OR_DIFF and rownum < 2); return 'Такое требование или различие уже есть на данном уровне'; end if; exception when no_data_found then return null; END; Но он не ищет дублирующиеся значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2010, 09:20 |
|
дублирующие значения в БД
|
|||
---|---|---|---|
#18+
Что возвращают ваши запросы, выполненные в SQL builder ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2010, 09:43 |
|
|
start [/forum/topic.php?fid=50&msg=36432819&tid=1877121]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 152ms |
0 / 0 |