存储过程错误中不允许子查询

时间:2016-09-14 09:50:00

标签: sql oracle stored-procedures

我正在尝试执行一个过程但在过程的下面部分出错。

获得以下错误:

  

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';

如何重写此查询? 提前谢谢。

3 个答案:

答案 0 :(得分:2)

您无法在IF语句中直接使用查询;为了得到你需要的东西,你可以使用一个变量:

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

答案 1 :(得分: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)
.....

答案 2 :(得分: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 ...