(現在 過去ログ33 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■5145 / inTopicNo.21)  Re[3]: 外部DBでオートナンバーキーの取得
  
□投稿者/ 通りすがり -(2009/09/26(Sat) 19:43:42)
    検証アリガト


引用返信 [メール受信/OFF] 削除キー/
■5167 / inTopicNo.22)  Re[2]: 外部DBでオートナンバーキーの取得
□投稿者/ うにん -(2009/09/28(Mon) 13:49:35)
    >>再抽出しないといけないのだろうというのは分かるのですが
    >>最後の番号を取得する#DSQLの書き方?
    >>良い方法が分かりません
    >
    > 主キー=mysql_insert_id()

    それはCの関数だった。SQLのは違う名前。
    #DSQL("id=LAST_INSERT_ID()")
    で最後に挿入した行が再抽出される。
引用返信 [メール受信/OFF] 削除キー/
■5174 / inTopicNo.23)  Re[2]: 外部DBでオートナンバーキーの取得
□投稿者/ うにん -(2009/09/28(Mon) 19:55:05)
    > 私はmysqlでなくpostgresqlで外部DBのautoをやろうとしましたが、
    > 桐で行追加可能にするには主キーがないといけない
    > 主キーの項目にも桐から値を設定しないと桐がNULLを入れようとする
    > のでうまく行きませんでした。
    > トリガを定義して何とかなりましたが、mysqlだと簡単ですか?

    簡単でしたねえ。桐にはmySQLの方が相性がよさそう?
    pgsqlではNULL違反になってしまうのに、mysqlではならないでauto値が入ってくれる。
    未定義でなく適当な値を入れてもauto値が上書きしてくれるけど、既存の値を入れるとunique違反でエラーになる。
引用返信 [メール受信/OFF] 削除キー/
■5178 / inTopicNo.24)  Re[3]: 外部DBでオートナンバーキーの取得
□投稿者/ 尾形 -(2009/09/29(Tue) 09:04:40)
    どうも、ありがとうございました

    > #DSQL("id=LAST_INSERT_ID()")
    最高です ^^
    色々と使えそうです

引用返信 [メール受信/OFF] 削除キー/
■5180 / inTopicNo.25)  Re[4]: 外部DBでオートナンバーキーの取得
□投稿者/ 桐々舞 -(2009/09/29(Tue) 11:44:58)
    スタンドアローンなのですか?
引用返信 [メール受信/OFF] 削除キー/
■5181 / inTopicNo.26)  Re[4]: 外部DBでオートナンバーキーの取得
□投稿者/ hidetake -(2009/09/29(Tue) 12:08:25)
    >>#DSQL("id=LAST_INSERT_ID()")
    > 最高です ^^
    > 色々と使えそうです

    MySQL の LAST_INSERT_ID() に対して
    PostgreSQL だと 8.1 以降で LastVal() が
    使えるのですね。記録! (^^)

    セッション単位で得られるのが面白いところ
    ですね。機会があったら試してみよう。

引用返信 [メール受信/OFF] 削除キー/
■5182 / inTopicNo.27)  Re[5]: 外部DBでオートナンバーキーの取得
□投稿者/ 尾形 -(2009/09/29(Tue) 12:09:17)
    > スタンドアローンなのですか?
    テスト調べて見ましたがマルチ対応のようですが

    pc1で1を追加
    pc2で2を追加

    pc1でid=LAST_INSERT_ID()は1を返しました



引用返信 [メール受信/OFF] 削除キー/
■5183 / inTopicNo.28)  Re[6]: 外部DBでオートナンバーキーの取得
□投稿者/ 桐々舞 -(2009/09/29(Tue) 12:39:22)
    途中でセッションを切るのがあり得ないなら。
引用返信 [メール受信/OFF] 削除キー/
■5186 / inTopicNo.29)  Re[5]: 外部DBでオートナンバーキーの取得
□投稿者/ うにん -(2009/09/29(Tue) 14:55:17)
    > MySQL の LAST_INSERT_ID() に対して
    > PostgreSQL だと 8.1 以降で LastVal() が
    > 使えるのですね。記録! (^^)

    #DSQLで使おうとすると、
    ERROR: lastval is not yet defined in this session;
    Error while executing the query
    でうまくいきません。
    mysqlのは0が返るのにpgsqlはエラーを返す。関数がエラーになるっていう仕様は今一な気がします。pgsqlのシーケンスは0も値として使えるからしょうがないのかなあ。
引用返信 [メール受信/OFF] 削除キー/
■5191 / inTopicNo.30)  Re[10]: 式サンプルです
□投稿者/ うにん -(2009/09/30(Wed) 15:11:31)
    >>>>この場合たまたま最後が計算式だから
    >>>>#DSQL("ID>0) ORDER BY ID DESC LIMIT (1")
    >>>>でもいけるかな。
    > >>
    > >>PostgreSQL 7.2 だけの問題なのかわからないですけど
    > >>コレでは通らないのですよね。

    > PostgreSQL 8.1 でも大丈夫でした。

    何と、MySQLではLIMITに定数しか使えないので()でくくれない。
    ;SELECT〜をやろうとするとその部分が何でもエラーになるのは、ODBCから複数コマンドを一度に実行できないような制限がかかってる感じで原因不明。
    MySQL Query Browserでも、1行に;で複数コマンド書くと警告が出て最初のしか実行しない。

引用返信 [メール受信/OFF] 削除キー/
■5192 / inTopicNo.31)  Re[11]: 式サンプルです
□投稿者/ hidetake -(2009/09/30(Wed) 17:36:20)
    2009/09/30(Wed) 17:48:47 編集(投稿者)

    > ;SELECT〜をやろうとするとその部分が何でもエラーになるのは、ODBCから複数コマンドを一度に実行できないような制限がかかってる感じで原因不明。
    > MySQL Query Browserでも、1行に;で複数コマンド書くと警告が出て最初のしか実行しない。
    >

    これ
    http://dev.mysql.com/doc/refman/4.1/ja/comments.html
    を見る限り、特に問題は無さそうだが

    http://www.hostgeekz.com/docs/mysql/japanese/manual.ja_Clients.html#mysql_real_connect
    http://dev.mysql.com/doc/refman/5.1/ja/c-api-multiple-queries.html
    を見ると、

    CLIENT_MULTI_STATEMENTS
    > クライアントが複数行クエリ(`;' をステートメントの区切りとする)を
    > 送信する可能性があることをサーバに通知する。このフラグが設定されて
    > いない場合、複数行クエリは無効。MySQL 4.1 の新機能。
    と、デフォルトでは使えないのかな?

    SQLインジェクション攻撃対策?

    ODBCドライバの設定項目とか、オプションで指定できないのかな?



    http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/502.html
    を見ると、; で区切って複数ステートメントを実行できるもの
    ; さえも必要無しで複数ステートメントできるものもあるらしい。

    ; での区切りって SQLの標準構文だと思っていました。 (^^;


    ※追加※
    http://www.tokumaru.org/d/20080502.html

    マルチステートメントを利用できるのは
    Microsoft SQL Server , PostgreSQL , Sybase (SQLite もだと思う)
    Microsoft SQL Server は ; さえもいらない。

    orz

引用返信 [メール受信/OFF] 削除キー/
■5193 / inTopicNo.32)  Re[12]: 式サンプルです
□投稿者/ hidetake -(2009/09/30(Wed) 18:36:32)
    2009/09/30(Wed) 18:41:25 編集(投稿者)

    と言うことで

    #DSQL("ID>0 ORDER BY ID DESC LIMIT 1")

    を無理矢理通すならば

    #DSQL("ID>0) ORDER BY ID DESC LIMIT 1 --(")

    と、LIMIT 1 以降を SQL標準の -- で
    コメントアウト化しましょう! (^^)

    もちろん、全ての DB でテストしたわけでは
    ありません。PostgreSQL 7.2 ではコレで通る
    ようになりました。 :-)

    # 何故にこんな事で悩まないといけない!? orz

    # てか、最大値を取得するだけなら、先に書いた
    # ようにもっと簡単な方法がある・・・

引用返信 [メール受信/OFF] 削除キー/
■5197 / inTopicNo.33)  Re[12]: 式サンプルです
□投稿者/ うにん -(2009/09/30(Wed) 19:54:57)
    >>;SELECT〜をやろうとするとその部分が何でもエラーになるのは、ODBCから複数コマンドを一度に実行できないような制限がかかってる感じで原因不明。
    > CLIENT_MULTI_STATEMENTS
    >>クライアントが複数行クエリ(`;' をステートメントの区切りとする)を
    >>送信する可能性があることをサーバに通知する。このフラグが設定されて
    >>いない場合、複数行クエリは無効。MySQL 4.1 の新機能。
    > と、デフォルトでは使えないのかな?

    ODBCドライバの設定オプションフラグが大量にあるのですが、
    Allow Multiple Statementで使えるようになりましたv^^v

    > ; での区切りって SQLの標準構文だと思っていました。 (^^;

    私はどっちかというとコマンドラインツールでの行終了フラグが主用途かと...

引用返信 [メール受信/OFF] 削除キー/
■5198 / inTopicNo.34)  Re[13]: 式サンプルです
□投稿者/ うにん -(2009/09/30(Wed) 19:57:15)
    > # てか、最大値を取得するだけなら、先に書いた
    > # ようにもっと簡単な方法がある・・・

    最大値だと他人が後から取得したシリアル値になってしまうこともありそうな?

引用返信 [メール受信/OFF] 削除キー/
■5200 / inTopicNo.35)  Re[14]: 式サンプルです
□投稿者/ hidetake -(2009/09/30(Wed) 20:17:09)
    2009/09/30(Wed) 20:28:36 編集(投稿者)

    >># てか、最大値を取得するだけなら、先に書いた
    >># ようにもっと簡単な方法がある・・・
    >
    > 最大値だと他人が後から取得したシリアル値になってしまうこともありそうな?
    >

    それはそうですけれど、元々内容がそのような内容で
    #DSQL("ID>0 ORDER BY ID DESC LIMIT 1")
    が、それを取得するための記述ですから。



    まぁ〜、もう1つの
    #DSQL("ID=(SELECT MAX(ID) FROM tbl)")
    とするならば、#DSQL しなくとも
    SELECT MAX(ID) FROM tbl
    しちゃえばいい話ですから。

引用返信 [メール受信/OFF] 削除キー/
■5201 / inTopicNo.36)  Re[15]: 式サンプルです
□投稿者/ 桐々舞 -(2009/09/30(Wed) 21:46:52)
    > SELECT MAX(ID) FROM tbl

    桐で出来るのですか?
引用返信 [メール受信/OFF] 削除キー/
■5203 / inTopicNo.37)  Re[16]: 式サンプルです
□投稿者/ hidetake -(2009/09/30(Wed) 22:01:43)
    >>SELECT MAX(ID) FROM tbl
    > 桐で出来るのですか?

    何も読んでいないのですね!?

    先に説明済みの実行結果は・・・
    psqlodbc_xxxx.log から



    [5.797] [ fetched 1 rows ]
    [5.828]conn=03603AC8, query='SELECT COUNT(*) FROM "hogehoge"'
    [5.984] [ fetched 1 rows ]
    [6.000]conn=03603AC8, query='SELECT MAX("ID") FROM "hogehoge"'
    [6.140] [ fetched 1 rows ]
    [8.156]conn=03603AC8, PGAPI_Disconnect




引用返信 [メール受信/OFF] 削除キー/
■5205 / inTopicNo.38)  Re[17]: 式サンプルです
□投稿者/ 桐々舞 -(2009/09/30(Wed) 22:45:50)
    桐のどこに何を記載すれば出来るのか判りません。
引用返信 [メール受信/OFF] 削除キー/
■5206 / inTopicNo.39)  Re[18]: 式サンプルです
□投稿者/ hidetake -(2009/09/30(Wed) 22:50:19)
引用返信 [メール受信/OFF] 削除キー/
■5208 / inTopicNo.40)  Re[19]: 式サンプルです
□投稿者/ 桐々舞 -(2009/09/30(Wed) 23:06:26)
    グループ化しいないと#max()が入りませんでした。
引用返信 [メール受信/OFF] 削除キー/

<前の20件 | 次の20件>

トピック内ページ移動 / << 0 | 1 | 2 >>

[このトピックに返信]
Mode/  Pass/

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -