【问题标题】:Can we define a variable which contains the range of values in Oracle SQL Developer?我们可以在 Oracle SQL Developer 中定义一个包含值范围的变量吗?
【发布时间】:2016-03-16 09:39:45
【问题描述】:

Here我找到了如何在 Oracle SQL Developer 中定义变量。

但是我们能以某种方式定义值的范围吗?

我需要这样的东西:

define my_range = '55 57 59 61 67 122'; 
delete from ITEMS where ITEM_ID in (&&my_range);

【问题讨论】:

  • 不知道 oracle 处理 XML 的能力,但您可能会使用像 <root><prm value="55"/><prm value="57"/> [...] </root> 这样的 XML 参数 在 SQL Server 中,使用 .nodes() 获取派生表非常容易
  • @MT0 不。我的问题不同。

标签: sql oracle range


【解决方案1】:

实际上,如果您将逗号放在列表中,它将起作用,因为您使用的是替换参数(不是绑定变量):

define my_range = '55, 57, 59, 61, 67, 122'; 
delete from ITEMS where ITEM_ID in (&&my_range);

【讨论】:

    【解决方案2】:

    使用集合:

    CREATE TYPE INT_TABLE AS TABLE OF INT;
    /
    

    那么你可以这样做:

    DEFINE my_range = '55,57,59,61,67,122';
    DELETE FROM   items
    WHERE  ITEM_ID MEMBER OF INT_TABLE( &&my_range );
    

    示例

    CREATE TABLE ITEMS ( ITEM_ID ) AS
    SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 150;
    
    DEFINE my_range = '55,57,59,61,67,122';
    DELETE FROM items WHERE ITEM_ID MEMBER OF INT_TABLE( &&my_range );
    

    输出

    Table ITEMS created.
    
    old:DELETE FROM items WHERE ITEM_ID MEMBER OF INT_TABLE( &&my_range );
    new:DELETE FROM items WHERE ITEM_ID MEMBER OF INT_TABLE( 55,57,59,61,67,122 );
    
    6 rows deleted.
    

    【讨论】:

      【解决方案3】:

      您可以使用 LIKE 并更改包含变量的方式。像这样:

      define my_range = ',55,57,59,61,67,122,'; 
      delete from ITEMS
      where $$my_range like ('%,' || ITEM_ID || ',%');
      

      【讨论】:

      • 也许只有以下方法可以工作:define my_range = '55,57,59,61,67,122'; delete from ITEMS where ITEM_ID in (&amp;&amp;my_range);?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多