2012-02-24 9 views
1

これはOracleストアドプロシージャです。プロシージャにデータを渡すときに特定のIDを削除したいが、このプロシージャを実行するとき。私は私の宝物が持つすべてを削除します。Oracleの削除手順が正しく動作していません

誰かが

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; 

それから私は、コンパイル・エラーが発生します。

+0

ユーザーはどの列を持っていますか? – Tim

+0

安全性を高めるには、 'users from user.id_user = Delete.id; 'という名前のユーザーから削除しますが、プロシージャーが「削除」と呼ばれるのでコンパイルエラーが発生します。 –

答えて

1

DELETE FROM Users WHERE id_user = id;を試しましたか?

使用==は、等価性チェックに有効なSQLではありません。

まだすべての行が削除されている理由はわかりません。 DELETE FROM Users WHERE Users.id_user = idが正しく動作しているはずです。

DELETE STATEMENT構文の詳細。

+0

あなたは正しいです! –

+0

私は6分以上待たなければなりません。 –

0
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. 

ここで、ユーザー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 
1

を実行します。テーブルに存在しないIdを渡すと、すべてが削除されます。

idがテーブルに存在する場合は、プロシージャを実行したいときに実行します。

PROCEDURE tests 
(jobnr IN varchar2, 
x IN number, 
menu in varchar2 default '1') 
IS 
counter number := 0; 

BEGIN 
delete from table_test where jobnr = jobnr; 

if sql%notfound or sql%rowcount=0 then 
     rollback; 
end if; 

WHILE counter < x 
LOOP 
    insert into table_test (cskey, telnr, seq, jobnr, menu) values ('Test'||counter, counter, counter, jobnr, menu); 
    counter := counter + 1; 
END LOOP; 
commit; 

END; 
関連する問題