teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2018/12/04 05:35

投稿

Orlofsky
Orlofsky

スコア16419

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