我有一个很长的查询,我将把它全部转储掉,因为我不知道哪个特定部分导致了这个问题。
SELECT DISTINCT
vip.srname, vip.frname, vip.indv_id AS empid, prf.usrpf_formal_lastname, prf.usrpf_formal_givnames,
job.job_desc as job_name, dep.dept_desc AS dept, p.rtype, p.rdesc, p.rcode,
prf.usrpf_accept_grad as accept_grad, prf.usrpf_open_tt as open_tt
FROM acad_active vip
LEFT JOIN map_dept dep ON dep.dept_src = vip.work_unit_name
LEFT JOIN map_job job ON job.job_code = vip.job_no
LEFT JOIN usr_preference prf ON prf.usrpf_emplno = vip.indv_id
INNER JOIN (
SELECT k.pikw_emplno AS empl_no, (
CASE
WHEN UPPER(kw_desc) LIKE UPPER('%' || :keyword || '%') THEN 'directkw'
WHEN UPPER(akw_keyword) = UPPER(:keyword) THEN 'assockw'
ELSE 'relkw'
END
) AS rtype, w.kw_desc AS rdesc, w.kw_code AS rcode
FROM clb_pikeyword k
INNER JOIN iera_clb_keyword w ON w.kw_code = k.pikw_kwcode
LEFT JOIN assoc_keyword a ON a.akw_formal_kwcode = k.pikw_kwcode AND k.pikw_external = 'Y'
INNER JOIN (
SELECT pikw_emplno
FROM clb_pikeyword a1
INNER JOIN assoc_keyword a2 ON a2.akw_formal_kwcode = a1.pikw_kwcode
WHERE pikw_external = 'Y'
AND UPPER(akw_keyword) = UPPER(:keyword)
UNION
SELECT pikw_emplno
FROM clb_pikeyword d1
INNER JOIN iera_clb_keyword d2 ON d2.kw_code = d1.pikw_kwcode
WHERE pikw_external = 'Y'
AND UPPER(kw_desc) LIKE UPPER('%' || :keyword || '%')
) e ON e.pikw_emplno = k.pikw_emplno
WHERE k.pikw_external = 'Y'
UNION
SELECT t.txt_emplno AS empl_no, 'Text' as rtype, t.txt_text AS rdesc, t.txt_type AS rcode
FROM (
SELECT *
FROM clb_txt txt
WHERE txt.txt_type IN ('research', 'teaching', 'publicmedia')
) t
WHERE t.txt_public = 'Y'
AND (UPPER(t.txt_text) LIKE UPPER('%' || :keyword || '%'))
UNION
SELECT l.lang_emplno AS empl_no, 'Language' AS rtype, (
CASE
WHEN l.lang_country IS NOT NULL THEN l.lang_name || '(' || l.lang_country || ')'
ELSE l.lang_name
END
) AS rdesc, TO_CHAR(l.ra_pi_lang_id) AS rcode
FROM pi_lang l
WHERE l.lang_public = 'Y'
AND (UPPER(l.lang_name) LIKE UPPER('%' || :keyword || '%'))
UNION
SELECT i.intl_emplno AS empl_no, 'Intl' AS rtype, (
CASE
WHEN i.intl_title IS NOT NULL AND i.intl_desc IS NOT NULL THEN i.intl_title || '& ' || i.intl_desc
WHEN i.intl_title IS NOT NULL THEN i.intl_title
ELSE i.intl_desc
END
) AS rdesc, TO_CHAR(i.intl_sort_order) AS rcode
FROM pi_intl i
WHERE i.intl_public = 'Y'
AND (UPPER(i.intl_desc) LIKE UPPER('%' || :keyword || '%') OR UPPER(i.intl_title) LIKE UPPER('%' || :keyword || '%'))
) p ON p.empl_no = vip.indv_id
WHERE vip.researcher = 'Y'
ORDER BY vip.srname, vip.frname, dep.dept_desc, job.job_desc, p.rtype, UPPER(p.rdesc)
所以使用该查询,如果我输入以下任何内容:
w
或x
或其他一个1个字母的单词(有些单字母单词)tw
或as
或其他一些2个字母的单词(一些2个字母的单词)对于:keyword
参数的值,我得到错误ORA-01489: result of string concatenation is too long
。这有点误导,因为当我将twitter
或ask
作为其工作的参数的值时。我错过了什么吗?
到目前为止,我还没有看到查询在3个或更多字母单词上失败,但我仍然遇到1个或2个字母单词的问题。