查询之间的条件

时间:2019-04-30 08:10:55

标签: oracle plsql conditional

我有两个查询:

SELECT Origin_country_id
  FROM item_supp_country_DIM
 WHERE item = I_ITEM

SELECT Origin_country_id
  FROM item_supp_country
 WHERE item = I_ITEM

我想检查第一个查询是否返回结果-如果不是,那么我想使用第二个查询来获取结果。

如何在PLSQL中将此作为条件操作?

2 个答案:

答案 0 :(得分:1)

我还没有编译它,但是或多或少它应该可以工作。

基本上,您可以尝试读取第一个表并捕获异常,然后尝试读取另一个表。那就是PL/SQL解决方案。

CREATE OR REPLACE FUNCTION read_origin_country (i_item IN VARCHAR2)
    RETURN NUMBER
IS
    l_origin_country_id   NUMBER;
BEGIN
    BEGIN
        SELECT Origin_country_id
          INTO l_origin_country_id
          FROM item_supp_country_DIM
         WHERE item = I_ITEM;
    EXCEPTION
        WHEN NO_DATA_FOUND
        THEN
            SELECT Origin_country_id
              INTO l_origin_country_id
              FROM item_supp_country
             WHERE item = I_ITEM;
    END;

    RETURN l_origin_country_id;
END read_origin_country;

答案 1 :(得分:0)

不使用plsql就有n种选择。

您可以一次查询两个表:

SELECT 'item_supp_country_DIM' source_table, Origin_country_id
  FROM item_supp_country_DIM
 WHERE item = :I_ITEM
UNION ALL
SELECT 'item_supp_country' source_table, Origin_country_id
  FROM item_supp_country
 WHERE item = :I_ITEM;

我不知道您的架构或表大小。但是,如果item有索引,则此查询应该很快。

测试数据:

DROP TABLE ITEM_SUPP_COUNTRY_DIM;
DROP TABLE ITEM_SUPP_COUNTRY;

CREATE TABLE ITEM_SUPP_COUNTRY_DIM
(
    ORIGIN_COUNTRY_ID   NUMBER NOT NULL,
    ITEM                NUMBER
);

CREATE TABLE ITEM_SUPP_COUNTRY
(
    ORIGIN_COUNTRY_ID   NUMBER NOT NULL,
    ITEM                NUMBER
);

INSERT INTO ITEM_SUPP_COUNTRY_DIM values(1, 1);
INSERT INTO ITEM_SUPP_COUNTRY_DIM values(2, 2);
INSERT INTO ITEM_SUPP_COUNTRY values(2, 2);
INSERT INTO ITEM_SUPP_COUNTRY values(3, 3);

请注意,如果I_ITEM := 2,您将获得两个结果行。