Oracle Ora-01722无效号码

Oracle Ora-01722无效号码,oracle,plsql,insert,Oracle,Plsql,Insert,我正在尝试执行插入操作,但收到一个无效的数字错误。 我知道在哪里,但我不知道为什么或如何解决这个问题。我想一切都很好 以下是PL/SQL块: DECLARE L_J_ID NUMBER := J_SEQ.NEXTVAL; BEGIN INSERT INTO some_table (J_ID, E_TABLE_COLUMN, F_TABLE_COLUMN) VALUES (L_J_ID, 'a', 'b'); INSERT INTO CFG_FILTER_JOI

我正在尝试执行插入操作,但收到一个无效的数字错误。 我知道在哪里,但我不知道为什么或如何解决这个问题。我想一切都很好

以下是PL/SQL块:

DECLARE
  L_J_ID NUMBER := J_SEQ.NEXTVAL;
BEGIN

  INSERT INTO some_table
    (J_ID, E_TABLE_COLUMN, F_TABLE_COLUMN)
  VALUES
    (L_J_ID, 'a', 'b');

  INSERT INTO CFG_FILTER_JOIN
    (J_ID, E_TABLE_COLUMN, F_TABLE_COLUMN)
  VALUES
    (L_J_ID, 'c', 'd');
END;
/

DECLARE 
   var NUMBER;
BEGIN
  SELECT ID --number
    INTO var
    FROM some_table
   WHERE F_TABLE_COLUMN = 'a'
     AND E_TABLE_COLUMN = 'b';

  INSERT INTO my_table
    (ID, --in table definition: number(8)
     NAME, --varchar2(30)
     TYPE, --varchar2(30)
     TABLE_name, --varchar2(30)
     J_ID,  --number(8) --here is where I get the invalid number
     COLUMN,  --varchar2(30)
     COLUMN_TYPE, --varchar2(1)
     FILTER_LIST_ID) --number(8)
  VALUES
    (SEQ.NEXTVAL,
     'COL_LIST',
     'JL',
     var,  --here is where I get the invalid number
     'NB_CTL',
     'DEST',
     'V',
     4);
END;
/

怎么了

将insert语句重写为伪代码,您将得到:

INSERT INTO my_table
  (ID             = SEQ.NEXTVAL,
   NAME           = 'COL_LIST',
   TYPE           = 'JL',
   TABLE          = var,
   J_ID           = 'NB_CTL',
   COLUMN         = 'DEST',
   COLUMN_TYPE    = 'V',
   FILTER_LIST_ID = 4)

它的数字J_ID列被分配了一个字符串值“NB_CTL”。

Table是一个保留关键字,用双引号括起Table(“Table”)。并且发生了列不匹配。通过重写plsql块

    DECLARE
          L_J_ID NUMBER := J_SEQ.NEXTVAL;
        BEGIN

          INSERT INTO some_table
            (J_ID, E_TABLE_COLUMN, F_TABLE_COLUMN)
          VALUES
            (L_J_ID, 'a', 'b');

          INSERT INTO CFG_FILTER_JOIN
            (J_ID, E_TABLE_COLUMN, F_TABLE_COLUMN)
          VALUES
            (L_J_ID, 'c', 'd');
        END;
        /

        DECLARE 
           var NUMBER;
        BEGIN
          SELECT ID --number
            INTO var
            FROM some_table
           WHERE F_TABLE_COLUMN = 'a'
             AND E_TABLE_COLUMN = 'b';

          INSERT INTO my_table
            (ID, --in table definition: number(8)
             NAME, --varchar2(30)
             TYPE, --varchar2(30)
             j_id  --number(8)
              "TABLE", --varchar2(30)--here is where I get the invalid number
             COLUMN,  --varchar2(30)
             COLUMN_TYPE, --varchar2(1)
             FILTER_LIST_ID) --number(8)
          VALUES
            (SEQ.NEXTVAL,
           'COL_LIST',
            'JL',
             var,
            'NB_CTL',
             'DEST',
             'V',
              4);

        END;

保留的关键字是:

您从哪里得到错误?什么是
L\u JOIN\u ID
?那是没有申报的。作为最低限度,你应该能够删除一个匿名块你在这里。。。至于原因-您在数字列中插入了一个无效的数字,因此需要检查输入数字列的数据…
L\u JOIN\u ID
未编辑。我在评论中写了错误在哪里,你一定错过了。捕捉得很好,两列顺序错误。。。我错过了。tks