![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Petro123 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
Как в Pl/Sql узнать количество строк возвращаемых некоторым запросом
|
|||
|
||||
DimW |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
в pl/sql нельзя вернуть строки селектом в не куда, обычно это массив(в pl/sql существует 3 вида массивов), у массива есть свойство rowcount. также вы можите обратиться к неявно открытому курсору после выполнения DML - sql%rowcount можете выполнить запрос с теми же условиями:
а лучше объясните для чего это вам нужно, возможно есть более изящьные способы это сделать. Это сообщение отредактировал(а) DimW - 20.8.2007, 13:29 |
||||
|
|||||
Petro123 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
В общем при удалении строки из главной таблицы, нужно проверить есть ли записи в подчиненной, если нет то удалить,
там OnDeleteCascade стоит |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
при таком подходе придется блокировать всю дочернюю таблицу, что бы ограничить других пользователей от изменений данных, т.к. между проверкой дочерней таблицы и удалением строк в родительской может пройти транзакция от другова пользователя... саветую убрать OnDeleteCascade, имхо от нее только вред ![]() |
|||
|
||||
Petro123 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
почемуто
OPEN PROV; I:= PROV%RowCount; CLOSE PROV всегда дает i = 0 Добавлено через 13 минут и 17 секунд сори, курсоры то неявные |
|||
|
||||
Petro123 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
если не трудно приведите пример
|
|||
|
||||
Petro123 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
Тогда записи в подч табл удалять вручную?! |
|||
|
||||
DimW |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
создаем таблицу:
наполняем данными:
пример sql%rowcount:
получаем:
да! и это правельно! бесконтрольное удаление данных до добра не доводит. Это сообщение отредактировал(а) DimW - 22.8.2007, 10:09 |
||||||||
|
|||||||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
тут что то не стыкуется, только что дошло....
Petro123, OnDeleteCascade ставится в одном случае, когда нужно что бы данные из дочерней таблицы удалялись автоматически при удалении данных из материнской. В то же время ты пытаешься этому помешать:
либо пусть удаляется автоматом, либо убери OnDeleteCascade - тогда оракл будет проверять наличие доч. записей. объясни что тебе на самом деле нужно? Это сообщение отредактировал(а) DimW - 23.8.2007, 10:04 |
|||
|
||||
Petro123 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
да действительно с OnDeleteCascade я перемудрил чето,
выходит что ставил его, чтобы затем проверять на существование записей, В общем допустим есть 2 таблы Клиенты Id Name IdCar - скажем код машины Машины Id Name Поле IdCar является обязательным для заполнения. Между Машины(Id) и Клиенты (IdCar) связь 1 ко многим, Вот. При удаленнии машины естно нужно проверять чтобы она не была привязана ни к какому клиенту, только потом удалять. OnDeleteCascade конечно здесь лишнее, тк им пользоваться все равно не придется. Но от проверки не обойтись. можно было конечно завести 3-ю таблу где связывать IdClient и IdCar, но показалось так проще Это сообщение отредактировал(а) Petro123 - 23.8.2007, 14:38 |
|||
|
||||
Sqlninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 15.5.2006 Где: San Francisco, CA Репутация: 13 Всего: 13 |
Не курсоры неявные, а атрибуты читать после FETCH'a надо, блин. Откуда он там возьмется если ты его никуда не зафетчил? -------------------- It's better to burn out than to fade away. |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
ну так оракл за тебя сам проверит клиентов, если они есть то он недаст удалить машину, только OnDeleteCascade убери. а если есть клиенты то что нужно делать? не понимаю твоей проблемы. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Oracle" | |
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Oracle | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |