【发布时间】: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更详细