【发布时间】:2016-01-07 09:06:03
【问题描述】:
首先,我有 3 个架构如下(MEDICINE、MEDICINE1、MEDICINE2)。 MEDICINE 和 MEDICINE1 有相同的表,MEDICINE 有更新数据,MEDICINE1 有旧数据。我有 MEDICINE2 没有表格,所以我想在 MEDICINE2 中创建表格作为从 MEDICINE 中选择而不在 MEDICINE1 >.
例如。 create MEDICINE2.table1 as ( select * from MEDICINE.table1 minus select * MEDICINE1.table1 )
因此,如果架构 MEDICINE 中的 table1 有数据 (1,2,3,4,5,6) 而 MEDICINE1 有 (1,2,3,4) 那么 table1 将在 MEDICINE2 中创建数据 (5,6)
因为我有很多表,所以我创建了这个过程:
CREATE OR REPLACE PROCEDURE SYSTEM.create_table_from_schema IS
TYPE own_array IS TABLE OF VARCHAR2(40)
INDEX BY binary_integer;
TYPE tab_array IS TABLE OF VARCHAR2(40)
INDEX BY binary_integer;
v_dml_str VARCHAR2 (400);
v_own_array own_array;
v_tab_array tab_array;
BEGIN
SELECT owner,table_name,BULK COLLECT
INTO v_own_array,v_tab_array
from SYS.all_tables
where global_stats='YES'
And owner = 'MEDICINE';
FOR i IN v_tab_array.first..v_tab_array.last LOOP
v_dml_str := 'Create table MEDICINE2.'
||v_tab_array(i)||'as (select * from '||v_own_array(i)||'.'|| v_tab_array(i)
||' minus select * from MEDICINE1.'|| v_tab_array(i)||' )' ;
EXECUTE IMMEDIATE v_dml_str;
END LOOP;
END;
/
但有错误会显示
PROCEDURE SYSTEM.CREATE_TABLE_FROM_SCHEMA 在线:11 PL/SQL: ORA-00904: "BULK": 无效标识符
程序是否有错误?
感谢和尊重,
【问题讨论】:
-
在 SELECT 语句中删除
,之前的逗号BULK COLLECT -
谢谢@Hawk,我没看到。现在它的工作
-
@hawk 现在当我尝试执行时会显示错误,ORA-00904: : invalid identifier ORA-06512: at "SYSTEM.CREATE_TABLE_FROM_SCHEMA", line 22 ORA-06512: at line 2
标签: sql oracle plsql procedure