0
如何從Oracle 10g中的類型集中進行選擇?從打印的集合中選擇
I.E. SELECT * FROM (3,5,20,68,54,13,56,899,1)
此外,我將如何過濾它?
I.E. SELECT * FROM (3,5,20,68,54,13,56,899,1) WHERE > 5
如何從Oracle 10g中的類型集中進行選擇?從打印的集合中選擇
I.E. SELECT * FROM (3,5,20,68,54,13,56,899,1)
此外,我將如何過濾它?
I.E. SELECT * FROM (3,5,20,68,54,13,56,899,1) WHERE > 5
數據從哪裏來,您打算如何處理它?
如果正在從文件中讀取數據,通常需要創建一個外部表來從文件中讀取數據,或使用SQL * Loader或其他ETL工具將數據裝載到臨時表或PL/SQL集合中你可以再查詢
SQL> create type num_tbl is table of number;
2/
Type created.
SQL> ed
Wrote file afiedt.buf
1 declare
2 l_nums num_tbl := num_tbl(3, 5, 20, 68, 54);
3 begin
4 for x in (select * from table(l_nums))
5 loop
6 dbms_output.put_line(x.column_value);
7 end loop;
8* end;
SQL>/
3
5
20
68
54
如果你正在做某種手工工藝,你通常會從另一個表尋找數據,即
SELECT *
FROM some_other_table
WHERE some_key IN (3, 5, 20, 68, 54, 13, 56, 889, 1);
如果你真的想產生一個充滿任意數據的數據集,這些數據是從你不知道的文件中提取的螞蟻使用Oracle閱讀,你總是可以做一系列來自DUAL
的SELECT
陳述,它們都是UNION ALL
'd在一起,但是這顯然變得相當麻煩。
WITH sample_data
AS (SELECT 3 num FROM dual UNION ALL
SELECT 5 FROM dual UNION ALL
SELECT 20 FROM dual UNION ALL
SELECT 68 FROM dual UNION ALL
SELECT 54 FROM dual UNION ALL
...
SELECT 1 FROM dual)
SELECT *
FROM sample_data
WHERE num > 5;
此外,使用WITH子句和CSV字符串我們可以將字符串解析爲表。 實施例:
VARIABLE liste VARCHAR2(100)
EXECUTE :liste := '5, 25, 41, 52';
WITH liste AS (
SELECT SUBSTR(:liste, INSTR(','||:liste||',', ',', 1, rn),
INSTR(','||:liste||',', ',', 1, rn+1) -
INSTR(','||:liste||',', ',', 1, rn)-1) valeur
FROM (
SELECT ROWNUM rn FROM DUAL
CONNECT BY LEVEL<=LENGTH(:liste) - LENGTH(REPLACE(:liste,',',''))+1))
SELECT TRIM(valeur)
FROM liste;
1-10只是我提供的隨機樣本,實際使用將是非常在可預測的模式非常不同和不。它大約有900個9位數字。數據正在從日誌文件中提取的數據中複製和粘貼。 – Malfist 2012-01-03 19:44:31
@Malfist - 我更新了我的答案,以討論您的選擇,如果您不試圖以編程方式生成數據。 – 2012-01-03 20:05:17
發生了什麼是有一堆提交錯誤,所以我有一堆應該是我需要驗證的主鍵ID實際上不在數據庫中。所以第二個建議是行不通的。 – Malfist 2012-01-03 20:59:20