我从我的数据库中获得了以" FULLTEXTLOOKTABLE _%"开头的所有表格。 现在我想循环所有这些表。 从这些表中选择每个记录并将数据存储在4个变量中。 然后删除表中的特定行 使用这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;
答案 0 :(得分:0)
您可以在表级执行此操作,而不是按记录处理记录。
创建一个新表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;
希望这适合你。
答案 1 :(得分:0)
你可以尝试这样的东西但是这样,你需要创建一个返回引用光标的过程
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;