Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/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
Sql 错误PLS-00103:遇到符号“DECLARE”?_Sql_Database_Stored Procedures_Plsql - Fatal编程技术网

Sql 错误PLS-00103:遇到符号“DECLARE”?

Sql 错误PLS-00103:遇到符号“DECLARE”?,sql,database,stored-procedures,plsql,Sql,Database,Stored Procedures,Plsql,我有一个过程出现了错误“PL/SQL:Statement-ignored”。这个消息有点模糊,我不明白为什么我的过程不能编译。所有程序应该做的是检查客户的交付日期是否小于系统日期,是否为删除,如果不是,则打印“客户无法删除” 程序代码如下所示: CREATE PROCEDURE remove_customer (customer_id VARCHAR2) IS declare ordersCount pls_integer; BEGIN select count(*) int

我有一个过程出现了错误“PL/SQL:Statement-ignored”。这个消息有点模糊,我不明白为什么我的过程不能编译。所有程序应该做的是检查客户的交付日期是否小于系统日期,是否为删除,如果不是,则打印“客户无法删除”

程序代码如下所示:

    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:遇到符号声明

谢谢你的建议。

这一行:

IF placed_order.delivery_date < SYSDATE
这没有多大意义-您不能使用这样的列。请思考一下:按顺序排列的行中的哪一行应该与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;

嗨,谢谢你,我已经编辑了你说的,它更有意义。最后一个代码,如果现在在问题中,但当我运行此代码时,我得到的只是错误“PLS-00103”,在预期以下情况之一时遇到了符号DECLARE:begin function pragma procedure SUBSTYPE“你知道为什么吗?对不起,我的错误。函数/过程体不需要Declare,只需去掉它即可。我已经更新了我的答案。另外,我建议你不要编辑原始代码-这会让其他读者感到困惑。如果您更新了问题,请保留原始版本,并将新版本添加到问题末尾,明确说明这是一个更新。您不能直接使用下单。交货日期因为下单是一个表格,您不能在表格上设置条件,如代码所示。你们最好把这个值放到一个变量中,然后把条件放在那个里。嗨,是的,谢谢你,我就是这么做的,但是代码仍然没有运行