我有一个出现错误'PL/SQL: Statement ignored‘的过程。这条消息有点含糊,我不明白为什么我的过程不能编译。所有的过程应该做的是检查客户的交付日期是否早于SYSDATE,如果它是删除的,如果不是,则输出'customer not be delete‘。
该过程的代码如下:
CREATE PROCEDURE remove_customer (customer_id VARCHAR2) IS
declare
ordersCount pls_integer;
BEGIN
select count(*) into ordersCount
from placed_orders
where fk1_customer_id = remove_customer.customer_id
and delivery_date < sysdate;
if ordersCount = 0 then
THEN
DELETE FROM order_line
WHERE order_line.FK1_order_id in
(SELECT order_id FROM placed_order
WHERE placed_order.FK1_customer_id = remove_customer.customer_id
);
DELETE FROM placed_order
WHERE placed_order.FK1_customer_id = remove_customer.customer_id;
DELETE FROM customer
WHERE customer.customer_id = remove_customer.customer_id;
total_customers := total_customers - 1;
ELSE
DBMS_OUTPUT.PUT_LINE 'Customer currently has a order been delivered';
END IF;
END;错误消息是指定PLS-00103:遇到符号"DECLARE“
谢谢你的建议。
发布于 2013-05-09 18:45:51
这一行:
IF placed_order.delivery_date < SYSDATE没有多大意义-您不能使用这样的列(考虑一下:应该将placed_order中的哪些行与SYSDATE进行比较?一?全部?)。
如果您要检查此客户是否有已发货的发货,则需要额外选择:
CREATE PROCEDURE remove_customer (customer_id VARCHAR2) IS
ordersCount pls_integer;
begin
select count(*) into ordersCount
from placed_orders
where fk1_customer_id = remove_customer.customer_id
and delivery_date < sysdate;
if ordersCount = 0 then
-- your code for deleting the customer here
else
-- raise error, show message, ...
end if;https://stackoverflow.com/questions/16459565
复制相似问题