2016-09-14 95 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 ...