не может использовать дробь в качестве параметра для процедуры в оракуле - PullRequest
0 голосов
/ 08 июня 2018

Я пишу хранимую процедуру для моего проекта.Хранимая процедура должна обновлять значение.тип этого значения определяется как number(6,3).

моя хранимая процедура выглядит примерно так:

 create procedure procedure_name(id number, length number)
    as a boolean;
BEGIN
update "tablename" tbl
    set "length" = length
where tbl."id" = id;  

    commit;   
END;

Затем я вызываю функцию следующим образом: execute procedure_name(1, 0.8)

Это дает мне ошибку преобразования.Я также пробовал десятичное число, но оно все равно дает ошибку преобразования.Я даже пытался определить параметр следующим образом: tablename.columnname%type, но он не работал

Я получаю сообщение об ошибке:

ORA-06502: PL / SQL: figurerieke foutfout in waarde: ошибка преобразования символа в число.

ORA-06512: в regel 1

00000 - «PL / SQL: ошибка числа или значения% s»

Причина: Произошла ошибка арифметического, числового, строкового преобразования или преобразования ограничения.Например, эта ошибка возникает, если предпринята попытка присвоить значение NULL переменной, объявленной NOT NULL, или если предпринята попытка присвоить целое число больше 99 переменной, объявленной NUMBER (2).

Действие: Измените данные, как они обрабатываются или как они объявлены, чтобы значения не нарушали ограничений.

Можно попытаться использовать следующий фрагмент кода для воссоздания базы данных:

CREATE TABLE "tablename" 
(    
    "id" NUMBER(12,0) NOT NULL ENABLE,  
    "length" NUMBER(6,3)
) SEGMENT CREATION IMMEDIATE 

У кого-нибудь есть идеи, почему это не работает?

С уважением

EDIT

Вызов процедуры из моего приложения работает.Непосредственный вызов этого в SQL не удается, но кажется, что вызов процедуры с использованием C # работает.Мое приложение работает в ASP.NET Core, и я сопоставляю двойное значение с OracleDbType.Double

1 Ответ

0 голосов
/ 08 июня 2018

Я могу воспроизвести ошибку:

CREATE TABLE t (n NUMBER);
INSERT INTO t VALUES (10);

CREATE OR REPLACE PROCEDURE p (p_n NUMBER) AS
BEGIN 
  UPDATE t SET n=p_n;
END p;
/

-- ok:
exec p(8/10);
PL/SQL procedure successfully completed.

-- ok:
DECLARE
  y NUMBER := 0.8;
BEGIN
  p(y);
END;
/
PL/SQL procedure successfully completed.

--error:
exec p(0.8);

ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 1
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.

(Oracle 11.2.0.4.0 EE 64bit)

...