2016-09-14 1 views
0

프로 시저를 실행하려고하지만 프로 시저의 아래 부분에서 오류가 발생합니다.저장 프로 시저 오류에서 하위 쿼리가 허용되지 않습니다.

얻기 아래의 오류 : PLS-00405에서 허용 하위 쿼리하지 :

PL/SQL : 문 무시 ERROR 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 오라클에는'||'이 있는데, 이것은 연결을 의미합니다. –

+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 ...