2017-03-26 37 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

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