0
试图找出如何创建存储过程,该存储过程将从客户表,customer_order表和line_item表中删除客户。这里是表格。用于删除Oracle DBMS中的记录的存储过程
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;
当我尝试运行它,它不会删除的记录,我很困惑,适合做什么。
尝试在'delete'后面执行'commit'。 –
创建FK参考为“ON DELETE CASCADE”(https://www.techonthenet.com/oracle/foreign_keys/foreign_delete.php),它将负责为您删除子记录。 – OldProgrammer
不是直接点,但你期望什么'WHERE customer_id IN(SELECT customer_last ...'做什么? –