2017-09-03 51 views
0

我有一個問題與此查詢,它告訴我的錯誤字符集不匹配凝聚

ORA-00932: inconsistent datatypes: expected NCHAR got NUMBER 
00932.00000 - "inconsistent datatypes: expected% s got% s" 
* Cause: 
* Action: 
Error in line: 54, column: 43 

子查詢返回的字母「F」或在其中有更多學生的性別「M」這工作,但問題是我如何分配這封信給變量其中genero_a =

SELECT NOMBRE, COALESCE(DIRECCION,CORREO, 10) comm 
FROM ESTUDIANTE 
WHERE GENERO_A = 
    (SELECT GENERO_A 
    FROM ESTUDIANTE 
    GROUP BY GENERO_A 
    HAVING COUNT(GENERO_A) = 
     (SELECT MAX(COUNT(*)) as CONTAR 
     FROM ESTUDIANTE 
     GROUP BY GENERO_A)) 
ORDER BY NOMBRE; 

我不是SQL都精通,我感謝您的理解。

--TABLA ESTUDIANTE

CREATE TABLE ESTUDIANTE(
    ID_LECTOR VARCHAR2(50) NOT NULL, 
    NOMBRE VARCHAR2(50), 
    APELLIDO VARCHAR2(50), 
    GENERO_A CHAR(1) CONSTRAINT CH_GENERO_A CHECK(GENERO_A IN ('f', 'm')), 
    DIRECCION NVARCHAR2(100), 
    CORREO NVARCHAR2(50) 
); 
ALTER TABLE ESTUDIANTE ADD CONSTRAINT PK_ESTUDIANTE PRIMARY KEY(ID_LECTOR); 
+0

這意味着您的genero_a被定義爲'NCHAR'你的數據庫,並且你將它與從中返回的'NUMBER'進行比較你的子查詢。將結果更改爲'char'。 – Ofisora

+0

子查詢返回一個字符「f或」m「,我應該更改爲字符?:我不明白,對不起... 編輯:Genero_a被定義爲CHAR(1) – RicardoBarros

+0

您可以發佈您的表結構數據類型和哪一個是第54行? – Ofisora

回答

4

錯誤是COALESCE(DIRECCION,CORREO, 10),因爲所有的領域不具有相同的數據類型。

解決方案: 你要投NUMBER 10到類似的數據類型爲導向,以郵報的。 只需將上面的代碼更改爲COALESCE(DIRECCION,CORREO, CAST(10 as NVARCHAR2(2)))即可。

CAST函數將一個數據類型的值轉換爲另一個數據類型。

更新查詢:

SELECT NOMBRE, COALESCE(DIRECCION,CORREO, CAST(10 as NVARCHAR2(2))) comm 
FROM ESTUDIANTE 
WHERE GENERO_A = 
    (SELECT GENERO_A 
    FROM ESTUDIANTE 
    GROUP BY GENERO_A 
    HAVING COUNT(GENERO_A) = 
     (SELECT MAX(COUNT(*)) as CONTAR 
     FROM ESTUDIANTE 
     GROUP BY GENERO_A)) 
ORDER BY NOMBRE; 

或者,從您提供的link

SELECT NOMBRE, COALESCE(DIRECCION,CORREO, N'10') comm 
FROM ESTUDIANTE 
WHERE GENERO_A = 
    (SELECT GENERO_A 
    FROM ESTUDIANTE 
    GROUP BY GENERO_A 
    HAVING COUNT(GENERO_A) = 
     (SELECT MAX(COUNT(*)) as CONTAR 
     FROM ESTUDIANTE 
     GROUP BY GENERO_A)) 
ORDER BY NOMBRE; 

或者,

SELECT NOMBRE, COALESCE(DIRECCION,CORREO, N''||10) comm 
FROM ESTUDIANTE 
WHERE GENERO_A = 
    (SELECT GENERO_A 
    FROM ESTUDIANTE 
    GROUP BY GENERO_A 
    HAVING COUNT(GENERO_A) = 
     (SELECT MAX(COUNT(*)) as CONTAR 
     FROM ESTUDIANTE 
     GROUP BY GENERO_A)) 
ORDER BY NOMBRE; 
+0

感謝兄弟現在正在工作,我閱讀其他帖子(https://stackoverflow.com/questions/15967201/ora-12704-character-set-mismatch) 但這不起作用:爲什麼? 我嘗試添加n'',例如「select COALESCE(EMAIL,n'NO EMAIL') 「代碼變成全藍 – RicardoBarros

+0

@RicardoBarros答案更新。如果它工作,你可以upvote /接受答案。 – Ofisora

+0

我已經接受:)謝謝@ ofisora,但我有一個疑問,爲什麼我的代碼在sql表中變成藍色,從我添加n'10'或N「||的行中變爲藍色。 10到最後? – RicardoBarros