我有兩個表格,sprockets
和cogs
。從臨時表格插入
create table sprockets(
id NUMBER
);
INSERT into sprockets VALUES (4);
INSERT into sprockets VALUES (8);
INSERT into sprockets VALUES (15);
INSERT into sprockets VALUES (16);
INSERT into sprockets VALUES (23);
INSERT into sprockets VALUES (42);
create table cogs(
id NUMBER
);
我想從sprockets
採取一些IDS並付諸cogs
。
insert into cogs select id from sprockets s where s.id < 40 and MOD(s.id, 3) != 0;
這增加鏈輪4,8,16,23,以按預期cogs
。
4 rows inserted
隨着我的鏈輪製造業務的增長,確定哪些鏈輪需要齒輪的業務邏輯將變得更加複雜。所以我想用一系列臨時表格來過濾非候選鏈輪。我相信這比沒有評論的單線聲明更可維持。
--sprockets with ids greater than 40 are too big to frob,
--so it's impossible to weld a cog to them
with frobbableSprockets as(
select id from sprockets where sprockets.id < 40
),
--non-greppable sprockets have built-in harmonic oscillators,
--so cogs are not required
greppableFrobbableSprockets as(
select id from frobbableSprockets f where MOD(f.id,3) != 0
),
--not pictured: more filtering using arcane business logic,
--including but not limited to:
--whether it is raining on a tuesday,
--and if the moon is in the seventh house.
--sprockets with ids less than 3 are from the legacy system and already have cogs
sprocketsRequiringCogs as(
select id from greppableFrobbableSprockets f where f.id > 3
)
insert into cogs select id from sprocketsRequiringCogs
此代碼相對可讀,但不幸的是它不起作用!
insert into cogs select id from sprocketsRequiringCogs
Error at Command Line:18 Column:2
Error report:
SQL Error: ORA-00928: missing SELECT keyword
如果我改變最後一行select id from sprocketsRequiringCogs
,沒有錯誤,所以我知道這個問題必須在INSERT語句而不是在臨時表的聲明。
單行插入語句起作用,多行插入語句不起作用。我看到的唯一區別是後者從臨時表中獲取其值。
爲什麼我無法從臨時表中插入行?
請不要在查詢中使用'*'。 –
好點,我把它們拿出來了。 – Kevin