Не се сещам за вариант без съхранена процедура. А дори и с такава, ще трябва да си запазиш някъде записите временно:
CREATE TABLE test (id INT, name CHAR(1));
INSERT INTO test VALUES (1, 'A');
INSERT INTO test VALUES (2, 'B');
INSERT INTO test VALUES (3, 'C');
Опитите ми с обикновена функция доведоха до неуспех:
mysql> SET GLOBAL log_bin_trust_function_creators = 1;
mysql> delimiter $$
mysql> create function delete_from_test (p_id int) returns boolean modifies sql data
begin
delete from test where id=p_id;
return true;
end;
$$
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> select name, delete_from_test(id) from test;
ERROR 1442 (HY000): Can't update table 'test' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
В PostgreSQL пък същото си работи без проблем:
rating=# create or replace function delete_from_test (int) returns void as
$$
DELETE FROM test WHERE id=$1;
$$
LANGUAGE 'sql' VOLATILE;
rating=# select name, delete_from_test(id) from test;
name | delete_from_test
------+------------------
A |
B |
C |
(3 rows)
rating=# select * from test;
id | name
----+------
(0 rows)
За какво ти е изобщо това всъщност? Не можеш ли просто да си избереш със SELECT редовете и после да ги изтриеш?
Everything louder than everything else...Редактирано от Dakota на 16.11.06 19:23.