2016-09-14 54 views
0

我試圖執行一個過程,但在過程的下面部分出現錯誤。存儲過程錯誤中不允許使用子查詢

獲取以下錯誤:

PL/SQL:語句被忽略ERROR PLS-00405:在 PLS-00405的子查詢不允許的:子查詢不允許在此背景下 這種情況下錯誤

的代碼是:

--DECLARE 
    L_ERROR_POINT VARCHAR2 (100); 
BEGIN 
    P_STATUS_CODE := 0; 
    P_ERROR_MESSAGE := ''; 

    --My error occurs in the below two lines-- 

    IF(P_DE || ' A' = (SELECT DAL_ET.PARAMETER_DESC FROM DAL_ET) 
    AND P_IDENTIFIER_TYPE_DESCRIPTION =(SELECT DAL_ET.PARAMETER_TEXT_VALUE FROM DAL_ET)) 

    THEN 

    L_ERROR_POINT := 'INSERT INTO DAL_ID_TB'; 

我怎麼能改寫這個查詢? 在此先感謝。

+0

您能解釋一下嗎? – gbppa

+1

@KevinEsche在Oracle中有'||',它表示連接。 –

+0

確實我已經使用||之前和它工作得很好。 https://docs.oracle.com/cd/B19306_01/server.102/b14200/operators003.htm – gbppa

回答

2

您不能在IF語句中直接使用查詢;得到你需要什麼,你可以使用一個變量:

DECLARE 
    vCheckValue varchar2(100); 
    ... 
BEGIN 
    select ... 
    into vCheckValue 
    from ... 
    where ... 
    -- 
    if (vCheckValue = ...) then 
    ... 
    end if; 
END; 
0

變化到下列變量:

SELECT DAL_ET.PARAMETER_DESC 
into v_PARAMETER_DESC 
FROM DAL_ET 

SELECT DAL_ET.PARAMETER_TEXT_VALUE 
into v_PARAMETER_TEXT_VALUE 

,並在if語句中使用它們:

IF(P_DE || ' A' = v_PARAMETER_DESC 
AND P_IDENTIFIER_TYPE_DESCRIPTION = v_PARAMETER_TEXT_VALUE) 
..... 
0

您不能運行一個IF條件中的SQL語句。相反,您必須首先運行SQL語句,將結果保存到一個變量中,然後在IF中使用該語句:

SELECT DAL_ET.PARAMETER_DESC 
    INTO l_param_desc 
    FROM DAL_ET; 

IF l_param_desc = P_DE || ' A' 
AND ...