SQL 具有特定数据的开发人员副本 Table

SQL Developer Copy Table with Specific Data

所以我有一个 table 包含 10000 多条记录,标题为 ID、PRODUCT、U、C、ELONG...(还有各种标题)。 此 table 在 PRODUCT 列中有 4 个可能的条目,CAPL、ZOD、HR 和 PKL。我想将其拆分,以便在 SQL 开发人员中有一个 table 仅用于 'CAPL' 数据,仅 ZOD 数据仅 HR 数据和仅 PKL 数据。我有 运行 以下内容:

declare
  l_sql varchar2(32767);
  c_tab_comment varchar2(32767);
  procedure run(p_sql varchar2) as
  begin 
     execute immediate p_sql;

  end; 
begin
run('create table "MP".CAPLAAAA as select * from "MP"."LASTQTTBL" where PRODUCT = "CAPL"');
select comments into c_tab_comment from sys.all_TAB_comments where owner = 'MP' and table_name = 'LASTQTTBL' and comments is not null;
run('comment on table MP.CAPLAAAA is '||''''||REPLACE(c_tab_comment, q'[']', q'['']')||'''');

for tc in (select column_name from sys.all_tab_cols where owner = 'MP' and table_name = 'LASTQTTBL')
    loop
   for c in (select comments from sys.all_col_comments where owner = 'MP' and table_name = 'LASTQTTBL' and column_name=tc.column_name) 
   loop 
   run ('comment on column MP.CAPLAAAA.'||tc.column_name||' is '||''''||REPLACE(c.comments, q'[']', q'['']')||'''');
 end loop;
end loop;
EXCEPTION
  WHEN OTHERS THEN NULL; 
end;

但是没有任何结果,即使在 运行ning 之后它在脚本输出中出现 'PL/SQL procedure successfully completed.'。

我哪里出错了吗?非常感谢您的帮助。

是否需要保留所有table条评论?以下脚本创建与 TEST table 中的产品数量相关的 4 table。

DROP TABLE TEST;
/

CREATE TABLE TEST(A       VARCHAR2(20),
                  B       VARCHAR2(20),
                  C       VARCHAR2(20),
                  D       VARCHAR2(20),
                  PRODUCT VARCHAR2(20)
                  );
/

INSERT INTO TEST VALUES('DATA A', 'DATA B,', 'DATA C', 'DATA D', 'CAPL');
INSERT INTO TEST VALUES('DATA A', 'DATA B,', 'DATA C', 'DATA D', 'CAPL');
INSERT INTO TEST VALUES('DATA A', 'DATA B,', 'DATA C', 'DATA D', 'ZOD');
INSERT INTO TEST VALUES('DATA A', 'DATA B,', 'DATA C', 'DATA D', 'ZOD');
INSERT INTO TEST VALUES('DATA A', 'DATA B,', 'DATA C', 'DATA D', 'HR');
INSERT INTO TEST VALUES('DATA A', 'DATA B,', 'DATA C', 'DATA D', 'HR');
INSERT INTO TEST VALUES('DATA A', 'DATA B,', 'DATA C', 'DATA D', 'PKL');
INSERT INTO TEST VALUES('DATA A', 'DATA B,', 'DATA C', 'DATA D', 'PKL');
/

SET SERVEROUTPUT ON;
DECLARE
    v_Sql VARCHAR2(100);
    v_CodeResp INTEGER;
    v_MsgResp  VARCHAR2(500);
    v_Name VARCHAR2(10);
BEGIN
    FOR x IN (SELECT PRODUCT
                        FROM TEST
                    GROUP BY PRODUCT)
    LOOP
        v_Name := x.PRODUCT;
        v_Sql := 'CREATE TABLE ' || v_Name || 'AAAA AS SELECT A, B, C, D, PRODUCT FROM TEST WHERE PRODUCT = ' || ''''||v_Name||''''; 
        EXECUTE IMMEDIATE(v_Sql);
    END LOOP;

    COMMIT;

    EXCEPTION
        WHEN OTHERS THEN
            v_CodeResp := SQLCODE;
            v_MsgResp := v_CodeResp || ' ' || SUBSTR(SQLERRM, 300);
        DBMS_OUTPUT.PUT_LINE(v_MsgResp);
END;