2010-11-18 37 views
0

私は、SQLクエリでSUBSTRメソッドを使用していますが、長い文字列には、エラーの下に与えている:OracleのSUBSTRエラー

ERROR: ORA-01704: string literal too long.

SQL: select * from table where tn=SUBSTR('....LONG STRING....',1,12)

は、Oracle SQLクエリで長い文字列にサブストリングできるように、任意の代替ソリューションを提案してください。

Praveenさん

+0

提案:最初の12は他のすべてを落としたいので、12文字のスティッキングにキャストしてください... RDBMSに応じて... 'select * from table where tn = cast(longstring varchar2(12))' – xQbert

答えて

0

おかげでエラーメッセージが文字列リテラルは、(SUBSTR機能を限定するものではない)長すぎると述べています。リテラルの代わりにバインド変数を使用できますか?

select * from table where tn = substr(?, 1, 12) 

sql.setString(1, theLongString); 

それともでも、サブクライアント側の操作を行います。

select * from table where tn = ? 

sql.setString(1, theLongString.substring(0,12)); 
0

おそらく、あなたは、テーブルのフィールドまたは変数に入れて、その上SUBSTRを使用できますか?

0

文字列リテラルを使用する必要がある場合は、Thiloの示唆しているように、バインド変数を使用しない限り、4000文字の制限にバインドされます。

表のデータを処理する場合は、代わりにCLOBおよびDBMS_LOB.SUBSTRを使用できます。