Процедура удаления Oracle работает неправильно - PullRequest
1 голос
/ 24 февраля 2012

Это моя хранимая процедура оракула. Я хочу удалить определенный идентификатор, когда я передаю данные в процедуру, но когда я выполняю эту процедуру. Я удаляю все, что есть в моем трабле.

Может кто-нибудь проверить это

CREATE OR REPLACE PROCEDURE Delete(
    id IN number)

AS
BEGIN
        DELETE FROM Users WHERE Users.id_user= id;
END;
/

Я пытался поставить:

DELETE FROM Users WHERE Users.id_user == id;

Тогда я получаю ошибку компиляции.

Ответы [ 3 ]

1 голос
/ 12 декабря 2013

У меня такая же проблема.Когда я передаю идентификатор, который не существует в таблице, все удаляется.

Если идентификатор существует в таблице, то процедура запускается так, как я хочу, чтобы она выполнялась.

1 голос
/ 24 февраля 2012

Вы пробовали DELETE FROM Users WHERE id_user = id;?

Использование == не является допустимым SQL для проверки на равенство.

Я до сих пор не понимаю, почему вы удаляете все строки.DELETE FROM Users WHERE Users.id_user = id должен работать правильно.

Дополнительная информация о синтаксисе DELETE STATEMENT .

0 голосов
/ 30 мая 2013
CREATE TABLE USERS(ID NUMBER);

TABLE CREATED.

CREATE OR REPLACE PROCEDURE DeleteIDS(
    id IN number)

AS
BEGIN
        DELETE FROM Users WHERE id= id;
END;
/

PROCEDURE CREATED.

Здесь, в таблице user id есть, а также, если вы укажете id в объявлении процедуры, эта процедура удалит все данные. поэтому,

CREATE OR REPLACE PROCEDURE DeleteIDS(
    idS IN number)

AS
BEGIN
        DELETE FROM Users WHERE id= idS;
END;
/
PROCEDURE CREATED.

Теперь

INSERT INTO USERS VALUES(10);

1 ROW INSERTED.

INSERT INTO USER VALUES(20);

1 ROW INSERTED.

COMMIT;

Теперь выполните процедуру

SQL>EXEC DELETEIDS(10);

PL/SQL PROGRAM SUCCESSFULLY COMPLETED.

SELECT * FROM USERS;

ID
---
2
...