表EMP将ENAME作为属性。以下函数给出错误:
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;
/
警告:使用编译错误创建的函数。
答案 0 :(得分:1)
您可以运行show errors;
来查看编译错误。
应该指定参数的数据类型,不带长度。另外,请使用varchar2
代替varchar
。
来自Oracle site:
VARCHAR数据类型与VARCHAR2数据类型同义。为避免可能的行为更改,请始终使用VARCHAR2数据类型来存储可变长度的字符串。
试试这个:
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;
/
答案 1 :(得分: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会达到标准)。