错误(1,30):PLS-00103:遇到符号“)”

时间:2016-11-27 04:06:26

标签: sql oracle stored-procedures plsql

我正在尝试使用oracle创建一个程序,它应该工作正常,但我不断收到以下错误:

  

错误(1,30):PLS-00103:遇到以下其中一项时遇到符号“)”:当前删除存在

这是我的程序:

CREATE PROCEDURE ProductLineSale () 
BEGIN  
ALTER TABLE Product_T ADD COLUMN SalePrice decimal(6,2);

UPDATE Product 
SET SalePrice = .90 * ProductStandardPrice 
WHERE ProductStandardPrice >= 400; 

UPDATE Product 
SET SalePrice = .85 * ProductStandardPrice 
WHERE ProductStandardPrice < 400; 

END

1 个答案:

答案 0 :(得分:3)

我认为这会奏效:

CREATE PROCEDURE ProductLineSale
AS BEGIN  

    EXECUTE IMMEDIATE 'ALTER TABLE Product_T ADD COLUMN SalePrice decimal(6,2)';

    UPDATE Product 
        SET SalePrice = (CASE WHEN ProductStandardPrice >= 400 THEN 0.90 ELSE 0.85 END) * ProductStandardPrice 
END;

注意:

  • 删除了括号。
  • alter移至动态SQL。
  • 将两个更新合并为一个声明。
  • AS之前添加了BEGIN

我认为update没问题,但也可能需要是动态SQL。

编辑:

我原以为Oracle延迟了查询的解释,直到运行存储过程。但是你应该在整个过程中使用动态SQL:

CREATE PROCEDURE ProductLineSale
AS BEGIN  

    EXECUTE IMMEDIATE 'ALTER TABLE Product_T ADD COLUMN SalePrice decimal(6,2)';

    EXECUTE IMMEDIATE '
UPDATE Product 
    SET SalePrice = (CASE WHEN ProductStandardPrice >= 400 THEN 0.90 ELSE 0.85 END) * ProductStandardPrice 
';
END;