程式狂想筆記

一個攻城師奮鬥史

0%

用 Sublime 分割 SQL 語句 LIKE 1000筆資料 語句

Oralce 有限制 Like 不能超過 1000 多筆。之前有寫過相關文章如下

  1. 寫程式使用 split 切割不會注意到的陷阱 | 程式狂想筆記
  2. Oracle WHERE IN 條件塞入超過 500 筆查詢條件方法 | 程式狂想筆記

但這些虛要手動處理太多,不能一次喝成,有時候資料量真的太大,只能分開查。最近想到 Sublime Text 方法,簡單做個記錄。
還是需要滿多步驟

DEMO 範例

1
2
3
4
'這是第 1 行',
'這是第 2 行',
'這是第 3 行',
'這是第 4 行',

注意:上面有五行,因為 regex 需要多一行。

例外處理

假如框選最後一行,只框選一行。就要多做一個換行
如下:

產生方法

  1. 在 Sublime 使用 regex ((.*\n){1,3})
  1. 選擇 Find all 按鈕
  1. 按 「Shift + 方向鍵左(←)」 後,再按「Shift + 方向鍵左(↑)」
  1. Ctrl + J ,按完就完成兩段句子,最後一行可刪掉

  2. 複製兩段 LIKE SQL 語句,中間替代參數也要先設定

  1. 全部框選:id: Ctrl + D,把1,2行複製起來,貼上即可完成
  1. 把最後,移除

就可以快樂貼到編輯器查詢。

缺點

真的行數到超多筆的話,這個方法應該也沒辦法。

其實這個可以用程式寫,有空寫在補在這。

CodeSandbox
沒有認真寫

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<template>
<div class="hello">
<textarea v-model.lazy="item" cols="30" rows="10"></textarea>
<textarea v-model.lazy="sql" id="" cols="30" rows="10"></textarea>
</div>
<div>
<textarea v-model="result" cols="30" rows="10" readonly></textarea>
</div>
</template>

<script>
import * as a from "lodash";

export default {
name: "HelloWorld",
data() {
return {
item: "",
sql: "",
};
},
method: {
getDataDebounced() {},
},
created() {
this.getDataDebounced = a.debounce(() => {
let items = a.chunk(
this.item.split("\n").filter((str) => str !== ""),
1000
);
console.log(items);
items = items.map((a) => {
a = a.map((str) => "'" + str + "'");
return a.join(",");
});
let r = "";
items.forEach((item) => {
let aa = this.sql.replace("::id::", item);
console.log(aa);
r += aa;
r += "\n";
});
console.log(r);
this.result = r;
console.log(this.result);
}, 1000);
},
computed: {
result() {
let items = a.chunk(
this.item.split("\n").filter((str) => str !== ""),
1000
);
console.log(items);
items = items.map((a) => {
a = a.map((str) => "'" + str + "'");
return a.join(",");
});
let r = "";
items.forEach((item) => {
let aa = this.sql.replace("::id::", item);
console.log(aa);
r += aa;
r += "\n";
});
return r;
},
},
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>