Oracle10g 从键入的集合中选择

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

如何从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 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;