ORA-06502在存储过程中

问题描述 投票:0回答:1

你好,我有一个简单的过程,编译得很好,但在我初始化变量后,错误是这样的。

表是这样创建的

Create table vcelar_pomocky 
(
    cislo_nakupu Number(5,0) NOT NULL ,
    cislo_ula Number(5,0) NOT NULL ,
    rodne_cislo Varchar2 (30) NOT NULL ,
    datum_nakupu Date NOT NULL ,
    nazov Varchar2 (20) NOT NULL ,
    typ_polozky Varchar2 (20) NOT NULL ,
    cena_polozky Number(5,2) NOT NULL ,

    primary key (cislo_nakupu) 
) 
/

程序是这样的。

CREATE OR REPLACE PROCEDURE quera_pomocky
(
v_cislo_nakupu  IN  VCELAR_POMOCKY.cislo_nakupu%TYPE,
v_nazov         OUT VCELAR_POMOCKY.nazov%TYPE,
v_cena_polozky  OUT VCELAR_POMOCKY.cena_polozky%TYPE
)
IS
BEGIN
    SELECT  nazov || ' ' || typ_polozky,cena_polozky
        INTO v_nazov,v_cena_polozky
        FROM VCELAR_POMOCKY
        WHERE v_cislo_nakupu = cislo_nakupu AND rodne_cislo = '750927/3913';
END quera_pomocky;
/

VARIABLE p_nazov VARCHAR2(20);
VARIABLE p_cena_polozky VARCHAR2(20);
EXECUTE quera_pomocky(24, :p_nazov , :p_cena_polozky);
PRINT p_nazov p_cena_polozky;

而错误是

在命令中第65行开始出现错误 - BEGIN quera_pomocky(24, :p_nazov , :p_cena_polozky); END;

错误报告:

ORA-06502: PLSQL: 数字或数值错误 ORA-06512: 在 "DOMA.QUERA_POMOCKY",第9行 ORA-06512: 在第1行 06502. 00000 - "PLSQL: numeric or value error%s" *原因。发生了一个算术、数字、字符串、转换或约束错误。例如,如果试图将值NULL分配给一个声明为NOT NULL的变量,或者试图将一个大于99的整数分配给一个声明为NUMBER(2)的变量,就会发生这个错误。

*操作。改变数据的操作方式或声明方式,使其不违反约束条件。

sql oracle procedure ora-06502
1个回答
3
投票

你把这个:

nazov || ' ' || typ_polozky

进入一个参数

v_nazov OUT VCELAR_POMOCKY.nazov%TYPE

在一个表格中,它被声明为

nazov Varchar2 (20)

所以:如果长度为 nazov || ' ' || typ_polozky 超过 20 字符(请注意:这两个字符在表中都声明为 varchar2(20) 这使得该连接的 MAX 长度 41),你就麻烦了。

我建议你把 OUT 参数,例如

v_nazov OUT varchar2(50)
© www.soinside.com 2019 - 2024. All rights reserved.