【发布时间】:2018-02-04 22:12:46
【问题描述】:
我正在创建一些过程和函数来简化插入、删除或更新行的任务。 我的问题可能听起来很傻,因为肯定有我遗漏的东西。
每当我尝试将十进制值作为参数传递给过程或函数时,都会出错。
ORA-06502:PL/SQL:数字或值错误:字符到数字的转换错误
下一个代码不是功能性的,而是显示问题的一种方式。
CREATE OR REPLACE FUNCTION test1(num1 NUMBER)
RETURN NUMBER IS
BEGIN
RETURN num1;
END;
/
SET SERVEROUTPUT ON;
DECLARE
numVar NUMBER;
BEGIN
numVar:= 2.1;
DBMS_OUTPUT.PUT_LINE('Raw Number: '||numVar);
/***********Calling test1*************/
DBMS_OUTPUT.PUT_LINE('Function Number: '|| test1(2.1));
END;
/
有些输出是西班牙语,但大部分是英语。
Function TEST1 compilado
Raw Number: 2,1
Error que empieza en la línea: 8 del comando :
DECLARE
numVar NUMBER;
BEGIN
numVar:= 2.1;
DBMS_OUTPUT.PUT_LINE('Raw Number: '||numVar);
DBMS_OUTPUT.PUT_LINE('Function Number: '|| test1(2.1));
END;
Informe de error -
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 6
06502. 00000 - "PL/SQL: numeric or value error%s"
*Cause: An arithmetic, numeric, string, conversion, or constraint error
occurred. For example, this error occurs if an attempt is made to
assign the value NULL to a variable declared NOT NULL, or if an
attempt is made to assign an integer larger than 99 to a variable
declared NUMBER(2).
*Action: Change the data, how it is manipulated, or how it is declared so
that values do not violate constraints.
当我调用函数时,没有十进制参数,我没有麻烦。
/***********Calling test1*************/
DBMS_OUTPUT.PUT_LINE('Function Number: '|| test1(2));
输出
Function TEST1 compilado
Raw Number: 2,1
Function Number: 2
如果我传递一个变量而不是一个原始十进制数,我也不会遇到任何问题,我实际上可以使用一个十进制数,但是创建一个插入的过程对我来说意义不大需要定义变量作为参数传递的数据
/***********Calling test1*************/
DBMS_OUTPUT.PUT_LINE('Function Number: '|| test1(numVar));
输出
Function TEST1 compilado
Raw Number: 2,1
Function Number: 2,1
我想了解为什么我不能将原始十进制数作为参数传递,也许我不太了解 Oracle 在将数据作为参数引入之前转换数据的方式。
【问题讨论】:
-
所有输出的来源是相同的代码,但改变了 test1(num1 NUMBER) 的输入
-
无法重现您的问题。如果将
DBMS_OUTPUT.PUT_LINE('Function Number: '|| test1(2.1));替换为DBMS_OUTPUT.PUT_LINE('Function Number: '|| to_char(test1(2.1)));会发生什么? -
这个 SQL Fiddle 显示,your problem cannot be reproduced using just Oracle engine.
标签: sql oracle stored-procedures oracle11g oracle-sqldeveloper