当前位置: 首页 > 知识库问答 >
问题:

存储过程中的ORA-06502

符允晨
2023-03-14

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

该表是这样创建的

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;

ORA-06502:PL/SQL:数值或值错误
ORA-06512:at“doma.quera_pomocky”,第9行
ORA-06512:at第1行
06502。00000-“PL/SQL:数值或值错误%s”
*原因:出现算术、数值、字符串、转换或约束错误。例如,如果尝试将值NULL赋给声明为NOT NULL的变量,或者尝试将大于99的整数赋给声明为NUMBER(2)的变量
,则会发生此错误。

*操作:更改数据、操作方式或声明方式,以使值不违反约束。

共有1个答案

帅德惠
2023-03-14

你把这个:

nazov || ' ' || typ_polozky

转换为参数

v_nazov OUT VCELAR_POMOCKY.nazov%TYPE

在表中声明

nazov Varchar2 (20)
v_nazov OUT varchar2(50)
 类似资料:
  • 问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。

  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 这里是我的过程中,我过滤4个参数的数据库: 开始日期、结束日期、小时和分钟。 当我过滤数据之间2017-11-01到2017-11-30(与一个月)它的工作罚款,但当我过滤数据大于1个月,如2017-11-01到2017-12-10然后它给我的错误如下。 程序 错误 ORA-06502:PL/SQL:数字或值错误 ORA-06512:在"MYRENT. RENTEDTOTALCARS",第58行

  • 数据访问层支持存储过程调用,调用数据库存储过程使用下面的方法: $resultSet = Db::query('call procedure_name'); foreach ($resultSet as $result) { } 存储过程返回的是一个数据集,如果你的存储过程不需要返回任何的数据,那么也可以使用execute方法: Db::execute('call procedure_name'

  • 我如何在服务器的另一个存储过程中执行SQL存储过程?我将如何传递第二个过程的参数。?

  • 问题内容: 我是一个拥有6年经验的.net专家。最近,我开始从事ROR项目,并意识到根本没有使用存储过程/ sql函数。在查询它时,我知道这是一种常见的做法,通常团队中没有人编写任何sql查询,所有操作都使用ActiveRecord完成。 我搜索了任何可能的原因,但没有找到太多信息。所以我只是好奇 是否普遍不建议使用存储过程/ sql函数? 使用存储过程的优缺点是什么? 问题答案: 是否普遍不建议