长期潜伏者,第一次潜伏者。
我正在尝试使用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'
此外,选择列表具有两个值:display
和return
。我们通常显示名称并返回ID;两种情况下都使用“名称”。我并不是说这是错误的,只是有些不同。
因此:首先,请确保您编写的查询在SQL * Plus(或SQL Developer或使用的任何工具)中返回所需的值,然后将其移至Apex。
PS不要为格式化感到抱歉。付出一些努力,使您(和我们)的生活更简单。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句