Ниже показано, как я получаю последнее значение идентификатора, когда выполняю вставку, динамически передавая имя столбца идентификатора (потому что я не знаю, как называется идентификатор каждый раз.)
set serveroutput on
/
DROP TABLE TEST_T
/
CREATE TABLE TEST_T
(
TEST_ID NUMBER GENERATED ALWAYS AS IDENTITY ,
NAME VARCHAR2(100)
)
/
DECLARE table_NAME_Id VARCHAR2(100);
trx_id NUMBER(4);
begin
table_NAME_Id:='TEST_ID';
EXECUTE IMMEDIATE '
INSERT INTO TEST_T
(NAME)
VALUES
(''TEST'')
RETURNING '||table_NAME_Id||' INTO :trx_id'
RETURNING INTO trx_id;
dbms_output.put_line('ID: ' || trx_id);
END;
/
COMMIT
/
Однако, если я сделаю это таким образом, это выдаст мне ошибку, может быть, потому что оракул хочет столбец, а я предоставляю переменную? или в чем причина этой ошибки? это мой вопрос и есть ли другой способ решить эту ошибку с помощью функции преобразования, отличной от вышеуказанного способа?
ORA-01722: invalid number
ORA-06512: at line 8
--THE BELOW IS THROWING THE ABOVE ERROR, WHY?
DECLARE table_NAME_Id VARCHAR2(100);
trx_id NUMBER(4);
begin
table_NAME_Id:='TEST_ID';
INSERT INTO TEST_T
(NAME)
VALUES
('TEST')
RETURNING table_NAME_Id INTO trx_id;
dbms_output.put_line('ID: ' || trx_id);
END;
/