Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 删除过程无法运行并出现错误?_Database_Oracle_Stored Procedures_Packages - Fatal编程技术网

Database 删除过程无法运行并出现错误?

Database 删除过程无法运行并出现错误?,database,oracle,stored-procedures,packages,Database,Oracle,Stored Procedures,Packages,我创建了一个过程来删除三个表中的数据,这些表都是用外键链接的,但没有运行。程序如下 PROCEDURE remove_customer (customer_id VARCHAR2) IS BEGIN DELETE FROM order_line WHERE order_line.order_id = placed_order.order_id; DELETE FROM placed_order WHERE placed_order.customer_id = customer.customer

我创建了一个过程来删除三个表中的数据,这些表都是用外键链接的,但没有运行。程序如下

PROCEDURE remove_customer (customer_id VARCHAR2) IS
BEGIN
DELETE FROM order_line
WHERE  order_line.order_id = placed_order.order_id;
DELETE FROM placed_order
WHERE placed_order.customer_id = customer.customer_id;
DELETE FROM customer
WHERE customer.customer_id = remove_customer.customer_id;
total_customers := total_customers - 1;
END;
这是三张桌子的结构。有人知道我为什么会出错吗

customer(
    Customer_ID INTEGER NOT NULL,
    Country VARCHAR(15),
    First_Name  VARCHAR(30),
    Last_Name   VARCHAR(30),
    CONSTRAINT  pk_customer PRIMARY KEY (Customer_ID)
);


    placed_order(
    order_id    INTEGER NOT NULL,
    order_date  VARCHAR(15),
    fk1_Customer_ID INTEGER NOT NULL,
    fk2_Employee_ID INTEGER NOT NULL,
    fk3_order_type_id   INTEGER NOT NULL,
    CONSTRAINT  pk_placed_order PRIMARY KEY (order_id)
);


    order_line(
    order_line_id   INTEGER NOT NULL,
    fk1_order_id    INTEGER NOT NULL,
    fk2_product_id  INTEGER NOT NUL,
    CONSTRAINT  pk_order_line PRIMARY KEY (order_line_id)
);
下面是它抛出的两个错误

ORA-00904:“已下订单”。“订单ID”:无效标识符编译失败,第30行


ORA-00904:“客户”。“客户ID”:无效标识编译失败,第32行您不能仅在DELETE语句中引用其他表中的列。每个语句都需要从参数值customer_id开始。这应该满足您的要求:

PROCEDURE remove_customer (customer_id VARCHAR2) IS
BEGIN

  DELETE FROM order_line
  WHERE  order_line.order_id in
  ( SELECT order_id FROM placed_order
    WHERE placed_order.customer_id = remove_customer.customer_id
  );

  DELETE FROM placed_order
  WHERE placed_order.customer_id = remove_customer.customer_id;

  DELETE FROM customer
  WHERE customer.customer_id = remove_customer.customer_id;

  total_customers := total_customers - 1;

END;

您好,谢谢,这很有意义,有一件事我得到一个SQL命令没有正确结束,是它缺少一个“;”在第一次删除中?嗯,当它没有;它只是有那个错误,现在我已经添加了它,它给我负载或错误?ORA-00904:“订单行”。“订单ID”:无效标识符编译失败PLS-00302:组件“客户ID”必须声明编译失败PL/SQL:ORA-00904:“已下订单”。“客户ID”:无效标识符编译失败任何想法?您必须确保在语句中使用的列名与实际列名匹配-例如
order\u line。order\u id
应为
order\u line。根据表定义,fk1\u order\u id
。如果您还没有,我建议您在表中定义真正的外键。H,是的,已经定义了,但感谢您的提醒