2016-11-05 25 views
-4
Create or replace function get_empsalary_by dept(emp_dept varchar(20)) 
    return number is 
    Total_salary number(10,2); 
    emp_dept varchar(20); 
    emp_salary number(10,2); 
    begin 
     select empdept, sum(empsalary) into emp_dept,emp_salary from employe where empdept=emp_dept; 
    total_salary :=sum(empsalary); 
    return total_salary; 
    end; 
    /

和錯誤是:如何調試不會在Oracle中構建的存儲過程?

----------------------------------------------------------------- 
PLS-00103: Encountered the symbol "DEPT" when expecting one of 
the following: 
(return compress compiled wrapped 
+0

您試圖讀取名爲'employe'或'employee'的表格嗎? –

+0

專業提示:我們喜歡這裏有用的和翔實的標題。 「任何人都可以檢查這些代碼並幫助我」可能適用於網站上的所有12.7M個問題,因此可以做得更具體。這可能是你獲得一些讚譽的地方。 – halfer

回答

0

你的功能被稱爲「get_empsalary_by部門」(之間有一個空間「通過」和「部門」)等解析器抱怨,因爲它經過功能的期望有效的(即沒有空格)函數名稱:而是找到兩個字符串。

+0

嗨,我已更正錯字錯誤,但它顯示相同的錯誤 –

+1

請更正問題代碼。它真的是一樣的錯誤?或者它抱怨與「DEPT」不同的其他符號?如果是後者,請更新錯誤信息。但是,也存在emp_dept的錯誤聲明(它已經是輸入參數,因此不需要聲明它),select應該只將sum(emp_salary)表示爲total_salary '(不需要select子句中的empdept和emp_salary字段),你應該刪除'total_salary:= sum(empsalary);'行。啊..可能表名是「員工」,而不是「workers」。 – Insac

2
Create or replace function get_empsalary_by_dept(p_emp_dept in employe.empdept%type) 
return number 
is 
    Total_salary number(10,2); 
    emp_dept varchar(20); 
    emp_salary number(10,2); 

begin 

    select empdept, sum(empsalary) 
    into emp_dept,emp_salary 
    from employe 
    where empdept=p_emp_dept 
    group by empdept; 

    -- total_salary := emp_salary; 

    return emp_salary; 
end; 
/

也許這可以幫助你更進一步。

函數的名稱不能包含任何空格。輸入參數(emp_dept)不能與變量相同。在這種情況下,您不需要變量emp_dept。返回值可以是emp_salary。

+0

我無法測試它,但不應該查詢擁有'group by empdept'(或者empdept字段應該從select子句中刪除) – Insac

+0

@Insac:你說得對。 select語句缺少group by子句。我已經添加到我的答案。謝謝。 – wieseman