我正在尝试使用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
答案 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;