Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程中不允许子查询错误_Sql_Oracle_Stored Procedures - Fatal编程技术网

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

Sql 存储过程中不允许子查询错误,sql,oracle,stored-procedures,Sql,Oracle,Stored Procedures,我正在尝试执行一个过程,但在该过程的下面部分出现错误 获取以下错误: PL/SQL:语句被忽略错误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-

我正在尝试执行一个过程,但在该过程的下面部分出现错误

获取以下错误:

PL/SQL:语句被忽略错误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';
如何重写此查询?
提前感谢。

您不能在
IF
语句中直接使用查询;要获得所需,可以使用变量:

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

不能在
IF
语句中直接使用查询;要获得所需,可以使用变量:

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

将以下内容更改为变量:

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

将以下内容更改为变量:

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

不能在
IF
条件下运行SQL语句。相反,您必须首先运行SQL语句,将结果保存到变量中,并在
IF
中使用该变量:

SELECT DAL_ET.PARAMETER_DESC 
  INTO l_param_desc
  FROM DAL_ET;

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

不能在
IF
条件下运行SQL语句。相反,您必须首先运行SQL语句,将结果保存到变量中,并在
IF
中使用该变量:

SELECT DAL_ET.PARAMETER_DESC 
  INTO l_param_desc
  FROM DAL_ET;

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

你能解释一下吗?@KevinEsche在甲骨文中有
| |
,它的意思是连接。确切地说,我以前用过| |,它工作得很好@TonyAndrews你说得太对了。。。我的错。在编程语言之间跳跃不会有好的结局。但是如果
中的选择无效,请解释一下好吗?@KevinEsche在Oracle中有
|
,它的意思是连接。确切地说,我以前使用过| |,它工作得很好@TonyAndrews你说得太对了。。。我的错。在编程语言之间跳跃不会有好的结局。但是如果
无效,
中的选择仍然有效