首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle将框的大小与引用进行比较

Oracle将框的大小与引用进行比较
EN

Stack Overflow用户
提问于 2018-03-29 09:49:44
回答 3查看 20关注 0票数 1

我有一张桌子,里面有盒子的尺寸,长度,宽度和高度。我想把这个盒子和一个参考框进行比较,看看这个盒子是否比参考箱大,并输出给每个盒子,看看这个盒子是否大。

假设长度、宽度和高度分别为4、6和2。在这种情况下,由于(2,4,6) < ( 3,5 , 8 ),方框比基准小。

因此,基本上,我必须比较有序盒维数和有序给定维数。有没有办法用甲骨文做这件事?

我已经遇到了最大和最小的函数,但是我不能用这些方法来比较中间维。

EN

回答 3

Stack Overflow用户

发布于 2018-03-29 10:05:03

你可以这样做:

代码语言:javascript
复制
CREATE OR REPLACE TYPE NUMBER_TABLE_TYPE AS TABLE OF NUMBER;


DECLARE
    refBox NUMBER_TABLE_TYPE := NUMBER_TABLE_TYPE(4,6,2);
    inBox NUMBER_TABLE_TYPE := NUMBER_TABLE_TYPE(3,5,8);

    sortedRefBox NUMBER_TABLE_TYPE;
    sortedInBox NUMBER_TABLE_TYPE;

    fitting BOOLEAN := TRUE;

BEGIN

    IF refBox.count <> 3 OR inBox.count <> 3 THEN
        RAISE VALUE_ERROR;      
    END IF;

    SELECT COLUMN_VALUE 
    BULK COLLECT INTO sortedRefBox 
    FROM TABLE(refBox)
    ORDER BY COLUMN_VALUE;

    SELECT COLUMN_VALUE 
    BULK COLLECT INTO sortedinBox
    FROM TABLE(inBox)
    ORDER BY COLUMN_VALUE;

    FOR i IN 1..3 LOOP
        fitting := fitting AND sortedinBox(i) <= sortedRefBox(i);
    END LOOP;

    IF fitting THEN
        DBMS_OUTPUT.PUT_LINE('InBox fits in Reference Box' );
    else
        DBMS_OUTPUT.PUT_LINE('InBox does not fit in Reference Box' );   
    end if;

END;    
票数 1
EN

Stack Overflow用户

发布于 2018-03-29 10:24:12

中间值从三对中取得最少:

代码语言:javascript
复制
-- sample data
with boxes(length, width, height) as (
  select 4, 6, 2 from dual union all
  select 2, 6, 4 from dual union all
  select 1, 3, 2 from dual union all
  select 9, 7, 8 from dual )
-- 
select length, width, height,
       case when least(least(length, width), height)           < 3
                 and least(greatest(length, width), 
                           greatest(length, height), 
                           greatest(width, height))            < 5
                 and greatest(greatest(length, width), height) < 8
           then 'smaller than reference'
           else 'bigger or equal'
       end comparison
  from boxes

结果:

代码语言:javascript
复制
    LENGTH      WIDTH     HEIGHT COMPARISON
---------- ---------- ---------- ----------------------
         4          6          2 smaller than reference
         2          6          4 smaller than reference
         1          3          2 smaller than reference
         9          7          8 bigger or equal
票数 1
EN

Stack Overflow用户

发布于 2018-03-29 14:26:44

最后,我使用了最大和最小的函数,如下所示。

代码语言:javascript
复制
GREATEST(BOX_LENGTH, BOX_HEIGHT, BOX_WIDTH) > GREATEST(REF_LENGTH, REF_HEIGHT, REF_WIDTH) OR 

LEAST(BOX_LENGTH, BOX_HEIGHT, BOX_WIDTH) > LEAST(REF_LENGTH, REF_HEIGHT, REF_WIDTH) OR 

BOX_LENGTH + BOX_HEIGHT + BOX_WIDTH - GREATEST(BOX_LENGTH, BOX_HEIGHT, BOX_WIDTH) - LEAST(BOX_LENGTH, BOX_HEIGHT, BOX_WIDTH) > REF_LENGTH + REF_HEIGHT + REF_WIDTH - GREATEST(REF_LENGTH, REF_HEIGHT, REF_WIDTH) - LEAST(REF_LENGTH, REF_HEIGHT, REF_WIDTH) 

那是

代码语言:javascript
复制
(Sum of dimensions) - Greatest - Least = Middle dimension
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49552932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档