使用PL / SQL函数返回查询来填充LOV

问题描述

长时间潜伏,第一次闯入。

我正在尝试使用PL / SQL函数填充LOV,这是第一次返回查询。我似乎无法正确使用语法,因为在验证时总是会收到以下错误:

ORA-20999:解析“ ORA-20999:无法解析SQL查询!”中返回的查询结果!

ORA-06550:第2行,第145列:ORA-00923:在预期的位置找不到FROM关键字

以下PL / SQL函数的

DECLARE
EMPLOYEES NUMBER := 0;
QR varchar(4000);

BEGIN

SELECT COUNT(*) INTO EMPLOYEES FROM TS4_USER@TS_INFO_4.STT
WHERE MAN_QT = :APP_USER

IF EMPLOYEES = 0 THEN

QR :=     'select FIRST_NAME|| '' '' ||LAST_NAME d,select FIRST_NAME|| '' '' 
    ||LAST_NAME r 
     FROM TS4_USER@TS_INFO_4.STT 
     WHERE MAN_QT IN (SELECT QT FROM TS4_USER@TS_INFO_4.STT
            WHERE MAN_QT = (SELECT MAN_QT FROM TS4_USER@TS_INFO_4.STT 
                      WHERE QT = :APP_USER)) AND FL = ''ESA''';

ELSE

QR :=     'select FIRST_NAME|| '' '' ||LAST_NAME d,select FIRST_NAME|| '' '' 
    ||LAST_NAME r 
    from TS4_USER@TS_INFO_4.STT 
    where MAN_QT = :APP_USER';
END IF;

RETURN QR;
END

这令人困惑,因为第2行是我声明区域的一部分,并且我不希望在这里出现FROM。我已对此问题进行了一些谷歌搜索,但很少提出。我是SQL和APEX的新手,所以我意识到我可能会忽略一些相当简单的内容。任何帮助都将不胜感激。

编辑:很抱歉格式化

解决方法

乍一看,查询使用错误的语法。您不能有两个SELECT,例如

select FIRST_NAME|| '' '' ||LAST_NAME d,select FIRST_NAME||
------                                   ------
here                                     here

应该是

select FIRST_NAME|| ' ' ||LAST_NAME d,FIRST_NAME||

正如您所注意到的(如果这样做的话),我用两个连续的单引号替换了一个。当然,它会失败,因为您正在编写动态SQL,并且必须“转义”单引号。但是,我建议您使用q引用机制,该机制更易于编写和维护。像这样:

QR := q'[select FIRST_NAME|| ' ' || LAST_NAME d,FIRST_NAME|| ' ' || LAST_NAME r 
         FROM TS4_USER@TS_INFO_4.STT 
         WHERE MAN_QT IN (SELECT QT FROM TS4_USER@TS_INFO_4.STT
                          WHERE MAN_QT = (SELECT MAN_QT FROM TS4_USER@TS_INFO_4.STT 
                                          WHERE QT = :APP_USER
                                         )
                         ) 
           AND FL = 'ESA']';

但是,您不是使它复杂化了吗?不只是

select ...
from ts4_user
where qt = :APP_USER
  and fl = 'ESA'

此外,选择列表具有两个值:displayreturn。我们通常显示名称并返回ID;两种情况下都使用“名称”。我并不是说这是错误的,这有点不寻常。


因此:首先请确保您编写的查询在SQL * Plus(或SQL Developer或您使用的任何工具)中返回所需的值,然后将其移至Apex。


P.S。不要为格式化而后悔。付出一些努力,使您(和我们)的生活更简单。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...