如何仅使用一次 EXECUTE IMMEDIATE 创建 2 个表?

How to create 2 tables using EXECUTE IMMEDIATE only once?

我有一个要求,我需要在 PLSQL 块中创建 2 个表。目前我们正在使用 EXECUTE IMMEDIATE。现在的问题是我需要创建 2 个表,但我只能使用 EXECUTE IMMEDIATE 一次。

有没有办法在 PLSQL 中创建表 1) 不使用 EXECUTE IMMEDIATE 或 2) 在 EXECUTE IMMEDIATE

的单次使用中创建 2 个表

我试过如下。以及一些试错组合。但没有帮助。 期待如下。

EXECUTE IMMEDIATE 
'BEGIN
  CREATE TABLE NEW_TABLE1 AS
  SELECT T1.*,
    ''Y'' PROCESS_FLAG
  FROM TABLE1 T1
  WHERE T1.PRIMAR_ID IN ( 300000005137174 ,300000005142005);
  CREATE TABLE NEW_TABLE2 AS
  SELECT T2.*,
    ''Y'' PROCESS_FLAG
  FROM TABLE2 T2
  WHERE T2.CODE       IS NULL
  AND T2.SECONDARY_ID IN
    (SELECT DISTINCT(T_TEMP.PRIMAR_ID)
    FROM NEW_TABLE1 T_TEMP
    WHERE T_TEMP.PROCESS_FLAG = ''Y''
    );
END' ;

我承认这不是很好,但你可以在 execute immediate:

plsql 块中 运行 多个 execute immediate
begin
    execute immediate '
        begin
            execute immediate ''create table a(c number)'';
            execute immediate ''create table b(c number)'';
        end;
    ';
end;

编辑:

根据您的评论,您可以运行以下内容。

begin
    execute immediate '
        BEGIN 
            execute immediate ''
                CREATE TABLE NEW_TABLE1 AS 
                SELECT T1.*, ''''Y'''' PROCESS_FLAG
                FROM TABLE1 T1 
                WHERE T1.PRIMAR_ID IN ( 300000005137174 ,300000005142005)
            '';

            execute immediate ''
                CREATE TABLE NEW_TABLE2 AS 
                SELECT T2.*, ''''Y'''' PROCESS_FLAG
                FROM TABLE2 T2
                WHERE T2.CODE IS NULL 
                AND T2.SECONDARY_ID IN (
                    SELECT distinct(T_TEMP.PRIMAR_ID)
                    FROM NEW_TABLE1 T_TEMP
                    WHERE T_TEMP.PROCESS_FLAG = ''''Y''''
                )
            ''; 
        END;
    ';
end;

此外,您可能需要重新考虑您的问题。你真的需要创建table吗?你能不能不事先创建 tables 而只做简单的插入。可以绕过动态SQL.