phpのoci関数でoracleデータベースを検索しています。


フォームでユーザ情報をセットするときに、jQueryUIの検索ダイアログを起動し、
氏名の一部を入力して検索することで検索ダイアログへ検索結果を表示し、
クリックするとフォームのテキストボックスにユーザ情報一式をセットするような部分を
作成しています。

既存のoracleデータベースでは「KANJILASTNAME」「KANJIFIRSTNAME」ように姓と名を分けてもっているので、
以下のようにwhrer句にCONCAT関数で姓と名を連結させた状態で検索をしようとしています。

mysqlで仮作成していた段階だと、concatがうまく機能して、望むような結果が得られていたのですが
(「山田太」で検索すると「山田太郎」「山田太一」などが得られる)
本番環境でoci関数で検索をすると、エラーとなります。

ociでconcatや||は使用できないのでしょうか?

補足へコードを記載します。

ociのconcatに関して何か情報がありましたらお願いします。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2014/09/17 18:52:28
  • 終了:2014/09/18 08:55:56
id:kon39392

$sql="select * from t_sample where concat(KANJILASTNAME,KANJIFIRSTNAME) like '%".$test."%'";
$stid=oci_parse($conn,$sql);

oci_execute($stid);
while($row=oci_fetch_array($stid,OCI_ASSOC+OCI_RETURN_NULLS)){
$userlastname = $row['KANJILASTNAME'];
$userfirstname = $row['KANJIFIRSTNAME'];
$userid = $row['UID'];
}

エラー内容
oci_execute():ORA-009933:SQLコマンドが正しく終了されていません。

ベストアンサー

id:sasada No.2

sasada回答回数1482ベストアンサー獲得回数1332014/09/18 02:22:24

ポイント200pt

 ちなみに私ならこう書きますかね。迂遠ですが。

SELECT BBB.*
    FROM
      (
            SELECT concat(AAA.KANJILASTNAME,AAA.KANJIFIRSTNAME) AS KANJIFULLNAME,AAA.*
            FROM t_sample AAA
      ) BBB
    WHERE BBB.KANJIFULLNAME LIKE "'%".$test."%'";
id:sasada

ひょっとして

SELECT concat(KANJILASTNAME,KANJIFIRSTNAME) AS KANJIFULLNAME,*
    FROM t_sample
    WHERE KANJIFULLNAME LIKE "'%".$test."%'";

で動いたりして(^^;

2014/09/18 02:36:01
id:kon39392

ご提案いただいた1つ目の方法でうまくいきました、ありがとうございました。

2014/09/18 08:55:02

その他の回答(1件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982014/09/17 21:19:15

ポイント100pt

未確認ですみませんが

$sql="select * from (select concat(KANJILASTNAME,KANJIFIRSTNAME) aaa,* from t_sample ) bbb where aaa like '%".$test."%'";
$stid=oci_parse($conn,$sql);


というように 連結させて抽出してから 絞り込んだらいかがでしょうか?

id:sasada No.2

sasada回答回数1482ベストアンサー獲得回数1332014/09/18 02:22:24ここでベストアンサー

ポイント200pt

 ちなみに私ならこう書きますかね。迂遠ですが。

SELECT BBB.*
    FROM
      (
            SELECT concat(AAA.KANJILASTNAME,AAA.KANJIFIRSTNAME) AS KANJIFULLNAME,AAA.*
            FROM t_sample AAA
      ) BBB
    WHERE BBB.KANJIFULLNAME LIKE "'%".$test."%'";
id:sasada

ひょっとして

SELECT concat(KANJILASTNAME,KANJIFIRSTNAME) AS KANJIFULLNAME,*
    FROM t_sample
    WHERE KANJIFULLNAME LIKE "'%".$test."%'";

で動いたりして(^^;

2014/09/18 02:36:01
id:kon39392

ご提案いただいた1つ目の方法でうまくいきました、ありがとうございました。

2014/09/18 08:55:02

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません