【问题标题】:Using DECODE in PL/SQL procedure call在 PL/SQL 过程调用中使用 DECODE
【发布时间】:2018-09-08 09:52:29
【问题描述】:

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

【问题讨论】:

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

标签: oracle plsql


【解决方案1】:

你可以使用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;

【讨论】:

    猜你喜欢
    • 2017-08-05
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多