質問編集履歴
4
内容の編集
title
CHANGED
File without changes
|
body
CHANGED
@@ -53,7 +53,7 @@
|
|
53
53
|
open cur_manager;
|
54
54
|
fetch cur_manager into rec_manager;
|
55
55
|
loop
|
56
|
-
--値の入力チェックや編集を行う
|
56
|
+
--値の入力チェックや編集を行う(15項目)
|
57
57
|
--項目の入力チェックは省略しています
|
58
58
|
--値をセット
|
59
59
|
tmp_test.test1 = rec_manager.first_name;
|
3
チェックや編集内容を更新
title
CHANGED
File without changes
|
body
CHANGED
@@ -45,6 +45,8 @@
|
|
45
45
|
rec_manager record;
|
46
46
|
tmp_test test%rowtype;
|
47
47
|
rec_test record;
|
48
|
+
fnc_return text;
|
49
|
+
err_msg text;
|
48
50
|
|
49
51
|
begin
|
50
52
|
|
@@ -58,13 +60,16 @@
|
|
58
60
|
if rec_manager.id = 1 then
|
59
61
|
tmp_test.test_num = rec_manager.age;
|
60
62
|
-- 別functionで年齢から西暦等を取得する処理
|
61
|
-
-- select fnc_get_seireki(rec_manager.age) into
|
63
|
+
-- select fnc_get_seireki(rec_manager.age) into fnc_return;
|
64
|
+
|
65
|
+
--エラーが発生している場合
|
66
|
+
if fnc_return = 'true' then
|
67
|
+
err_msg = '西暦が取得できません';
|
68
|
+
else
|
69
|
+
tmp_test.test2 = fnc_return;
|
62
70
|
end if;
|
63
71
|
--...
|
64
72
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
73
|
// rec_test = tmp_test; --恐らくエラーが発生している
|
69
74
|
end loop;
|
70
75
|
|
2
文法の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -29,12 +29,13 @@
|
|
29
29
|
);
|
30
30
|
```
|
31
31
|
```Postgres
|
32
|
-
CREATE OR REPLACE FUNCTION fnc_main(
|
32
|
+
CREATE OR REPLACE FUNCTION fnc_main(user_id text)
|
33
33
|
RETURNS character varying
|
34
34
|
LANGUAGE plpgsql
|
35
35
|
AS $function$
|
36
36
|
declare
|
37
37
|
|
38
|
+
-- データが30万件ほどある
|
38
39
|
cur_manager cursor is
|
39
40
|
select
|
40
41
|
first_name
|
@@ -50,14 +51,24 @@
|
|
50
51
|
open cur_manager;
|
51
52
|
fetch cur_manager into rec_manager;
|
52
53
|
loop
|
54
|
+
--値の入力チェックや編集を行う
|
53
|
-
|
55
|
+
--項目の入力チェックは省略しています
|
54
56
|
--値をセット
|
55
57
|
tmp_test.test1 = rec_manager.first_name;
|
58
|
+
if rec_manager.id = 1 then
|
59
|
+
tmp_test.test_num = rec_manager.age;
|
60
|
+
-- 別functionで年齢から西暦等を取得する処理
|
61
|
+
-- select fnc_get_seireki(rec_manager.age) into tmp_test.test4;
|
62
|
+
end if;
|
56
63
|
--...
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
|
57
|
-
rec_test = tmp_test;
|
68
|
+
// rec_test = tmp_test; --恐らくエラーが発生している
|
58
69
|
end loop;
|
59
70
|
|
60
|
-
insert into test values(rec_test);
|
71
|
+
//insert into test values(rec_test); --恐らくエラーが発生している
|
61
72
|
|
62
73
|
return '';
|
63
74
|
end;
|
1
誤字を修正しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
<実装したい背景>30万件ほどのデータのselectをカーソルにて行い、loop内で1件ずつinsertしたところ、タイムアウトしてしまったためです。insert文を大量に発行していることが原因だと考えています。
|
4
4
|
また、複雑なチェック処理やデータの加工を行っている関係上、insert前に1件ずつの処理が必要です。
|
5
|
-
そのため、「insert ~ select
|
5
|
+
そのため、「insert ~ select」で一括インサートが難しい状況です。
|
6
6
|
|
7
7
|
<試したこと>
|
8
8
|
Oracleのバルクインサートのようなものが使えないかと考えましたが、
|