如何仅使用一次 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.
我有一个要求,我需要在 PLSQL
块中创建 2 个表。目前我们正在使用 EXECUTE IMMEDIATE
。现在的问题是我需要创建 2 个表,但我只能使用 EXECUTE IMMEDIATE
一次。
有没有办法在 PLSQL
中创建表
1) 不使用 EXECUTE IMMEDIATE
或 2) 在 EXECUTE IMMEDIATE
我试过如下。以及一些试错组合。但没有帮助。 期待如下。
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.