回答編集履歴

1

追記

2018/12/04 05:35

投稿

Orlofsky
Orlofsky

スコア16415

test CHANGED
@@ -1 +1,83 @@
1
1
  JOB_NAMEの後ろに[SEQUENCE](http://oracle.se-free.com/dml/10_seq.html) を使って連番を追加してみては?
2
+
3
+
4
+
5
+ ```SQL
6
+
7
+ -- ジョブ名と同じSEQUENCE名というのも混乱するでしょうから、
8
+
9
+ CREATE SEQUENCE SEQ_Embulk_Test MINVALUE 1 MAXVALUE 9999999999999999999 INCREMENT BY 1 START WITH 39 NOCACHE ORDER NOCYCLE ;
10
+
11
+ ```
12
+
13
+ ```SQL
14
+
15
+ create or replace trigger embulk_tr
16
+
17
+
18
+
19
+ after insert on INPUT_TEST for each row
20
+
21
+
22
+
23
+ DECLARE
24
+
25
+ pragma autonomous_transaction;
26
+
27
+ L_SEQ_Embulk_Test NUMBER ;
28
+
29
+ begin
30
+
31
+ -- 意味のある字下げをしないから、コードを読みにくい
32
+
33
+ dbms_output.put_line('-------------------------');
34
+
35
+ dbms_output.put_line('OracleDB to BigQuery Bulk Insert Start');
36
+
37
+ -- ↓ 無名ブロック
38
+
39
+ SELECT SEQ_Embulk_Test.NEXTVAL INTO L_SEQ_Embulk_Test FROM DUAL ;
40
+
41
+
42
+
43
+ IF INSERTING THEN
44
+
45
+ DBMS_SCHEDULER.CREATE_JOB ( -- ↓桁あふれは考慮してない
46
+
47
+ JOB_NAME => 'Embulk_Test_' || TO_CHAR(L_SEQ_Embulk_Test, 'FM0000000000000000000'),
48
+
49
+ JOB_TYPE => 'EXECUTABLE',
50
+
51
+ JOB_ACTION => 'C:\Users\xxxxxx\Desktop\embulk\cmd.exe /c C:\Users\xxxxxx\Desktop\embulk\oracle_to_bigquery.bat',
52
+
53
+ start_date => TO_DATE('2018/11/13 00:00:00','yyyy/mm/dd hh24:mi:ss'),
54
+
55
+ end_date => TO_DATE('2999/12/31 00:00:00','yyyy/mm/dd hh24:mi:ss'),
56
+
57
+ auto_drop => TRUE,
58
+
59
+ enabled => TRUE
60
+
61
+ );
62
+
63
+ END IF;
64
+
65
+
66
+
67
+ dbms_output.put_line('OracleDB to BigQuery Bulk Insert End');
68
+
69
+ dbms_output.put_line('-------------------------');
70
+
71
+ end;
72
+
73
+ /
74
+
75
+ ```
76
+
77
+
78
+
79
+ trigger は PL/SQL ですから、タグを追加しましょう。
80
+
81
+ PL/SQLはきちんと勉強しないと困りますよ。
82
+
83
+ [ここからはじめよう Oracle PL/SQL入門](https://www.oracle.com/technetwork/jp/ondemand/database/db-basic/b-11-plsql-1448399-ja.pdf)