0
customerテーブル、customer_orderテーブル、およびline_itemテーブルから顧客を削除するストアドプロシージャを作成する方法を理解しようとしています。ここに表があります。私はそれを実行しようとすると、私はSPOracle DBMSでレコードを削除するためのストアドプロシージャ
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;
のためにこれまで持っているもの。ここ
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);
は、それがレコードを削除しないと、私は何をすべきかについては混乱しています。
'delete'の後に' commit'を実行してみてください。 –
FKの参照を「ON DELETE CASCADE」(https://www.techonthenet.com/oracle/foreign_keys/foreign_delete.php)として作成すると、子レコードの削除が自動的に処理されます。 – OldProgrammer
ポイントでは直接ではありませんが、あなたは 'customer_id IN(SELECT customer_last ...')に何を期待しましたか? –