我试图执行我创建的过程,但是无论何时执行EXEC ProductLineSale;它告诉我错误(456,1):PLS-00103:遇到符号“ EXEC”
ALTER TABLE Product
ADD SalePrice DECIMAL(6,2);
CREATE OR REPLACE PROCEDURE ProductLineSale
AS
BEGIN
UPDATE Product
SET SalePrice = 0.90 * ProductStandardPrice
WHERE ProductStandardPrice >= 400;
UPDATE Product
SET SalePrice = 0.85 * ProductStandardPrice
WHERE ProductStandardPrice < 400;
END;
EXEC ProductLineSale;
select *
FROM Product;
答案 0 :(得分:1)
您缺少一个'/'-这告诉SQL Developer您的存储过程声明已完成,您可以对其进行编译了。
在END之后添加'/';并在执行之前。
--create table product (id integer,
-- productstandardprice number(7,2));
--
--insert into product values (1, 19.95, 0);
--insert into product values (2, 7995.99);
alter table PRODUCT add SALEPRICE decimal(6, 2);
create or replace procedure PRODUCTLINESALE as
begin
update PRODUCT
set
SALEPRICE = 0.90 * PRODUCTSTANDARDPRICE
where PRODUCTSTANDARDPRICE >= 400;
update PRODUCT
set
SALEPRICE = 0.85 * PRODUCTSTANDARDPRICE
where PRODUCTSTANDARDPRICE < 400;
end;
/
exec PRODUCTLINESALE;
select *
from PRODUCT;
我用光标选择了创建内容和所有内容,然后按F5
答案 1 :(得分:0)
在/
之前,您缺少EXEC
来关闭PROCEDURE
对于其他PL / SQL块,包括过程,函数,程序包和触发器,由于它们是多行程序,因此Oracle需要一种方法来知道何时运行该块,因此我们必须在末尾写一个正斜杠。每个块让Oracle运行它。
答案 2 :(得分:0)
您需要用Begin
和End
ALTER TABLE Product
ADD SalePrice DECIMAL(6,2);
CREATE OR REPLACE PROCEDURE ProductLineSale
AS
BEGIN
UPDATE Product
SET SalePrice = 0.90 * ProductStandardPrice
WHERE ProductStandardPrice >= 400;
UPDATE Product
SET SalePrice = 0.85 * ProductStandardPrice
WHERE ProductStandardPrice < 400;
END;
BEGIN
EXECUTE ProductLineSale;
END;
select *
FROM Product
答案 3 :(得分:0)
换句话说,您可能只有一条update语句,它比两条语句更有效。
UPDATE product
SET saleprice =
CASE
WHEN productstandardprice >= 400 THEN 0.90 * productstandardprice
WHEN productstandardprice < 400 THEN 0.85 * productstandardprice
END;
此外,如果可以轻松地从现有列中生成表,则建议在表中不要包含另一列。您应该选择VIRTUAL COLUMNS
因此,您可以重新定义saleprice
列
ALTER TABLE product ADD (
SalePrice DECIMAL(6,2) GENERATED ALWAYS AS (
CASE
WHEN productstandardprice >= 400 THEN 0.90 * productstandardprice
WHEN productstandardprice < 400 THEN 0.85 * productstandardprice
END
)
);
现在,当您从表中运行选择时,该列将自动显示计算值