我有一個 postgres 查詢,它從字串值創建一個匿名表,然后像這樣加入它們:
select distinct anon_table.string1,
anon_table.string2,
anon_table.string3,
rt.string4
from real_table rt
right join (values ('asdf', 'asdf', 'asdf'), ('ghjk','ghjk','ghjk')) AS anon_table (string1, string2, string3)
on rt.string1 = anon_table.string1
是否可以在 oracle 資料庫中使用 pl/sql 行內執行此操作?我需要能夠從一堆具有命名列的值創建一個行內匿名表,然后我可以在外部查詢中加入這些列。更希望能夠以這種方式而不是使用臨時表來做到這一點。
uj5u.com熱心網友回復:
如果您SELECT從DUAL表中使用SQL 并UNION ALL用于多行,則可以使用 SQL 來執行此操作:
SELECT DISTINCT
anon_table.string1,
anon_table.string2,
anon_table.string3,
rt.string4
FROM real_table rt
RIGHT OUTER JOIN (
SELECT 'asdf' AS string1, 'asdf' AS string2, 'asdf' AS string3 FROM DUAL
UNION ALL
SELECT 'ghjk','ghjk','ghjk' FROM DUAL
) anon_table
ON rt.string1 = anon_table.string1
或者,使用子查詢因式分解子句:
WITH anon_table (string1, string2, string3) AS (
SELECT 'asdf', 'asdf', 'asdf' FROM DUAL UNION ALL
SELECT 'ghjk','ghjk','ghjk' FROM DUAL
)
SELECT DISTINCT
anon_table.string1,
anon_table.string2,
anon_table.string3,
rt.string4
FROM real_table rt
RIGHT OUTER JOIN anon_table
ON rt.string1 = anon_table.string1
或者你可以在 SQL 范圍內宣告一個物件和一個集合型別:
CREATE TYPE string_triplet AS OBJECT(
string1 VARCHAR2(20),
string2 VARCHAR2(20),
string3 VARCHAR2(20)
);
CREATE TYPE string_triplet_list AS TABLE OF string_triplet;
然后:
SELECT DISTINCT
anon_table.string1,
anon_table.string2,
anon_table.string3,
rt.string4
FROM real_table rt
RIGHT OUTER JOIN TABLE(
string_triplet_list(
string_triplet('asdf', 'asdf', 'asdf'),
string_triplet('ghjk', 'ghjk', 'ghjk')
)
) anon_table
ON rt.string1 = anon_table.string1
db<>在這里擺弄
是否可以在 oracle 資料庫中使用 pl/sql 行內執行此操作?
并非沒有一些困難,因為您不能在 SQL 范圍內使用 PL/SQL 定義的型別。但是您實際上并不需要 PL/SQL,因為您可以在 SQL 中執行它,如上面的示例所示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474660.html
下一篇:加入日期表,帶有臟日期欄位
