日期:2014-05-17  浏览次数:20819 次

可以不可以再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: ' 
oracle中sql统计clob解决方案