Попытка выяснить, как создать хранимая процедура, которая удалит клиента из таблицы клиентов, таблицы customer_order и таблицы line_item. Вот таблицы.Сохраненная процедура для удаления записей в СУБД Oracle
CREATE TABLE customer(
customer_ID DECIMAL(10) NOT NULL,
customer_first VARCHAR(30),
customer_last VARCHAR(40),
customer_total DECIMAL(12, 2),
PRIMARY KEY (customer_ID));
CREATE TABLE customer_order (
order_id DECIMAL(10) NOT NULL,
customer_id DECIMAL(10) NOT NULL,
order_total DECIMAL(12,2),
order_date DATE,
PRIMARY KEY (ORDER_ID),
FOREIGN KEY (CUSTOMER_ID) REFERENCES customer);
CREATE TABLE line_item(
order_id DECIMAL(10) NOT NULL,
item_id DECIMAL(10) NOT NULL,
item_quantity DECIMAL(10) NOT NULL,
line_price DECIMAL(12,2),
PRIMARY KEY (ORDER_ID, ITEM_ID),
FOREIGN KEY (ORDER_ID) REFERENCES customer_order,
FOREIGN KEY (ITEM_ID) REFERENCES item);
Вот что я до сих пор для SP
CREATE OR REPLACE PROCEDURE DELETE_CUSTOMER(
customer_id_arg IN DECIMAL,
first_name_arg IN VARCHAR,
last_name_arg IN VARCHAR
) IS
BEGIN
DELETE FROM CUSTOMER
WHERE customer_id IN (SELECT customer_last
FROM Customer
WHERE customer_id = customer_id_arg);
END;
Когда я пытаюсь запустить его, он не удаляет запись, и я запутался, за то, что делать.
Попробуйте выполнить 'commit' после' delete'. –
Создайте ссылку FK как «ON DELETE CASCADE» (https://www.techonthenet.com/oracle/foreign_keys/foreign_delete.php), и она позаботится об удалении дочерних записей для вас. – OldProgrammer
Не прямо на месте, но что вы ожидали 'WHERE customer_id IN (SELECT customer_last ...' делать? –