2014-04-21 205 views
0

我無法理解如何創建存儲過程。大多數情況下,我無法理解參數是什麼。我一直在獲取錯誤「SQL命令未正確結束」。oracle 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; 
/

回答

2

語法上,您在更新語句末尾缺少分號。您的表格中也沒有PROFIT列,因此,一旦添加了分號,就不會編譯更新。

編程方式,你可能會使用以更幸福:

CREATE OR REPLACE VIEW SALES_V 
AS 
SELECT PRICE_PER_UNIT, 
     PRICE_SOLD, 
     SOLD, 
     ((PRICE_SOLD * SOLD) - (PRICE_PER_UNIT * SOLD)) PROFIT 
FROM SALES; 

(這是一般不好的做法,物理儲存器獲得的結果)

+0

我錯過了我的評論中的分號。 – TenG

+0

是的,我注意到我已經忘記了售出的參數並且改變了它。 – YellowSoloCup

+0

我需要爲此作業制定程序。我的書顯示了創建一個程序的公式,除了我正在產生錯誤外,我完全是這樣做的。 – YellowSoloCup

0

您的參數列表中存在語法錯誤。

變化

(
price_per_unit NUMBER, 
price_sold NUMBER 
) 

(
price_per_unit IN NUMBER, 
price_sold IN NUMBER 
) 

你需要指定一個參數是否是隻讀(IN)只(OUT)寫入或讀取和寫入(IN OUT)。

至於你報告的錯誤,你能說說你是如何運行代碼? SQLPlus或SQLDeveloper/TOAD?

+0

我仍然得到同樣的錯誤,當我添加IN到參數。 – YellowSoloCup

+0

參數默認爲'in'。沒有必要明確包含'in'關鍵字,儘管在我看來這是更好的做法。 – GriffeyDog