在PL / sql中,下面的代码将失败.它不允许定义varchar2参数的大小.你知道为什么吗?我如何解决它?
create or replace function logMessage(msg varchar2(2000)) return number as begin null; return 1; end logMessage; /
错误信息是
1/33 PLS-00103: Encountered the symbol “(” when expecting
one of the following::= . ),@ % default character The symbol “:=” was substituted for
“(” to continue.
您可以通过删除大小约束来修复它.它不需要:
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:
This is annoying but it’s the way PL/sql works so we have to live with
it.
简而言之,您应该在运行时知道将会有多长时间,并且能够处理它.您可以考虑几个选项:
如果你知道你想要消息的长度,你可以定义一个变量,其默认值是参数的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;