0

ユーザー名でユーザーを取得するのに役立つクエリを作成しようとしています。私がしたいのは、指定されたユーザー名が一意であるかどうかを確認することです。だから私が考えたのは、選択要求を行うときにユーザー名を大文字にして、指定されたユーザー名の大文字と比較することです。これは私が試したものです:

SQL("select * from utilisateur where upper(pseudo) = {pseudo}").on(
        'pseudo -> pseudo.toUpperCase
        ).as(Utilisateur.utilisateur.singleOpt) 

しかし、このエラーが発生します:

[RuntimeException: SqlMappingError(too many rows when expecting a single one)]

私もこれを試しました:

SQL("select * from utilisateur where ucase(pseudo) = {pseudo}").on(
        'pseudo -> pseudo.toUpperCase
        ).as(Utilisateur.utilisateur.singleOpt) 

そして私はこのエラーを受け取りました:

[PSQLException: ERROR: function ucase(character varying) does not exist Indice : No function matches the given name and argument types. You might need to add explicit type casts. Position : 33]

私は何をすべきか ?

PS:PostgreSQL9.1を使用しています

4

1 に答える 1

2

まず、Play!では、singleOpt1行だけ戻ることを期待している場合にのみ使用します。それ以外の場合は、例外がスローされます。1行だけが必要なのでLIMIT 1、クエリの最後にを追加します。

必要なPostgreSQL関数はですupper()。次に例を示します。

SQL("select * from utilisateur where upper(pseudo) = {pseudo} limit 1").on(
        'pseudo -> pseudo.toUpperCase
        ).as(Utilisateur.utilisateur.singleOpt) 

(ここで遊ぶことができます:http ://sqlfiddle.com/#!1 / 6226c / 5 )

于 2012-09-21T10:31:30.440 に答える