powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не могу найти простую ошибку в коде.
6 сообщений из 6, страница 1 из 1
Не могу найти простую ошибку в коде.
    #32049869
igoro1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется таблица PRODUCT

Name Null? Type
-------------------- -------- ----------------------------
PRODID NOT NULL NUMBER(6)
DESCRIP VARCHAR2(30)


Я написал простую процедуру для обновления.
Так вот когда я хочу обновить строку с несуществующим PRODID, то получаю, что процедура выполнена успешно. Разумеется ничего не изменяется в самой таблице.
Где же ошибка?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR REPLACE PROCEDURE UPD_PROD
(
V_ID	IN 	PRODUCT.PRODID%TYPE,
V_DESC	IN 	PRODUCT.DESCRIP%TYPE
)
IS
BEGIN
	UPDATE PRODUCT
	SET DESCRIP = V_DESC
	WHERE PRODID = V_ID;
EXCEPTION
	WHEN NO_DATA_FOUND THEN
	DBMS_OUTPUT.PUT_LINE ('PLEASE, ENTER A VALID NUMBER');
END;
/
...
Рейтинг: 0 / 0
Не могу найти простую ошибку в коде.
    #32049871
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Uvazaemij!? A s chego vi vzjali, chto UPDATE vizivaet kogda-libo EXCEPTION WHEN_NO_DATA_FOUND ???

Vi prosledite za logikoj voobsche-to... Izmenit vse zapisi, gde prodid = v_id. Nu tak on i izmenjaet vse zapisi gde srabativaet etot kriterij poiska, a gde ne srabativaet, tam i ne menjaet. I vovse ne znachit, cho UPDATE dolzen izmenit hotjabi odnu zapis za svoj prohod.
...
Рейтинг: 0 / 0
Не могу найти простую ошибку в коде.
    #32049874
igoro1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UPDATE в данной процедуре совсем не должен обновлять все записи. Он должен определять одну определенную запись, в зависимости от
WHERE PRODID = V_ID;
А если PRODID, равный V_ID не существует, то я полагал, что это и есть NO_DATA_FOUND.
Я прав?

А как бы Вы проконтролировали возможный ввод неправильного значения V_ID?

Спасибо.
...
Рейтинг: 0 / 0
Не могу найти простую ошибку в коде.
    #32049899
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sql%rowcount
а
EXCEPTION
WHEN NO_DATA_FOUND THEN
это для select который ничего не вернул
...
Рейтинг: 0 / 0
Не могу найти простую ошибку в коде.
    #32049970
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UPDATE НИКОГДА НЕ ВЕРНЕТ NO_DATA_FOUND !!! АКСИОМА!

А чем тебе не нравится вариант:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create or replace procedure upd_prod (v_id product.prodid%type, v_desc product.descrip%type) is
     v_prom product%owtype;
begin
     select * into v_prom from product where prodid = v_id;
     update product set descrip = v_desc where prodid = v_id;
exception
     when no_data_found then
          dbms_output.put_line('Please enter a valid number.');
end;
/
...
Рейтинг: 0 / 0
Не могу найти простую ошибку в коде.
    #32049979
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А чем тебе не нравится вариант:

Вариант nick'а с использованием sql%rowcount однозначно лучше, т.к. ненадо дополнительного селекта.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не могу найти простую ошибку в коде.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]