Oracleで「文字が無効です」のエラーが出る理由と解決方法

このQ&Aのポイント
  • JavaからOracleに接続してSELECT文を発行する際に「文字が無効です」のエラーが出る問題が発生しています。
  • SQLPlusから同じSELECT文を実行するとエラーが出ずに正常に実行されるため、原因を特定できません。
  • Oracle初心者であるため、解決策が分からない状況です。お知恵をお貸しください。
回答を見る
  • ベストアンサー

Oracleで「文字が無効です」のエラーが出ます

Oracleで「文字が無効です」のエラーが出ます JavaからOracleに接続して、SELECT文を発行していますが、何度試しても上記のエラーが出ます。 発行しているSELECT文を、SQLPlusから打ち込むとちゃんと実行できます。 何が悪いのか見当がつきません。 お知恵をお貸しください。 ちなみに、対象テーブルの項目はvarchar2とnumberだけの項目ばかりで、日本語は使ってません。 また、Oracle初心者です。 環境 端末:WindowsXP Oracle:10g Express Edition ※文字コードはAL32UTF8 IDE:Eclipse3.5 ※設定-一般-ワークスペースのテキストファイルエンコードはUTF-8

  • Oracle
  • 回答数2
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

Java内で生成したSQL文を見ないとなんとも言えないけど。 Javaでリテラル吐き出して編集してますかね? select UserID, UserName from mstUser where UserID = '001'; みたいな。 条件によって 001 の部分を変化させるような。 だったらJavaでシングルクォートを吐き出すところを二重にしてみるとどうかな? ダブルクォートでは無いよ。二重に書くことでシングルクォート一個と解釈されればOKのはず。 そうしておかないとSQL文全体を文字列で扱うんだろうから、シングルクォートの対応が崩れる。 つくりとしては以下のように作成。 select UserID, UserName from mstUser where UserID = ''001''; みたいな。 SQL文を文字列変数に格納するんだろうから 'select UserID, UserName from mstUser where UserID = ''001'';'

yoshi5570
質問者

お礼

自己解決しました。 SQL文が間違ってました。 正確にはSQL文は間違ってなかったんですが、 最後のセミコロン(;)が不要でした。 セミコロンを削除したら動きました。 お騒がせしました。

yoshi5570
質問者

補足

ありがとうございます。 おっしゃられているように、 JavaではWHEREの個所を条件により変化させて編集するようにしてます。 しかしながら、 SELECT * FROM TESTTBL; みたいな、ごく単純なSQL文に試しに変えてみてもエラーになるので、 SQL文の問題ではないと認識してます。 よく解りませんが、 文字コード?、環境?、コネクション?当たりに問題がある場合はないのでしょうか?

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

そのSQL文を記載してください。 SQL*Plusで動かしたものと、Java埋め込みor生成されたものを両方。

yoshi5570
質問者

補足

すいません。 諸事情で載せられませんが、 Javaで編集したSQL文をコピペしてSQLPlusで動かしたんで、 SQL文自体は問題ないと思います。 それに、試しにSQLiteに同じテーブルを作成して、接続させてみたところ、 正常にSQL文が発行できました。

関連するQ&A

  • Oracleのスペース文字について。

    今いろいろ調べていて、困っているのですが、ORACLEのスペースをVarchar2で取得した時、文字はどのように入っているのでしょう? たとえば、SELECT文を作って、スペースを取得した時、ASP+VBS等の変数を使ってスペース文字を変数に入れた時、どんな値が入ってくるのか知りたいのですが・・・・・ お分かりになる方いらっしゃいますか?

  • oracleの「????」表記について

    お世話になります。 現在、oracle xeを使用し、DBの勉強をしております。 1点わからないところがありましたので、お手数ですがご教授をお願いします。 varchar2をデータ型とするカラムに対し、日本語でinsert文で挿入すると、 「????」で表現されてしまいます。 以下が入力したSQL文です ------------------------------------------------ insert into TABLELIST(ID,NAME) values(11,'テスト'); ------------------------------------------------ カラムIDのデータ型:char(2) カラムNAMEのデータ型:varchar2(9) これは文字コードの違いによるものなのでしょうか。 oracle xeでは文字コードがデフォルトで「utf-8」になっているのですが、 utf-8では日本語の入力は不可能ということでしょうか。

  • Oracleが起動しません(ORA-01034)

    環境 ・Windows2000 ・Oracle8i Oracleが突然起動しなくなりました。 SQLPlusで接続しようとすると 「ERROR ORA-01034: Oracle not available」 というメッセージが表示されます。 サービスを見ると OracleServiceORCLが「開始中」のままいつまでたっても開始しません。何度再起動しても状況は同じです。 Oracle初心者ですのでまずはエラーメッセージが出たときの調べ方をご教授願えませんでしょうか。 よろしくお願いします。

  • ASP.NETでのオラクルAL16UTF16について

    ASP.NETでのオラクルAL16UTF16について OS WindowsXP VisualStudio .NET 2003 + Oracle 10g にてASP.NET 2.0 の 開発を行っています。 オラクルではキャラクタセットでAL16UTF16を指定しています。 ASP.NETでは、web.configで <?xml version="1.0" encoding="utf-8" ?> と <globalization requestEncoding="UTF-8" responseEncoding="UTF-8" /> を指定しています。 このように設定して、特に今のところ不具合があるわけではないのですが オラクルではUTF-16、ASP.NETではUTF-8となっていて 違うものを指定していても不具合等はないのでしょうか。 または、不具合がまだ見つかっていないだけでしょうか。 以上、ご教授をお願いします。

  • ORACLEをインストールしたディレクトリのセキュリティーの設定

    お世話になります。 ASP.net、Oracle10g、ADO.netで作成しています。 SELECT文やInsert文を発行しようとすると 「Oracle クライアントとネットワーク コンポーネントが見つかりません。これらのコンポーネントは Oracle Corporation から提供され、Oracle Version 7.3.3 (またはそれ以降) のクライアント ソフトウェアの一部としてインストールされます。 プロバイダは、これらのコンポーネントがインストールされるまで機能しません。 」とエラーが表示され、 実行できません。 インターネットで調べたところ、「ORACLEをインストールしたディレクトリのセキュリティーがAdoministratorsのみアクセス可能になっていた」とありました。 「ORACLEをインストールしたディレクトリのセキュリティー」の設定方法がわかりませんので、ご存知の方、教えてください。お願いします。

  • オラクル ORA-01034

    MiracleLinux1.1 + Oracle 8i(r8.1.7)を使っています。  先日も質問させていただいて解決したかと思ったのですが 解決しておりませんでした。すいません。  現在、Oracle8iをインストールして、その際にユーザー oracleと、グループdba, oinstallを作っています。 ユーザーoracleになれば、何の問題も起こらないのですが、 新しいユーザー(例えばWEB用の webuser など)を作成 すると、このユーザーがログインできません。 % sqlplus system/manager ORA-01034: ORACLE not available というエラーになります。  環境変数は ユーザーoracleと同じにしています。 違うのは USER, MAIL, PWD くらいです。  webuserを dba, oinstallに所属させてみてもだめな ようです。 /etc/group %sqlplus system/manager@sid の書式を使ってみると ORA-12154: TNS: could not resolve service name というエラーになってログインできません。  なにかアドバイスなどいただければ幸いです。

  • オラクルとOSの相互のユーザーの関係

     Linux + オラクル 8.1.5を使っています。  ORACLE_OWNERに oracle というユーザーを指定して インストールしました。ORACLE_SIDには odb を指定しました。  不思議なのですが、Linux上でORACLE_OWNERである、 oracleユーザーになれば sqlplusを使って、 system/managerでログインできます。 % sqlplus system/manager Linux上で他のユーザー(rootなど)の場合は、 同じアカウントでもオラクルにログインできません。 ORA-01034: ORACLE not available というエラーになります。 環境変数は oracleユーザーでもrootでも同じにしてます。 こちらの過去ログでは「メモリ不足」などの説もありますが、 特定のアカウントだけの問題なのでそれもないと思います。 Linuxのユーザーとオラクルのユーザーにはどういう関係が あるのでしょうか?  ご教授いただければ幸いです。  具体的にやりたい事は apache などから php経由で webuserユーザーなどのWEBサーバの動作権限で、 select、insertなどができるユーザーを作成したいのです (Enterprise Managerなどを使わずに・・というか 手元のWindowsクライアントCDにはそんなGUIアプリは 入ってなかったので・・)

  • OracleのSQLについて

    OracleのSQLについて質問があります。 VARCHAR2をReturnするFunction「GETKANANAME(引数はID)」があるとします。 このとき Update NAMELIST SET kananame = (select GETKANANAME('00001') from dual); とすると、kananameに何も設定されません。 (エラーメッセージなどは何も出ていません。) select GETKANANAME('00001') from dual; だと期待する値が帰ってくるのですが…。 何か間違ったSQL文なのでしょうか?

  • OracleのSQLPLUSログインについて

    sqlplusにてデータベースにアクセスできません。 どなたか知恵をお貸しください。 環境は、LinuxにOracle10gをインストールしました。 インストールと同時にデータベース(orcl)を作成しました。 インストールしたマシンにて、sqlplusを実行してみようとしているところです。 Oracleのインストール、データベースの作成が終了し、 コマンドラインから"sqlplu /nolog"を実行し、データベースに 接続しようとしましたが、エラーと表示されます。 コマンド、エラーは以下の通りです。 SQL> conn sys/manager as sysdba ERROR ORA-12162: TNS:net service name is incorrectly specified Oracleのインストール、データベースの作成を行った Linuxのユーザは"oracle"です。 この場合、ユーザ名はoracleが正しいのでしょうか?

  • SQLPlusでUnicode

    Windows XP上でOracle 9 リリース2によるデータベースを構築しようとしています。Unicodeで書かれた.sqlファイルを使って次のことをしたいのですが、うまくいかずに悩んでいます。アドバイスいただけませんでしょうか。 INSERT, DELETE, UPDATEなどのコマンドが記述された SQLスクリプトをSQLPlusにてデータベースに投入する。 このデータベースは次のようにNLS変数を設定しました。 NLS_CHARACTERSET = AL32UTF8 NLS_NCHAR_CHARACTERSET = UTF8 SQLPlusは.sqlファイルを読み取れずSP2-0042というエラーを出してきます。いくつかのエンコード(UTF8, Unicode, ANSI)で.sqlファイルを保存することを試したのですが、どの場合もSQLPlusではじかれました。オラクルをインストールするときに、いつかのタイミングで日本語と英語で動作するようにインストールしたのですが、それがSQLPlusでUnicodeを読み取れない原因なのでしょうか。 よろしくおねがいします。