Contents

用 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 需要多一行。

例外處理

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

./EZ9AfmU.png

產生方法

  1. 在 Sublime 使用 regex ((.*\n){1,3})

/blog/posts/%E7%94%A8-Sublime-%E5%88%86%E5%89%B2-SQL-%E8%AA%9E%E5%8F%A5-LIKE-1000%E7%AD%86%E8%B3%87%E6%96%99-%E8%AA%9E%E5%8F%A5/XQvraNs.png

  1. 選擇 Find all 按鈕

/blog/posts/%E7%94%A8-Sublime-%E5%88%86%E5%89%B2-SQL-%E8%AA%9E%E5%8F%A5-LIKE-1000%E7%AD%86%E8%B3%87%E6%96%99-%E8%AA%9E%E5%8F%A5/eSl1lCW.png

  1. 按 「Shift + 方向鍵左(←)」 後,再按「Shift + 方向鍵左(↑)」

/blog/posts/%E7%94%A8-Sublime-%E5%88%86%E5%89%B2-SQL-%E8%AA%9E%E5%8F%A5-LIKE-1000%E7%AD%86%E8%B3%87%E6%96%99-%E8%AA%9E%E5%8F%A5/AW4FHWp.png

  1. Ctrl + J ,按完就完成兩段句子,最後一行可刪掉

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

/blog/posts/%E7%94%A8-Sublime-%E5%88%86%E5%89%B2-SQL-%E8%AA%9E%E5%8F%A5-LIKE-1000%E7%AD%86%E8%B3%87%E6%96%99-%E8%AA%9E%E5%8F%A5/faRy4L8.png

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

./uhqhXg0.png
./n3a9Ou7.png
./yY1rw1h.png

  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>