Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle sql存储过程_Sql_Oracle_Stored Procedures - Fatal编程技术网

oracle 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

我很难理解如何创建存储过程。大多数情况下,我很难理解参数是什么。我不断获得错误“SQL命令未正确结束”

我相信这是因为我的参数。我正在尝试创建一个过程,该过程将根据其他两列更新我的已售出列

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;