可以不可以再select *,后面接nvl((select a from b),0) from 这样
可以不可以再select *,后面接nvl((select a from b),0) from 这样,我这样写遇到个错误,提示
*,语法错误,未找到FROM关键字
[解决办法]
试试在 * 号前面加个 t
SELECT t.*,
NVL((SELECT region_name FROM ws_region WHERE region_id = t.village_id),
'村委会不详') village_name
FROM s_ehr_statistics_village t
WHERE 1 = 1
=================================
我一般不写这样的语句,根据ID获取名称的,我一般再写个函数,用函数来获取。
如:
CREATE OR REPLACE FUNCTION EMP.FUNC_GET_EMITION_NAME(in_emition_code IN VARCHAR2)
/******************************************************************************
* AUTHOR - Xujin.Jiao
* CREATION DATE - 2011-08-20
* SERVICE NAME - LanDun
*
* PROCEDURE NAME :FUNC_GET_EMITION_NAME
*
* DESCRIPTION :根据排口编码获取对应的排口中文名称
*
* Parameters :
* in_emition_code IN 排口编码
******************************************************************************
* POSSIBLE ERROR CONDITIONS :
******************************************************************************
* CHANGE LOG
******************************************************************************
* CHANGE NUMBER:
* DATE:
* DEVELOPER:
* DESCRIPTION:
*****************************************************************************/
RETURN VARCHAR2 AS
v_name VARCHAR2(100);
v_prm_code NUMBER;
v_prm_errtext VARCHAR2(200);
BEGIN
IF in_emition_code IS NOT NULL THEN
BEGIN
SELECT v.emition_name
INTO v_name
FROM emition_list_view v
WHERE v.emition_code = in_emition_code;
EXCEPTION
WHEN no_data_found THEN
v_name := '';
END;
ELSE
RETURN '';
END IF;
RETURN v_name;
EXCEPTION
WHEN OTHERS THEN
v_prm_code := SQLCODE;
v_prm_errtext := SQLERRM;
DBMS_OUTPUT.put_line('this error message is from function FUNC_GET_EMITION_NAME.');
DBMS_OUTPUT.put_line('SQLCODE: '
------解决方案--------------------
v_prm_code);
DBMS_OUTPUT.put_line('SQLERRM: '
[解决办法]
v_prm_errtext);
RETURN null;
END;
/
然后这样用:
SELECT t.*,
FUNC_GET_VILLAGE_NAME(t.village_id) village_name
FROM s_ehr_statistics_village t
WHERE 1 = 1
[解决办法]
为何...我也不清楚最根本的原因.
我的回答是Oracle的基本语法规定的:使用*查询所有列以外的数据时,要加 表别名.*
今天上午就研究你提的这个问题了
一会或许有高手来回答,我去查查~
你的需求可以改成这样试试:
SELECT T.*
,NVL(W.REGION_NAME,'unknown')
FROM S_EHR_STATISTICS_VILLAGE T
,WS_REGION W
WHERE 1 = 1
AND T.VILLAGE_ID = W.REGION_ID(+);