PL/SQL 函数参数
Posted
技术标签:
【中文标题】PL/SQL 函数参数【英文标题】:PL/SQL function parameter 【发布时间】:2012-07-01 14:23:39 【问题描述】:在 PL/SQL 中,下面的代码将失败。它不允许为 varchar2 参数定义大小。你知道为什么吗?我该如何解决?
create or replace function logMessage(msg varchar2(2000))
return number as
begin
null;
return 1;
end logMessage;
/
错误信息是
1/33 PLS-00103:预期时遇到符号“(” 以下之一:
:= 。 ) , @ % 默认字符 符号“:=”被替换 "(" 继续。
【问题讨论】:
【参考方案1】:您可以通过删除大小限制来修复它。不需要:
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;
【讨论】:
【参考方案2】:参数用数据类型声明,但没有数据类型长度或精度。这意味着参数可以声明为 VARCHAR2,但不会使用长度分量声明(VARCHAR2(30) 无效)。
【讨论】:
以上是关于PL/SQL 函数参数的主要内容,如果未能解决你的问题,请参考以下文章