2016-10-20 2 views
0

以下のファンクション・スクリプトを実行しようとするとエラーが発生します。私は文字列の前にNを追加しようとしましたが、うまくいきませんでした。たぶん私はそれを間違ってやりました。PL/SQL:ORA-12704:ファンクション作成時にキャラクタ・セットが一致しません。

以下の機能を作成しようとしていますが、実行中にエラーが発生しています。取得を実行しようとすると

create or replace FUNCTION Get_Per_Address_For_Register(PERSON_CODE_PARAM IN NUMBER, 
    ADDR_TYPE_PARAM IN NUMBER, 
    lang IN NUMBER) RETURN VARCHAR2 
    as 
    addressval VARCHAR2(1000); 
    BEGIN 
    begin 
     SELECT * INTO addressval FROM(SELECT 
     case when tai.ADDRESS_LINE_1 IS NULL 
     or tai.ADDRESS_LINE_1 = ' ' 
     then '' 
     -- Error block Start ------------ 
     else CONCAT(tai.ADDRESS_LINE_1,',') end || case when 
     tai.ADDRESS_LINE_2 = ' ' 
     or tai.ADDRESS_LINE_2 = ' ' 
     then '' 
     else CONCAT(tai.ADDRESS_LINE_2,',') end || case when 
     tai.ADDRESS_LINE_3 IS NULL 
     or tai.ADDRESS_LINE_3 = ' ' 
     then '' 
     else CONCAT(tai.ADDRESS_LINE_3,',') end || case when tai.VILLAGE 
     IS NULL or tai.VILLAGE = ' ' 
     then '' 
     else CONCAT(tai.VILLAGE,',') end || case when mps.ps IS NULL 
     or mps.ps = ' ' 
     then '' 
     else CONCAT(mps.ps,',') end || case when md.district IS NULL 
     or md.district = ' ' 
     then '' 
     else CONCAT(md.district,',') end || case when ms.state IS NULL 
     or ms.state = ' ' 
     then '' 
     else CONCAT(ms.state,',') end || case when mn.nationality IS NULL 
     or mn.nationality = ' ' 
     then '' 
     else CONCAT(mn.nationality,',') end || case when tai.pincode IS 
     NULL or tai.pincode = '0' 
     then '' 
     -- Error Block End--------------- 
     else ',' || tai.pincode || '.' end FROM 
     t_person_address tai 
     LEFT JOIN m_nationality mn 
     ON mn.NATIONALITY_CD = tai.COUNTRY_CD 
     and mn.LANG_CD = tai.LANG_CD 
     LEFT JOIN m_state ms 
     ON ms.STATE_CD = tai.STATE_CD 
     and ms.LANG_CD = tai.LANG_CD 
     LEFT JOIN m_district md 
     ON md.DISTRICT_CD = tai.DISTRICT_CD 
     and md.LANG_CD = tai.LANG_CD 
     LEFT JOIN m_police_station mps 
     ON mps.PS_CD = tai.PS_CD 
     and mps.LANG_CD = tai.LANG_CD WHERE tai.lang_cd = lang 
     and tai.PERSON_CODE = PERSON_CODE_PARAM 
     and tai.ADDR_TYPE = ADDR_TYPE_PARAM ORDER BY tai.ADDRESS_CD 
     DESC) WHERE ROWNUM <= 1; 

     EXCEPTION 
     WHEN NO_DATA_FOUND THEN 
     NULL; 
    end; 
    RETURN addressval; 
END; 

、私は次のエラーを取得する:

PL/SQL: ORA-12704: character set mismatch

+1

これらのすべてのコンポーネントのデータ型は? –

答えて

0

ITSはNVARCHAR2と、n個の問題のように見えます。あなたは

CONCAT(tai.ADDRESS_LINE_1,n'N'',') 

等に

CONCAT(tai.ADDRESS_LINE_1,'N'',') 

を交換してくださいでした。

+0

私はあなたの解決策を試しましたが、まだそれは動作していない、同じエラー –

0

,はNVARCHAR2として指定する必要があります。あなたの冗長度をCASE THEN ELSEという表現をはるかに読みやすくすることができます:

NVL2(NULLIF(tai.ADDRESS_LINE_1, ' '), tai.ADDRESS_LINE_1||n',', NULL) 
||NVL2(NULLIF(tai.ADDRESS_LINE_2, ' '), tai.ADDRESS_LINE_2||n',', NULL) 
||NVL2(NULLIF(tai.ADDRESS_LINE_3, ' '), tai.ADDRESS_LINE_3||n',', NULL) 
... 
||NVL2(NULLIF(tai.pincode, ' '), tai.pincode||n'.', NULL) 
+0

それは私がそれを正しく説明してください助けていない –

関連する問題