Oracle 在PL/SQL过程调用中使用DECODE

Oracle 在PL/SQL过程调用中使用DECODE,oracle,plsql,Oracle,Plsql,我有一个存储的PL/SQL过程(比如X),它将记录插入表中。我从另一个过程调用该过程(比如Y)。我在过程Y中有一些参数,比如para1,para2,para3,它们可以有两个值,零或一个,对于零和一个值,我有一个id存储在TBL_设置中,当我调用过程X时,我想检查para1是否为null,然后返回null,如果不为null,则检查是否为1,然后返回YES\u ID;如果为no,则返回no\u ID 我试过这样的东西。在调用过程之前,我编写了一个SELECT语句来获取YES\u ID、NO\u I

我有一个存储的PL/SQL过程(比如X),它将记录插入表中。我从另一个过程调用该过程(比如Y)。我在过程Y中有一些参数,比如para1,para2,para3,它们可以有两个值,零或一个,对于零和一个值,我有一个id存储在TBL_设置中,当我调用过程X时,我想检查para1是否为null,然后返回null,如果不为null,则检查是否为1,然后返回YES\u ID;如果为no,则返回no\u ID

我试过这样的东西。在调用过程之前,我编写了一个SELECT语句来获取YES\u ID、NO\u ID,它工作正常,但是当我按照下面的方式编写过程调用时,它给了我错误“PLS-00204:函数或伪列只能在SQL语句中使用”。如何在过程调用中使用
解码

PROC_X(DECODE(para1,NULL,NULL,DECODE(para1,'1',YES_ID,NO_ID)),para2,NULL,NULL,DECODE(para2,'1',YES_ID,NO_ID)),para3,NULL,NULL,DECODE(para3,'1',YES_ID,NO_ID)),)

您可以使用
选择进入

DECLARE 
   DECODE_RESULT VARCHAR2(100); -- or any suitable data type
BEGIN
   SELECT DECODE(...) INTO DECODE_RESULT FROM dual;

   PROC_X(DECODE_RESULT);

END;

decode
是仅存在于SQL中而不存在于PL/SQL中的函数之一。您的示例过程调用的括号不匹配,以
,)
结尾,否则我会将其转换为等效的
CASE
表达式。
CASE
语句比
decode
语句更详细,因此更合适