存储过程的编译错误

时间:2014-05-21 09:18:22

标签: oracle syntax procedure

我通常是SQL Server开发人员,但现在正在使用使用Oracle的系统。我创建了一个新的过程,并收到运行时错误。这是程序:

CREATE OR REPLACE PROCEDURE CHK_LASTAPPTIME 
(
    LASTAPPTIME OUT VARCHAR2  
) 
IS
    v_appappid varchar2(20) null;
    v_lastapptime number null;
BEGIN
    select max(APPID) into v_appappid from applicationtable;

    select trunc(v_lastapptime = (((sysdate - capturedate) * 24)) * 60) from applicationtable where APPID = v_appappid;

    LASTAPPTIME := to_char(v_lastapptime);

END CHK_LASTAPPTIME;

以下是我收到的错误:

SQL> var x varchar2;
SQL> exec CHK_LASTAPPTIME(:x);
BEGIN CHK_LASTAPPTIME(:x); END;

*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "CAPDEV.CHK_LASTAPPTIME", line 19
ORA-06512: at line 1

1 个答案:

答案 0 :(得分:0)

您的行为没有19行,因此消息很奇怪,或者您已经显示了与您实际运行的代码不同的代码。由于您所展示的内容并未编译,我假设您已尝试将其删除以解决问题,并且我还假设您的实际程序有效且执行了哪些操作你想要的。

问题在于运行时变量声明。您尚未指定x的大小,因此它使用默认值。在我的数据库中,在SQL * Plus中似乎允许三个字符,但错误有四个或更多:

var x varchar2;

exec :x := 'a';
PL/SQL procedure successfully completed.
exec :x := 'ab';
PL/SQL procedure successfully completed.
exec :x := 'abc';
PL/SQL procedure successfully completed.
exec :x := 'abcd';
BEGIN :x := 'abcd'; END;

*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 1

限制可能与你的角色集有关。 SQL Developer默认允许更多。

无论如何,请指定变量的大小:

var x varchar2(30);
exec CHK_LASTAPPTIME(:x);

您似乎在您的过程中生成一个数字,然后将其作为字符串返回。使用相同的数据类型会使这更简单。