Процедура Oracle - выберите все таблицы и зациклите записи этих таблиц - PullRequest
0 голосов
/ 18 мая 2018

Я получил все таблицы из моей базы данных, которая начинается с "FULLTEXTLOOKTABLE_%". Теперь я хочу просмотреть все эти таблицы.Выберите каждую запись из этих таблиц и сохраните данные в 4 переменных.Затем удалите эту конкретную строку в таблице. Вставьте в таблицу, используя данные из этих четырех переменных.

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

Код, который я написал до сих пор:

create or replace PROCEDURE "Update"(name_in IN varchar2 )
AS 
  iID       NUMBER(10,0); 
  FullTextDetails     VARCHAR2(4000 BYTE); 
  Regex VARCHAR2(4000 BYTE); 
  MinMatch   NUMBER(10,0); 
BEGIN
  FOR c IN ( SELECT table_name FROM user_tables WHERE table_name LIKE 'FULLTEXTLOOKTABLE_%' )
  LOOP
    // Loop Throgh all records of c.table_name
    // insert the data into iID, FullTextDetails,Regex,MinMatch
    //Delete that row 
    //Insert it again using the data in variables
  END LOOP;
END;

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

вы можете попробовать что-то подобное, но для этого вам нужно создать процедуру, которая возвращает ссылочный курсор

create or replace PROCEDURE "Update"(name_in IN varchar2 )
AS 
  iID       NUMBER(10,0); 
  FullTextDetails     VARCHAR2(4000 BYTE); 
  Regex VARCHAR2(4000 BYTE); 
  MinMatch   NUMBER(10,0); 
  TYPE cur_type IS REF CURSOR;
  tmp_cursor cur_type;
BEGIN
  FOR c IN ( SELECT table_name FROM user_tables WHERE table_name LIKE 'FULLTEXTLOOKTABLE_%' )
  LOOP
    tmp_cursor := prc_that_returns_ref_cursor(table_name);
    //Delete the data from table
    FOR tmp_cursor_rec IN tmp_cursor LOOP
        //Insert it again using the data in tmp_cursor_rec.column name
    END LOOP;
END;
0 голосов
/ 18 мая 2018

Вместо обработки записи по записи, вы можете сделать это на уровне таблицы.

Создайте новую таблицу tab_dest, имеющую ту же структуру, что и исходная таблица tab_src, включая следующие данные -

CREATE TABLE TAB_DEST AS
SELECT * FROM TAB_SRC;

Сократите исходную таблицу как -

TRUNCATE TABLE TAB_SRC;

Вставитьзаписи из TAB_DEST обратно в TAB_SRC с указанием порядка столбцов -

INSERT INTO TAB_SRC(COL1, COL2, COL3)
SELECT COL1, COL3 AS COL2, COL2 AS COL3
FROM TAB_DEST;

Надеюсь, это работает для вас.

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