oracle sql存储过程
我很难理解如何创建存储过程。大多数情况下,我很难理解参数是什么。我不断获得错误“SQL命令未正确结束” 我相信这是因为我的参数。我正在尝试创建一个过程,该过程将根据其他两列更新我的已售出列oracle sql存储过程,sql,oracle,stored-procedures,Sql,Oracle,Stored Procedures,我很难理解如何创建存储过程。大多数情况下,我很难理解参数是什么。我不断获得错误“SQL命令未正确结束” 我相信这是因为我的参数。我正在尝试创建一个过程,该过程将根据其他两列更新我的已售出列 CREATE TABLE sales ( price_per_unit NUMBER NOT NULL, price_sold NUMBER NOT NULL, sold NUMBER, profit NUMBER ); CREATE OR REPLACE PROCEDURE
CREATE TABLE sales
(
price_per_unit NUMBER NOT NULL,
price_sold NUMBER NOT NULL,
sold NUMBER,
profit NUMBER
);
CREATE OR REPLACE PROCEDURE update_profit
(
price_per_unit NUMBER,
price_sold NUMBER,
sold NUMBER
)
AS
BEGIN
UPDATE sales
SET profit = ((price_sold * sold) - (price_per_unit * sold))
COMMIT;
END;
/
参数列表中存在语法错误 改变
(
price_per_unit NUMBER,
price_sold NUMBER
)
到
您需要指定参数是只读(IN)、只读(OUT)还是读写(IN OUT)
至于你报告的错误,你能告诉我你是如何运行代码的吗?SQLPlus或SQLDeveloper/TOAD?从语法上讲,update语句末尾缺少分号。您的表上也没有利润列,所以一旦添加了分号,您的更新将无法编译 从程序上讲,使用视图可能会让您更快乐:
CREATE OR REPLACE VIEW SALES_V
AS
SELECT PRICE_PER_UNIT,
PRICE_SOLD,
SOLD,
((PRICE_SOLD * SOLD) - (PRICE_PER_UNIT * SOLD)) PROFIT
FROM SALES;
(物理存储派生结果通常是不好的做法)我的评论中没有提到分号。是的,我注意到我忘记了sell参数,并对其进行了更改。我需要为此作业制定一个程序。我的书展示了创建一个过程的公式,除了我的产生错误之外,我的书就是这样创建的。添加分号使它工作了!非常感谢你的帮助。我现在正在查看有关过程的页面,我的书中没有一个示例在该位置使用分号。当我添加到参数中时,仍然会遇到相同的错误。参数在中默认为
。没有必要显式地包含“in”关键字,尽管我认为这是更好的做法。
CREATE OR REPLACE VIEW SALES_V
AS
SELECT PRICE_PER_UNIT,
PRICE_SOLD,
SOLD,
((PRICE_SOLD * SOLD) - (PRICE_PER_UNIT * SOLD)) PROFIT
FROM SALES;