• 締切済み

円マークのフィールドに対してSELECT文が実行できない

いつも参考にさせていただいております。 DB2(AS400)に対してJDBC経由で、円マーク(\)をんだフィールドに対してSELECT文を実行しようとすると、エラーになってしまいます。 フィールドの前にもう一つ円マークを付加して、フィールド名をダブルコーテーションでくくってみたのですが、テーブルには該当するフィールドがないというエラーになってしまいます。 以下のようなJavaのコードになります。 String sqlStr = "SELECT " + "\"" + "\\COL1" + "\"" + " FROM TABLE1"; 上記からは以下のSQLが作成されます。 SELECT "\COL1" FROM TABLE1 このSQL文を、DB2のツールで実行すると問題なく処理されて、値が返ってきます。 Java(JDBC経由)の場合は、どのように記述したら宜しいのでしょうか? 宜しくお願い致します。

  • 6860
  • お礼率76% (10/13)
  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

  • sh_hirose
  • ベストアンサー率66% (56/84)
回答No.1

DB2はよく知らないのですが、 String sqlStr = "SELECT \\COL1 FROM TABLE1"; でいいじゃないでしょうか? SELECT "\COL1" FROM TABLE1 ↓ SELECT \COL1 FROM TABLE1 カラム名が「"\COL1"」なら別ですが・・・。

6860
質問者

補足

ご回答ありがとうございます。 >String sqlStr = "SELECT \\COL1 FROM TABLE1"; >でいいじゃないでしょうか? フィールド名自体は、\COL1 となります。 \を追加しただけでは(\\COL1としても)、該当するフィールドがないというエラーになってしまいます。 フィールド名に\マークがある場合には、ダブルコーテーションでくくるという情報があったので、実行してみたのですがダメでした。 以下のように対応することで、SELECT処理を実行することができました。 1.DB2のCCSIDを、5035 に設定。 2.SELECT文において、\の部分を$に変更   SELECT $COL1 FROM TABLE1 CCSIDを5035に設定することにより、\マークは$マークと記述することによって認識できるようです。

関連するQ&A

  • 【PL/SQL】SQL文が長すぎてSELECTできない

    oracle9iのpl/sqlでSELECT文を発行し 取得したカーソルを返す処理をしています。 where句が動的になる為 実行するSQL文が長くなり ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました のエラーが発生します。 そこで、SQL文の部分をCLOB型にしたり SQL文を「||」でつなげたり してみましたが、どちらもエラーになりました。 長すぎるSQL文を実行するには どうしたらよいでしょうか? 以下ソースです。(左側の数字は行数です) ----------------------------------- 1 PROCEDURE テスト(O_カーソル IN OUT 情報カーソル) IS 2 TYPE curType IS REF CURSOR; 3 tmpCur curType; 4 sqlStr VARCHAR2(32767); 5 6 7 BEGIN 8 9 sqlStr := 'SELECT ' 10 sqlStr := sqlStr || 'A,B ' 11 sqlStr := sqlStr || 'FROM' <<省略>> 12 OPEN tmpCur FOR sqlStr ←エラー発生 13 O_カーソル := tmpCur; --取得したカーソルを返す 14 END テスト; ----------------------------------- (1)SQL文をCLOB型にしてみる:コンパイルエラー 4 sqlStr CLOB (2)SQL文を「||」でつなげてみる:文字列バッファが小さすぎますでエラー Dim sqlStr1 VARCHAR2(32767); Dim sqlStr2 VARCHAR2(32767); Dim sqlStr3 VARCHAR2(32767); <<省略>> 12 OPEN tmpCur FOR (sqlStr1      || sqlStr2      || sqlStr3 <<省略>> )

  • Select Distinctについて

    SQL文の質問です。フィールドがTable1に100つあるとします。 select distinct XYZ From Table1という文があるとします。 これだとXYZのフィールドしか参照していないことになると思います。 そうではなくて、他の99フィールドの値も参照(データにアクセスしたい)したいと思っています。 select distinct XYZ, * From Table1とSelect * from Table1みたいなことをやりましたがエラーが発生しました。他の99フィールドを参照する方法はあるでしょうか?

  • SQLで取得したフィールドをSQL文として利用

    お世話になっております。 MYSQLで sql_id (int PK) sql_data (text) のようなテーブル(sql_db)を持ち select sql_id from where (sql_data をsqlとして実行した結果 ) > 200 のように、フィールドから取得した値をSQLとして実行したりする方法はございますでしょうか。 ご教授よろしくお願いいたします。

  • Select文のパフォーマンスについて

    Select文のパフォーマンスについて質問です。 (1)select * from table1 where col1='00001' and kbn in (1,2,3,4) (2)select * from table1 where col1='00001' and (kbn = 1 or kbn = 2 or kbn = 3 or kbn = 4) (1)と(2)ではどちらがパフォーマンスがよいのでしょうか? SQLServer2008

  • select * from ほげほげ の際にフィールド除外

    SQLにてselect * from ほげほげ は「ほげほげ」というテーブルのすべてのフィールドをセレクトしますが、「*」を使ったままで「年月日」のフィールドだけ除外するような書き方はできるものですか。 #SQL初心者の質問です。

  • SELECT文で取り出したデータを文字列を別のtableのひとつのフィールドへ

    宜しくお願いいたします。 PHP5 Mysql5 で運用しています。 $sql = "SELECT * FROM member WHERE ****** $rst = mysql_query($sql, $con); で取り出して while($col = mysql_fetch_array($rst)) { print $col['mail']; } これで表示はさせられるのですが、 この出てきたデータを [ , ] で区切って全部一まとめにして。 次の画面で、別のテーブルの一つのフィールドに 全部入れたいのですが判りません。。 表示はさせられるのだから、それを一まとめにしては 出来るつもりでしたが。どうしても判りません。 どのようにしたらよろしいでしょうか? アドバイスなど、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • MSDEのSQLについて

    DB初心者です。 通常のAcceessで支障なく使っていた以下のようなSQL文がMSDEのビューではエラーがかかって使えません。原因と対応法を教えて頂けないでしょうか? < 「テーブル1」の「フィールド1」と「フィールド2」の相関係数を算出するSQL文 > SELECT (Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))*([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))))/Sqr(Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))^2)*Sum(([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))^2)) AS 相関係数 FROM テーブル1; これがMSDEだと下のようなエラーになります。 ADOエラー: 集計やサブクエリを含む式に対して集計関数を実行することは出来ません。 どうしたいいでしょうか? また、MSDEや易しいTransactSQLを習得する良い方法があればアドバイスを頂きたいのですが。

  • php上でSQL文を実行した結果と、phpMyAdminで実行した結果が違う

    ☆実行環境 php5.3 MySQL4.0 $sql="SELECT * FROM テーブル名 WHERE フィールド名 like '".$変数."%'" php上で上記のようなSQL文を実行させようとしています。 テーブルには該当する行がいくつかあるのですが、ページ上では1行も表示してくれません。 mysql_num_rowsの返り値を見ると0になっています。 SQL文の組み立てがおかしいのかと思い、phpMyAdmin上でSQL文を実行すると、 きちんと欲しい内容が表示されます。 とするとphpでのSQL文の書き方がおかしいのだと思います。 どこかおかしいのかご教授ください。

    • ベストアンサー
    • PHP
  • SELECT実行中にINSERTしたい

    テーブルTに対し、データ抽出に数分かかるようなSELECT文を実行しているとして、 そのSELECT文の実行中にInsertしたらどのような挙動になるでしょうか。 (INSERTした瞬間にエラーが発生する?) また、SELECT文の実行中にInsertしたら、 「SELECT文が実行終了するまで待って、そのあとにINSERTする」 という動きにしたい場合、どのように設定(or SQLを書けば?)すればよいでしょうか。

    • ベストアンサー
    • MySQL
  • ASP更新・変更ができない

    毎々お世話になってます。 ASP(VBScript)で更新・変更ができないのです。 db.Execute(StrSQL) 部分でエラーになり、 //db.Execute(StrSQL) を使用しない状態にするとエラーは出ませんが、更新・変更ができません。 <% //DB接続 Set ObjConn = Server.CreateObject("ADODB.Connection") ObjConn.Open "Driver={Microsoft Access Driver (*.mdb)};" & _ "DBQ=" & Server.Mappath("dbname.mdb") // 1. SELECT文:SELECT * FROM テーブル名 // 2. INSERT文:INSERT INTO テーブル名 (フィールド名) VALUES (値) // 3. UPDATE文:UPDATE テーブル名 SET フィールド名=値 // 4. DELETE文:DELETE * FROM テーブル名 //データ変更 //--- 追加する文字列を変数にセット --- uID = Request.Form("uID") uTYPE = Request.Form("uTYPE") uNAME= Request.Form("uNAME") uMNAME = Request.Form("uMNAME") //--- データ変更SQL --- SQLstr = "UPDATE " & tablename & " SET " SQLstr = SQLstr & "[uID]=#" & uID & "#," SQLstr = SQLstr & "[uTYPE]=" & uTYPE & "," SQLstr = SQLstr & "[uNAME]=" & uNAME & "," SQLstr = SQLstr & "WHERE ID=" & uID //--- データ追加実行 --- db.Execute(StrSQL) //DB接続解除 ObjConn.Close Set ObjConn = Nothing %>

専門家に質問してみよう