使用SELECT INTO查询块

时间:2013-09-02 03:08:28

标签: sql oracle

QUERY是自我解释的。

DECLARE 
    ID NUMBER (10); 
    ISFIRST NUMBER (1);
BEGIN

    SELECT M.ID, M.ISFIRST 
    INTO ID, ISFIRST
    FROM MERCHANT M
    WHERE M.PHONE = :1;

    IF (ISFIRST=1) THEN 
        SELECT * FROM CUSTOMER C WHERE C.ISFIRST=1 AND C.MERCHANTID = ID;
    ELSE 
        SELECT * FROM CUSTOMER C WHERE C.ISFIRST=0 AND C.MERCHANTID = ID;
    END IF;

END;

这个查询给了我“PLS-00428:这个SELECT语句中应该有一个INTO子句”。 我需要根据MERCHANT.ISFIRST和MERCHANT.ID从CUSTOMER表中选择数据。 任何解决方法或解释出错的地方都将不胜感激。

PS:问题是通过UNION ALL语句解决的。这个问题需要关闭。

2 个答案:

答案 0 :(得分:2)

SELECT语句没有任何错误,除了您没有与他们一起做任何事情。我的意思是最后两个。你想让他们做什么?产生一个将被丢弃的结果? PL / SQL不允许它。

如果这是正确的,您可以选择一个字段并执行SELECT {aField} INTO {aVariable}而不是SELECT *

    IF( ISFIRST = 1 ) THEN 
        SELECT {aField} INTO {aVariable} FROM CUSTOMER C WHERE C.ISFIRST=1 AND C.MERCHANTID = ID;
    ELSE 
        SELECT {aField} INTO {aVariable} FROM CUSTOMER C WHERE C.ISFIRST=0 AND C.MERCHANTID = ID;
    END IF;

不要忘记宣布{aVariable} !!!

答案 1 :(得分:0)

我认为这个查询会做同样的事情:

SELECT C.* 
FROM CUSTOMER C 
INNER JOIN MERCHANT M ON C.MERCHANTID = M.ID AND 
                         C.ISFIRST = M.ISFIRST AND
                         M.PHONE = :1;