加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – PL / SQL函数参数

发布时间:2021-05-22 20:35:59 所属栏目:站长百科 来源:网络整理
导读:在PL / SQL中,下面的代码将失败.它不允许定义varchar2参数的大小.你知道为什么吗?我如何解决它? create or replace function logMessage(msg varchar2(2000))return number asbegin null; return 1;end logMessage;/ 错误信息是 1/33 PLS-00103: Encounter

在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;

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读