请考虑以下代码(query.sql):
create or replace function age (dateOfBirth date)
return number
is
mAge number(5,2);
begin
mAge:=(sysdate-dateOfBirth)/365.25;
return mAge;
end;
SQL> @query.sql
13
14
15 /
Warning: Function created with compilation errors.
当我点击显示错误时,我得到以下内容:
代码:
SQL> show error
Errors for FUNCTION AGE:
LINE/COL ERROR
-------- -----------------------------------------------------------------
5/8 PL/SQL: Item ignored
5/15 PLS-00325: non-integral numeric literal 5.2 is inappropriate in
this context
8/8 PL/SQL: Statement ignored
8/8 PLS-00320: the declaration of the type of this expression is
incomplete or malformed
9/5 PL/SQL: Statement ignored
9/12 PLS-00320: the declaration of the type of this expression is
incomplete or malformed
LINE/COL ERROR
-------- -----------------------------------------------------------------
我尝试从Oracle Procedure
执行以下操作1) SQL> set role none;
和
2) SELECT ON DBA_TAB_COLUMNS;
但上面的第二个查询是抛出错误:缺少表达式。
请让我知道上述所有内容有什么问题。
由于
答案 0 :(得分:2)
你错过了一个BEGIN,你的NUMBER变量应该用逗号而不是句号声明。
create or replace function age (
pDateOfBirth date ) return number is
l_age number(5,2);
begin
l_age := ( sysdate - pDateOfBirth ) / 365.25;
return l_age;
end;
/
您现在已编辑问题以包含BEGIN
,但您尚未修复变量声明。正如您的错误消息所示:
PLS-00325:非整数数字文字5.2在此上下文中不合适
就个人而言,我认为你的计算年龄不正确。一年有365或366天。我会这样做,它使用内部Oracle日期函数:
function get_age (pDOB date) return number is
/* Return the the number of full years between
the date given and sysdate.
*/
begin
return floor(months_between(sysdate, pDOB)/12);
end;
即如果你只需要整年的数量。