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); 结尾;

错误报告:

ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "DOMA.QUERA_POMOCKY", line 9
ORA-06512: at line 1
06502. 00000 - "PL/SQL: numeric or value error%s"
*原因: 发生算术、数字、字符串、转换或约束错误。例如,如果尝试将值 NULL 分配给声明为 NOT NULL 的变量,或者尝试将大于 99 的整数分配给
声明为 NUMBER(2) 的变量,则会发生此错误。

*行动:改变数据,如何操作,或如何声明,使值不违反约束。

4

1 回答 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)
于 2020-05-03T10:55:15.643 回答