您可以通过删除大小限制来修复它。不需要:
create or replace function logMessage (msg in varchar2)
return number is
begin
null;
return 1;
end logMessage;
/
我假设您的功能比这稍微复杂一些?
文档create function
中语句的完整语法是:
CREATE [OR REPLACE] FUNCTION [Owner.]FunctionName
[(arguments [IN|OUT|IN OUT][NOCOPY] DataType [DEFAULT expr][,...])]
RETURN DataType [InvokerRightsClause] [DETERMINISTIC]
{IS|AS}
如果您有兴趣,有很多关于细节的信息,但您可能会发现TECH on the Net更有用。
回答您的第一个问题,即为什么我不知道也找不到答案。但是引用 APC 的话:
这很烦人,但这是 PL/SQL 的工作方式,所以我们必须忍受它。
简而言之,您应该在运行时知道某事将持续多长时间,因此能够处理它。不过,您可以考虑以下几个选项:
如果你知道你想要消息的长度,你可以定义一个变量,它的默认值是substr
参数的 a:
create or replace function logmessage ( msg in varchar2 ) return number is
l_msg varchar2(2000) := substr(msg,1,2000);
begin
return 1;
end;
或者,您可以检查函数本身的长度:
create or replace function logmessage ( msg in varchar2 ) return number is
begin
if length(msg) > 2000 then
return 0;
end if;
return 1;
end;