Sql 如何在oracle developer中执行过程?
我正在尝试执行我创建的过程,但是每当我执行ProductLineSale时;它告诉我错误(456,1):PLS-00103:遇到符号“EXEC”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 其中产品标
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;