создать имя таблицы с другим столбцом таблицы и порядковым номером оракула - PullRequest
0 голосов
/ 30 октября 2018

Создание процедуры чистого журнала, которая ежедневно удаляет и вставляет в таблицу резервного копирования, что мне нужно сделать, чтобы после того, как таблица резервного копирования достигла определенного числа строк, я хочу, чтобы моя задача (процедура) создала новую таблицу с те же поля.

Итак, у меня есть таблица конфигурации с таблицами, которые мне нужны для резервного копирования, и у меня есть столбец с именем pre_bck, в котором есть имя, которое я хочу иметь в своей резервной таблице.

Итак, я хочу попробовать создать процедуру, которая создаст таблицу из этого 'column'+the sequence number

create table 'column_name'+sequence_id as select * from xyz where 1=0;

так, например, если имя таблицы было abc, а id секвенции было 3, имя таблицы было бы abc3

Я не знаю, если бы мне было ясно, в отношении того, что я притворяюсь реализовывать, любая помощь будет оценена.

1 Ответ

0 голосов
/ 30 октября 2018

Я второе мнение Алекса и Бониста о том, что это, вероятно, не очень хороший подход.

Однако, чтобы ответить на ваш вопрос:

Оператор для склеивания различных битов строки - ||, а не +, как в других языках: column_name || sequence_id.

Чтобы выполнить SQL изнутри процедуры, вы можете использовать EXECUTE IMMEDIATE 'CREATE ...';

Чтобы выбрать последовательность, вам нужно создать ее с помощью CREATE SEQUENCE my_sequence;. Чтобы получить значение: my_sequence.nextval.

Самый простой способ перебрать все строки в вашей таблице конфигурации - это FOR IN ... LOOP:

CREATE OR REPLACE PROCEDURE my_procedure IS
  stmt VARCHAR2(32000);
BEGIN
  FOR r IN (SELECT * FROM my_config_table ORDER BY xxx) LOOP
    stmt := 'CREATE TABLE ' || pre_bck || my_sequence.nextval || 
            ' AS SELECT * FROM xyz WHERE 1=0';
    EXECUTE IMMEDIATE stmt;
  END LOOP;
END my_procedure;
/

Мне не ясно, что означает деталь xyz, но вы, конечно, можете взять ее отсюда ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...