У меня есть таблица, и я хочу создать ее копию. Но я хочу, чтобы эта копия была динамичной. Первая таблица может измениться. В FOR LOOP для каждого i (кроме 1) я хочу изменить вторую таблицу и добавить столбец с именем «Col» + «i». Пример: Col1, Col2, Col3. При отладке все в порядке, за исключением этой строки: EXECUTE IMMEDIATE 'ALTER TABLE '||tab_name||' ADD Col'||i||' NUMBER(2)';
, которая выдает 2 ошибки: «ORA-01403: данных не найдено» и «ORA-06512» Что я делаю неправильно? Спасибо!Выполнить немедленную ошибку «alter table» pl/sql
CREATE TABLE first_table (
id NUMBER(2,0) NOT NULL PRIMARY KEY,
col1 NUMBER(2,0) NOT NULL,
col2 NUMBER(2,0) NOT NULL,
col3 NUMBER(2,0) NOT NULL,
col4 NUMBER(2,0) NOT NULL,
col5 NUMBER(2,0) NOT NULL,
col6 NUMBER(2,0) NOT NULL,
col7 NUMBER(2,0) NOT NULL
);
CREATE TABLE second_table (
first_col NUMBER PRIMARY KEY
);
CREATE OR REPLACE PROCEDURE second_table
AS
nr_columns NUMBER(2);
tab_name VARCHAR2(20);
col_nam VARCHAR2(20) := 'COL';
BEGIN
SELECT COUNT (*)
INTO nr_columns
FROM user_tab_columns
WHERE table_name='FIRST_TABLE';
SELECT table_name
INTO tab_name
FROM user_tab_columns
WHERE column_name ='FIRST_COL';
FOR i IN 1..NR_COLUMNS
LOOP
IF (i=1) THEN
EXECUTE IMMEDIATE 'ALTER TABLE '||tab_name||' RENAME COLUMN FIRST_COL TO id';
ELSE
EXECUTE IMMEDIATE 'ALTER TABLE '||tab_name||' ADD Col'||i||' NUMBER(2)';
END IF;
END LOOP;
END;
/
Извините, я допустил ошибку. Строка 11 выглядит так: WHERE table_name = 'FIRST_TABLE'; и он возвращает 8 столбцов. – XhensB
Укажите инструкцию create для first_table. –
Я обновил код. Посмотрите пожалуйста – XhensB