ORA-06502: PL / SQL: ошибка числа или значения: ошибка преобразования символа в число появляется при первом вызове - PullRequest
0 голосов
/ 23 марта 2012

У меня есть процедура ниже pl / sql

PROCEDURE insert_p(
                p_batch_rec  IN  ra_batches%rowtype,
                p_batch_id   OUT NOCOPY ra_batches.batch_id%type,
                p_name       OUT NOCOPY ra_batches.name%type
              )

batch_id - НОМЕР (18,0), а p_name - VARCHAR2 (50 CHAR)

Я вызываю процедуру с

insert_p (l_batch_rec, p_batch_id, p_name); 

где p_batch_id: = NULL и p_name: = NULL

Я получаю ошибку преобразования только при первом запуске процедуры. Если я снова запускаюсь без изменений, он работает нормально. Чтобы воспроизвести ошибку, я отключаюсь и подключаюсь снова.

Есть идеи, почему возникает эта ошибка и как мне ее устранить ???

1 Ответ

1 голос
/ 24 марта 2012

Произошла ли ошибка в части инициализации пакета, который используется функцией?

Вы сможете легко найти, где именно происходит ошибка.По умолчанию Oracle отобразит объект и номер строки ошибки.(Хотя, к моему большому разочарованию, я нахожу, что люди очень часто пишут when others then [poor logging that throws out line number].)

SQL> --Create package
SQL> create or replace package test_package is
  2     procedure test_procedure;
  3     conversion_error number;
  4  end;
  5  /

Package created.

SQL> --Create package body.  Note the initialization part that will fail.
SQL> create or replace package body test_package is
  2     procedure test_procedure is
  3     begin
  4             null;
  5     end;
  6  begin
  7     conversion_error := 'This is not a number';
  8  end;
  9  /

Package body created.

SQL> --This will fail the first time
SQL> begin
  2     test_package.test_procedure;
  3  end;
  4  /
begin
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at "JHELLER.TEST_PACKAGE", line 7
ORA-06512: at line 2


SQL> --But will now work until you reconnect, or run DBMS_SESSION.RESET_PACKAGE.
SQL> begin
  2     test_package.test_procedure;
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...