【发布时间】:2015-08-17 20:32:34
【问题描述】:
我正在将存储过程从 SQL 转换为 Oracle,但出现以下错误:
ORA-01427: 单行子查询返回多于一行 ORA-06512:在“CMIUSER.PROCEDURE3”,第 21 行 ORA-06512: 在第 7 行
t_name_match 和 t_descript_match 是全局临时表。
有人可以向我解释我做错了什么吗?
create or replace PROCEDURE "PROCEDURE3"
(
IN_SEARCH_TEXT IN NVARCHAR2
, OUT_O_RC OUT SYS_REFCURSOR
) AS
BEGIN
/******************************************************************************* ***
** Name matches
******************************************************************************** ***/
/*
** Load matches to Name Table
*/
INSERT INTO t_name_match (KBID, SYMBOLID, FEATURENAME)
SELECT fm.KBID, fm.SYMBOLID, fm.FEATURENAME
from FEATURE_MASTER fm
where Upper(featurename) like IN_SEARCH_TEXT;
/*
** Add description for each of these matching names.
*/
UPDATE t_name_match nm
SET nm.DESCRIPT = (SELECT x.DESCRIPT
from CHAR_FEATURE_XRF x
where x.KBID = nm.KBID
and x.SYMBOLID = nm.SYMBOLID);
/******************************************************************************* ***
** Description matches
******************************************************************************** ***/
/*
** Load matches to Descript table
*/
INSERT INTO t_descript_match (KBID, SYMBOLID, DESCRIPT)
SELECT x.KBID, x.SYMBOLID, x.DESCRIPT
from CHAR_FEATURE_XRF x
where Upper(descript) like IN_SEARCH_TEXT;
/*
** Add name for each of these matching descriptions.
*/
UPDATE t_descript_match dm
SET dm.FEATURENAME = (SELECT f.FEATURENAME
from FEATURE_MASTER f
where f.KBID = dm.KBID
and f.SYMBOLID = dm.SYMBOLID);
/******************************************************************************* ***
** Return result set
******************************************************************************** ***/
OPEN OUT_O_RC FOR
SELECT nm.featurename, nm.descript
from t_name_match nm
UNION
SELECT dm.featurename, dm.descript
from t_descript_match dm
ORDER BY featurename, descript;
END PROCEDURE3;
【问题讨论】:
标签: sql oracle stored-procedures plsql