Oracle10g 从键入的集合中选择
如何从Oracle 10g中的键入集进行选择 即从3,5,20,68,54,13,56899,1中选择* 此外,我将如何过滤它Oracle10g 从键入的集合中选择,oracle10g,Oracle10g,如何从Oracle 10g中的键入集进行选择 即从3,5,20,68,54,13,56899,1中选择* 此外,我将如何过滤它 也就是说,从3,5,20,68,54,13,56899,1中选择*其中>5数据来自何处以及您打算如何使用它 如果数据是从文件中读取的,您通常会创建一个外部表来从文件中读取数据,或者使用SQL*Loader或其他一些ETL工具将数据加载到一个临时表或PL/SQL集合中,然后您可以查询该集合 SQL> create type num_tbl is table of n
也就是说,从3,5,20,68,54,13,56899,1中选择*其中>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语句,这些语句都是并集的,但这显然会变得相当麻烦
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字符串,我们可以将字符串解析为表。
例如:
1-10只是我提供的一个随机样本,实际使用情况将非常不同,并且不在可预测的模式中。大约900个9位数。这些数字是从从日志文件中提取的数据中复制和粘贴的。@Malfist-我更新了我的答案,以讨论您在不尝试以编程方式生成数据时的选择。所发生的是出现了一系列提交错误,因此我有一系列需要验证的主键ID,但这些ID实际上不在日志文件中数据库所以第二个建议不起作用。我将编辑你的答案,并将我实际发现的结果付诸实施。你的WTIH和DAUL让我走上了正确的道路,但我找到了更干净的解决方案。
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;