作业-ORACLE-问题-升级版本后的ORA-01722



我将ORACLE升级到19版。并且自动任务停止工作——然而,手动过程调用工作正常,而自动任务执行工作不正常。

我收到一个错误:"ORA-01722:无效编号ORA-06512,第4行">

我有一个表:TEST_table(字段名是示例(:

  1. Test1 varchar(16字节(
  2. Test2编号
  3. Test3编号
  4. Test4编号
  5. Test5编号
  6. Test6时间戳(6(

我的程序:

create or replace TEST_PROCEDURE AS
BEGIN
execute immediate 'TRUNCATE TABLE TEST_TABLE';
INSERT INTO TEST_TABLE ( Test1, Test2, Test3, Test4, Test5, Test6 ) 
SELECT Test1, Test2, Test3, Test4, Test5, sysdate FROM TABLE_TEST_DATA;
END;

如上所述,如果我手动运行它,它可以工作,如果在任务中,它不工作。

问题出在ORACLE 19上。版本12很好。

原因可能是什么?这个错误代码表示字符转换,但在我的情况下,在这个背景下没有错误。

谢谢。

С检查参数NLS_DATABASE_PARAMETERS, NLS_INSTANCE_PARAMETERS, NLS_SESSION_PARAMETERS

SQL> SELECT 'Database nls_numeric_characters = "' || VALUE || '"'
2    FROM NLS_DATABASE_PARAMETERS
3  WHERE PARAMETER = 'NLS_NUMERIC_CHARACTERS'
4  UNION ALL
5  SELECT 'Instance nls_numeric_characters = "' || VALUE || '"'
6    FROM NLS_INSTANCE_PARAMETERS
7  WHERE PARAMETER = 'NLS_NUMERIC_CHARACTERS'
8  UNION ALL
9  SELECT 'Session nls_numeric_characters = "' || VALUE || '"'
10    FROM NLS_SESSION_PARAMETERS
11  WHERE PARAMETER = 'NLS_NUMERIC_CHARACTERS';
'DATABASENLS_NUMERIC_CHARACTERS="'||VALUE||'"'
-------------------------------------------------------------------
Database nls_numeric_characters = ".,"
Instance nls_numeric_characters = ""
Session nls_numeric_characters = ",."

您需要添加正确的NLS_NUMERIC_CHARACTERSEXECUTE IMMEDIATE 'alter session set NLS_NUMERIC_CHARACTERS = '',.''';或设置正确的NLS_DATABASE_PARAMETERS.

CREATE TABLE DEMIN.TABLE_TEST_DATA
(
TEST1    VARCHAR2 (28),
TEST2    VARCHAR2 (28),
TEST3    VARCHAR2 (28),
TEST4    VARCHAR2 (28),
TEST5    VARCHAR2 (28)
);
CREATE TABLE DEMIN.TEST_TABLE
(
TEST1    NUMBER (28, 4),
TEST2    NUMBER (28, 4),
TEST3    NUMBER (28, 4),
TEST4    NUMBER (28, 4),
TEST5    NUMBER (28, 4),
TEST6    DATE
);
INSERT INTO DEMIN.TABLE_TEST_DATA VALUES('1,5','1,5','1,5','1,5','1,5');
COMMIT;
CREATE OR REPLACE PROCEDURE DEMIN.TEST_PROCEDURE
AS
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE TEST_TABLE';
EXECUTE IMMEDIATE 'alter session set  NLS_NUMERIC_CHARACTERS = '',.''';
INSERT INTO DEMIN.TEST_TABLE (TEST1, TEST2, TEST3, TEST4, TEST5, TEST6)
SELECT TEST1, TEST2, TEST3, TEST4, TEST5, SYSDATE
FROM DEMIN.TABLE_TEST_DATA;
COMMIT;
END;

SQL> TRUNCATE TABLE TEST_TABLE;
Table truncated.
SQL> SELECT Test1, Test2, Test3, Test4, Test5, sysdate FROM TEST_TABLE;
no rows selected
SQL> SELECT Test1, Test2, Test3, Test4, Test5, sysdate FROM TABLE_TEST_DATA;
TEST1                        TEST2                        TEST3                        TEST4                        TEST5                        SYSDATE
---------------------------- ---------------------------- ---------------------------- ---------------------------- ---------------------------- ---------
1,5                          1,5                          1,5                          1,5                          1,5                          11-JAN-22
SQL> select 5/10 from dual;
5/10
----------
,5
SQL> alter session set  NLS_NUMERIC_CHARACTERS = '.,';
Session altered.
SQL> select 5/10 from dual;
5/10
----------
.5
SQL> exec TEST_PROCEDURE;
PL/SQL procedure successfully completed.
SQL> SELECT Test1, Test2, Test3, Test4, Test5, sysdate FROM TEST_TABLE;
TEST1      TEST2      TEST3      TEST4      TEST5 SYSDATE
---------- ---------- ---------- ---------- ---------- ---------
1,5        1,5        1,5        1,5        1,5 11-JAN-22
SQL> alter session set  NLS_NUMERIC_CHARACTERS = '.,';
Session altered.
SQL> SELECT Test1, Test2, Test3, Test4, Test5, sysdate FROM TEST_TABLE;
TEST1      TEST2      TEST3      TEST4      TEST5 SYSDATE
---------- ---------- ---------- ---------- ---------- ---------
1.5        1.5        1.5        1.5        1.5 11-JAN-22
SQL>

最新更新