Oracle 存储过程上的编译错误
我通常是一名SQL Server开发人员,但我现在使用的是一个使用Oracle的系统。我已经创建了一个新的过程,并且得到了一个运行时错误。程序如下:Oracle 存储过程上的编译错误,oracle,syntax,procedure,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
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
您的proecedure没有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
限制可能与您的角色集有关。默认情况下,SQLDeveloper允许更多
无论如何,请指定变量的大小:
var x varchar2(30);
exec CHK_LASTAPPTIME(:x);
您似乎在过程中生成一个数字,然后将其作为字符串返回。使用相同的数据类型会使这一点更简单。酷!是的,我确实缩小了代码以便于发布,并且过程是有效的。指定X的大小可以消除错误。谢谢