Sql 如何在oracle developer中执行过程?

Sql 如何在oracle developer中执行过程?,sql,oracle,stored-procedures,oracle-sqldeveloper,Sql,Oracle,Stored Procedures,Oracle Sqldeveloper,我正在尝试执行我创建的过程,但是每当我执行ProductLineSale时;它告诉我错误(456,1):PLS-00103:遇到符号“EXEC” altertable产品 加上销售价格小数(6,2); 创建或替换过程ProductLineSale 作为 开始 更新产品 设置SalePrice=0.90*ProductStandardPrice 其中ProductStandardPrice>=400; 更新产品 设置SalePrice=0.85*ProductStandardPrice 其中产品标

我正在尝试执行我创建的过程,但是每当我执行ProductLineSale时;它告诉我错误(456,1):PLS-00103:遇到符号“EXEC”

altertable产品
加上销售价格小数(6,2);
创建或替换过程ProductLineSale
作为
开始
更新产品
设置SalePrice=0.90*ProductStandardPrice
其中ProductStandardPrice>=400;
更新产品
设置SalePrice=0.85*ProductStandardPrice
其中产品标准价格<400;
结束;
EXEC ProductLineSale;
挑选*
来自产品;

您在
EXEC
关闭
过程之前缺少
/

见:

对于其他PL/SQL块,包括过程、函数、包和触发器,因为它们是多行程序,Oracle需要知道何时运行该块,因此我们必须在每个块的末尾写一个正斜杠,以便Oracle运行它


您需要用
开始
结束

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
altertable产品
加上销售价格小数(6,2);
创建或替换过程ProductLineSale
作为
开始
更新产品
设置SalePrice=0.90*ProductStandardPrice
其中ProductStandardPrice>=400;
更新产品
设置SalePrice=0.85*ProductStandardPrice
其中产品标准价格<400;
结束;
开始
执行产品线销售;
结束;
挑选*
从产品

另一方面,您可能有一条update语句,它比两条语句更有效

UPDATE product
SET saleprice =
          CASE
               WHEN productstandardprice >= 400 THEN 0.90 * productstandardprice
               WHEN productstandardprice < 400  THEN 0.85 * productstandardprice
          END;

现在,当您从表中运行select时,该列将自动显示计算出的值,因为您缺少一个“/”——这将告诉SQL Developer您的存储过程声明已经完成,您已经准备好编译它了

在结尾后添加一个“/”;在执行之前

--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;
——创建表格产品(id整数,
--产品标准价格编号(7,2));
--                      
--插入产品值(1,19.95,0);
--插入产品价值(27995.99);
更改表产品添加销售价格小数(6,2);
创建或替换过程PRODUCTLINESALE as
开始
更新产品
设置
SALEPRICE=0.90*PRODUCTSTANDARDPRICE
其中PRODUCTSTANDARDPRICE>=400;
更新产品
设置
SALEPRICE=0.85*PRODUCTSTANDARDPRICE
其中产品标准价格<400;
结束;
/
exec PRODUCTLINESALE;
挑选*
来自产品;
我用光标选择了“创建”和“之后的所有内容”,然后按F5


我尝试了这个,但是仍然得到了相同的错误。@alphaX Add
/
在什么之前添加
/
在什么之前?@alphaX before execute,所以前面的语句是关闭的
execute
是一个SQL*Plus命令
EXEC
是一个公认的完全相同的缩写。我这样做了,但是我得到了相同的错误号,但这次用的是Begin这个词。您的包名是什么?我的包名是什么意思?
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
          )
);
--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;