Не использовать динамический c SQL; просто используйте обычную SQL вставку:
DECLARE
v_insSql varchar2(1000);
v_table_name varchar2(50):='TEMP_TBL';
v_row Table_T1%ROWTYPE;
BEGIN
SELECT * INTO v_row FROM Table_T1 WHERE ROWNUM = 1;
INSERT INTO temp_tbl VALUES v_row;
END;
/
Итак, для некоторых примеров таблиц / данных:
CREATE TABLE table_t1 ( a NUMBER, b NUMBER, c NUMBER );
INSERT INTO table_t1 ( a, b, c ) VALUES ( 1, 2, 3 );
CREATE TABLE temp_tbl AS SELECT * FROM table_t1 WHERE 1 = 0;
Тогда:
SELECT * FROM temp_tbl;
Выходы:
A | B | C
-: | -: | -:
1 | 2 | 3
дБ <> скрипка здесь
Если вы хотите иметь динамический c стол имена, а затем занести в белый список таблицы, чтобы вам не приходилось использовать Dynami c SQL:
DECLARE
v_insSql varchar2(1000);
v_table_name varchar2(50):='TEMP_TBL';
v_row Table_T1%ROWTYPE;
BEGIN
SELECT * INTO v_row FROM Table_T1 WHERE ROWNUM = 1;
IF v_table_name = 'TEMP_TBL' THEN
INSERT INTO temp_tbl VALUES v_row;
ELSIF v_table_name = 'TABLE_T1' THEN
INSERT INTO table_t1 VALUES v_row;
END IF;
END;
/
db <> fiddle здесь