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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在PL / SQL过程调用中使用DECODE相关的知识,希望对你有一定的参考价值。

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

我尝试过这样的事情。我在调用过程之前编写了一个SELECT语句来获取YES_ID,NO_ID并且工作正常,但是当我编写如下的过程调用时,它给出了错误“PLS-00204:函数或伪列可能在SQL中使用声明“。如何在程序调用中使用DECODE

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)),)
答案

你可以使用SELECT INTO

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

   PROC_X(DECODE_RESULT);

END;

以上是关于在PL / SQL过程调用中使用DECODE的主要内容,如果未能解决你的问题,请参考以下文章

确定 PL/SQL 过程的调用层次结构

使用带有布尔输入参数的 PL/SQL 在 oracle 中调用 java 存储过程

ORACLE 中的 PL/SQL、IF-ELSE 或 SELECT DECODE 哪个更好

PL/SQL:如何在异常中获取 ORA 代码?

在PL/SQL中调用存储过程--oracle

我可以在调用同一过程后将 PL/SQL 过程放在匿名块中吗?