| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Oracle > количество строк |
| Автор: Petro123 20.8.2007, 13:19 |
| Как в Pl/Sql узнать количество строк возвращаемых некоторым запросом |
| Автор: Petro123 20.8.2007, 15:17 |
| В общем при удалении строки из главной таблицы, нужно проверить есть ли записи в подчиненной, если нет то удалить, там OnDeleteCascade стоит |
| Автор: DimW 20.8.2007, 15:40 | ||
при таком подходе придется блокировать всю дочернюю таблицу, что бы ограничить других пользователей от изменений данных, т.к. между проверкой дочерней таблицы и удалением строк в родительской может пройти транзакция от другова пользователя... саветую убрать OnDeleteCascade, имхо от нее только вред |
| Автор: Petro123 21.8.2007, 18:26 |
| почемуто OPEN PROV; I:= PROV%RowCount; CLOSE PROV всегда дает i = 0 Добавлено через 13 минут и 17 секунд сори, курсоры то неявные |
| Автор: Petro123 21.8.2007, 18:49 |
| если не трудно приведите пример |
| Автор: Petro123 21.8.2007, 19:13 | ||
Тогда записи в подч табл удалять вручную?! |
| Автор: DimW 22.8.2007, 09:47 | ||||||||
создаем таблицу:
наполняем данными:
пример sql%rowcount:
получаем:
да! и это правельно! бесконтрольное удаление данных до добра не доводит. |
| Автор: DimW 23.8.2007, 10:01 | ||
| тут что то не стыкуется, только что дошло.... Petro123, OnDeleteCascade ставится в одном случае, когда нужно что бы данные из дочерней таблицы удалялись автоматически при удалении данных из материнской. В то же время ты пытаешься этому помешать:
либо пусть удаляется автоматом, либо убери OnDeleteCascade - тогда оракл будет проверять наличие доч. записей. объясни что тебе на самом деле нужно? |
| Автор: Petro123 23.8.2007, 14:31 |
| да действительно с OnDeleteCascade я перемудрил чето, выходит что ставил его, чтобы затем проверять на существование записей, В общем допустим есть 2 таблы Клиенты Id Name IdCar - скажем код машины Машины Id Name Поле IdCar является обязательным для заполнения. Между Машины(Id) и Клиенты (IdCar) связь 1 ко многим, Вот. При удаленнии машины естно нужно проверять чтобы она не была привязана ни к какому клиенту, только потом удалять. OnDeleteCascade конечно здесь лишнее, тк им пользоваться все равно не придется. Но от проверки не обойтись. можно было конечно завести 3-ю таблу где связывать IdClient и IdCar, но показалось так проще |
| Автор: Sqlninja 23.8.2007, 15:05 | ||
Не курсоры неявные, а атрибуты читать после FETCH'a надо, блин. Откуда он там возьмется если ты его никуда не зафетчил? |
| Автор: DimW 23.8.2007, 16:11 | ||
ну так оракл за тебя сам проверит клиентов, если они есть то он недаст удалить машину, только OnDeleteCascade убери. а если есть клиенты то что нужно делать? не понимаю твоей проблемы. |