2017-03-26 215 views
0

表EMP創建函數ENAME作爲attribute.The下面的函數給出了錯誤:警告:與編譯錯誤

SET SERVEROUTPUT ON 
SET ECHO ON 
CREATE OR REPLACE FUNCTION count_emp(e_name varchar(20)) 
RETURN integer IS 
total integer; 
BEGIN 
SELECT count(*) into total 
FROM DEPARTMENTS 
where ENAME = e_name; 
RETURN total; 
END; 
/

warning:function created with compilation error.

回答

1

您可以運行show errors;看到的錯誤是什麼彙編。

參數的數據類型應該沒有指定長度。此外,請使用varchar2而不是varchar

Oracle site

The VARCHAR datatype is synonymous with the VARCHAR2 datatype. To avoid possible changes in behavior, always use the VARCHAR2 datatype to store variable-length character strings.

試試這個:

CREATE OR REPLACE FUNCTION count_emp(e_name varchar2) -- here 
RETURN integer IS 
total integer; 
BEGIN 
SELECT count(*) into total 
FROM DEPARTMENTS 
where ENAME = e_name; 
RETURN total; 
END; 
/
+0

謝謝先生!工作 –

0

如果你關心表EMP,你應該在函數中使用它。

我會寫爲:

CREATE OR REPLACE FUNCTION count_emp (
    in_e_name varchar2 
) 
RETURN integer IS 
    v_total integer; 
BEGIN 
    SELECT COUNT(*) into v_total 
    FROM EMP e 
    WHERE e.ENAME = in_e_name; 

    RETURN v_total; 
END; 

注:

  • 甲骨文將彙編函數和存儲過程,即使對象不(還)存在。這被認爲是「功能」。
  • 使用命名約定從列中區分參數和變量。這是使用in_作爲輸入參數,使用v_作爲局部變量。
  • 限定所有列名稱引用。這進一步降低了變量和列名稱之間衝突的可能性。
  • 你不需要長度爲varchar2()輸入(這比varchar()更可取,儘管也許有一天,Oracle會屈服於標準)。
+0

謝謝先生..它的工作:) –