在PL / SQL中,以下代码将失败。它不允许定义varchar2参数的大小。你知道为什么吗?我该如何解决?
create or replace function logMessage(msg varchar2(2000))
return number as
begin
null;
return 1;
end logMessage;
/
错误消息是
1/33 PLS-00103:遇到符号“(”当期待 以下之一:
:=。 ),@%默认字符替换符号“:=” “(”继续。
答案 0 :(得分:10)
您可以通过删除大小限制来修复它。这不需要:
create or replace function logMessage (msg in varchar2)
return number is
begin
null;
return 1;
end logMessage;
/
我认为你的功能稍微复杂一点吗?
create function
语句from the documentation的完整语法是:
CREATE [OR REPLACE] FUNCTION [Owner.]FunctionName
[(arguments [IN|OUT|IN OUT][NOCOPY] DataType [DEFAULT expr][,...])]
RETURN DataType [InvokerRightsClause] [DETERMINISTIC]
{IS|AS}
如果您感兴趣,可以在the specifics周围找到很多信息,但您可能会发现TECH on the Net更有用。
回答你的第一个问题为什么我不知道,也找不到答案。但是to quote APC:
这很烦人,但它是PL / SQL的工作方式,所以我们必须忍受 它
简单地说,你应该在运行时知道多长时间,并且能够处理它。您可以考虑以下几种选择:
如果你知道你想要消息的长度,你可以定义一个变量,其默认值是参数的substr
:
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;
答案 1 :(得分:3)
使用数据类型声明参数,但没有数据类型长度或精度。这意味着参数可以声明为VARCHAR2,但不会使用长度组件声明(VARCHAR2(30)无效)。