我有两个查询:
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中将此作为条件操作?
答案 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
,您将获得两个结果行。