2016-04-27 71 views
2

我試圖將MS SQL函數轉換爲Oracle函數,但是出現錯誤,我無法理解錯誤或者如何解決它們。將MS SQL函數轉換爲Oracle函數拋出錯誤

誰能幫助:

CREATE OR REPLACE FUNCTION ItemsSold 
(
    p_PrdID nvarchar2(50), 
    p_Cst nvarchar2(50) 
) 
RETURN Number 
AS 
v_Price NUMBER(18,2); 
BEGIN 

SELECT (Min(s.Price)*i.Qty) AS MinP into v_Price 
FROM   Customers AS c INNER JOIN 
         CustOrders AS o ON c.Name = o.Cust INNER JOIN 
         Sales AS i ON i.Order = o.Order INNER JOIN 
         Purchases AS s ON i.Item = s.Item 
WHERE  i.Item = p_PrdID AND o.Cust = p_Cst 
group by i.Qty) 

    RETURN v_Price; 



END; 

錯誤

Error(4,23): PLS-00103: Encountered the symbol "(" when expecting one of the following:  := .) , @ % default character The symbol ":=" was substituted for "(" to continue. 
Error(6,18): PLS-00103: Encountered the symbol "(" when expecting one of the following:  := .) , @ % default character The symbol ":=" was substituted for "(" to continue. 
Error(17,29): PLS-00103: Encountered the symbol "INNER" when expecting one of the following:  , ; for group having intersect minus order start union where connect 
+0

通過i.Qty組後無分號) – kevinsky

回答

4

開放式括號錯誤都與變量聲明 - 在PL/SQL,不允許指定一個尺寸變量(所以讓他們成爲NVARCHAR2,你不能說NVARCHAR2(50))。

第三個錯誤與表名別名的Oracle語法有關 - Oracle使用關鍵字AS作爲列別名(可選),但不允許將其用於表名別名。

在別名c之前(在錯誤消息指示的行上)刪除NVARCHAR2的變量和關鍵字AS的大小規範並查看會發生什麼情況。

祝你好運!

+0

arrgh,錯過了你所看到的,哦,很多人眼中是一個更好的解決方案 – kevinsky

+0

將測試在明年30分鐘,然後標出答案明顯的問題,這對答覆 –

+0

而更換「i.Qty組)」與「i.Qty組合」; –