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


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

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

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

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

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

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

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2014/09/18 08:55:56
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
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

回答回数1482ベストアンサー獲得回数133

ポイント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ベストアンサー獲得回数1198

ポイント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

回答回数1482ベストアンサー獲得回数133ここでベストアンサー

ポイント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

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

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

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

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

回答リクエストを送信したユーザーはいません