[過去ログ] PostgreSQL Part.11©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
968
(7): 2023/07/15(土)18:40 ID:nkjGsW1C(1) AAS
ストアドファンクションでINSERTしたレコードを取得するにはどうすればいいでしょうか?
INSERTは下記のクエリで行っています。
RETURNS VOID になっている所を、RETURNS TABLEにしてレコードを取得したいのですが、具体的なソースコードが思いつきません。
https://ideone.com/5JPpQ4
969: 968 2023/07/15(土)18:49 ID:??? AAS
すみません。自己解決しました。
970: 2023/07/15(土)19:15 ID:??? AAS
>>968
解決した方法も書いておけよ。そうすることでQ&Aが成り立つし、次に困ったときに返信があることが期待できるようになるんだぞ。
971: 2023/07/15(土)19:58 ID:??? AAS
それが人にものを頼む態度か
972: 2023/07/15(土)21:53 ID:??? AAS
RETURNINGやろ
それ以外で自決してたら知らん
973
(1): 968 2023/07/16(日)01:02 ID:??? AAS
解決した方法は下記です。
RETURNS TABLE - RETURN QUERY です。
https://ideone.com/kgQo96

もっといい方法もあると思いますが、自分では思い付きませんでした。
974: 2023/07/16(日)01:27 ID:n5R9lLii(1/5) AAS
>>973
変数というものがわからないのか?
975: 2023/07/16(日)01:30 ID:n5R9lLii(2/5) AAS
初心者はわかっている値を再度、SELECTしたりするよな。
976: 2023/07/16(日)01:31 ID:n5R9lLii(3/5) AAS
見れば見るほど何がやりたいのかわからない
977: 968 2023/07/16(日)02:03 ID:??? AAS
すみません。
どこが悪いのでしょうか。

RETURN QUERY SELECT については、
使用時はプログラムで INSERTINCIDENT() に引数(incident_name, full_text, registered_by) を与えて呼び出し、
プログラムで与えた引数の値と、INSERT された値が一致するかどうかを比較する必要があるので、意図して SELECT しています。
978: 2023/07/16(日)02:13 ID:n5R9lLii(4/5) AAS
ネタじゃなければ、確認することをくっつけて実行するのは素人だと思ってください。

そもそもincident_nameとfull_textが引数になってないでしょうに。
979: 2023/07/16(日)02:15 ID:n5R9lLii(5/5) AAS
'件名',
'本文本文本文',

公表しているコードだとリテラル値を使っているだけなので、いきなり脳内情報を書き込まれてもわかりません。
980: 968 2023/07/16(日)02:36 ID:6TXuZh7c(1) AAS
>公表しているコードだとリテラル値を使っているだけなので、いきなり脳内情報を書き込まれてもわかりません。
すみません。引数をつけて書き直しました。
https://ideone.com/6Ufeev

>ネタじゃなければ、確認することをくっつけて実行するのは素人だと思ってください。
この件が、ソースコードのどの部分にあたるのか理解出来ていません。
おかしな理解のまま進みたくないので、教えて頂けないでしょうか。
981: 2023/07/18(火)11:43 ID:nPycmVG4(1/2) AAS
そのファンクションが必要な理由がわからない
982: 2023/07/18(火)16:17 ID:nPycmVG4(2/2) AAS
グルグル回ってるな。
INSERTしたレコードの列値がすべてわかっているのに、そのレコードをSELECTするのはPostgreSQLを信用していないということなのか?
983: 2023/07/18(火)21:22 ID:??? AAS
idがストアドの中で採番されるからそれを取りたいんだろ。タイムスタンプなんかも。
984
(1): 2023/07/18(火)22:28 ID:DR+/wZzQ(1) AAS
SELECT文のFROM句にINSERTしてSELECTするファンクションを置きたい理由がわからない。

手続きをファンクションとして隠蔽したいんだろう。

idの最大値の求め方も同時実行の考慮なしだし、INSERTが想定通りだったか、自分で確認するらしいし、もはや目的がわからない。
985: 2023/07/19(水)00:12 ID:??? AAS
>>984
>idの最大値の求め方も同時実行の考慮なしだし
SERIALIZABLEかもしれないよ
986: 2023/07/19(水)00:17 ID:??? AAS
INSERTが想定通りだったかSELECTで確認する
さらにそのSELECTが想定通りだったか・・・・詰み
987: 968 2023/07/22(土)22:26 ID:??? AAS
INSERT 時に採番される ID とタイムスタンプを取得したいので、ストアドプロシージャではなくストアドファンクションにしました。
ファンクションではトランザクションが使えないので、 serializable にする事で妥協しました。

全てのクエリが、ファンクションを呼び出すプログラム側 ( Npgsql ) の NpgsqlTransaction を使用するので、
プログラム側で IsolationLevel に Serializable を設定しています。

・ファンクションでトランザクションを使う方法
・ストアドプロシージャで戻り値を戻す方法
のいずれかが分かれば serializable 以外に出来るのですが、どうするべきなのかがよく分かりませんでした。
1-
あと 15 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.025s