Rumah pangkalan data tutorial mysql 给Oracle添加split和splitstr函数的方法

给Oracle添加split和splitstr函数的方法

Jun 07, 2016 pm 05:55 PM
oracle split sql

最近项目中有很多需要做批量操作的需求,客户端把一组逗号分隔的ID字符串传给数据库,存储过程就需要把它们分割,然后逐个处理

最近项目中有很多需要做批量操作的需求,客户端把一组逗号分隔的ID字符串传给数据库,存储过程就需要把它们分割,然后逐个处理。
以往的处理方式有如下几种:

1、在存储过程内写循环,逐个分析字符串中的ID,然后逐个处理。缺点:循环一次处理一个,如果每次判断都很多,效率将很受影响。适合每次处理要做单独判断的情况。

2、使用临时表,先调用一个存储过程将ID拆分并插入到临时表中,然后结合临时表可以写SQL一次处理多笔。缺点:需要插临时表,效率不高,数据量越大影响越严重。

以前的项目用的最多的还是第2中方式,毕竟方便,且效率比第1种好。
现在项目中用到了很多很多的批量操作,很多的重复代码让我不厌其烦。忽然想到,.Net和JS中都有split类似的函数,拆分字符串很方便,oracle中要是也有这样的功能该多好呀。

多方查找资料发现,给oracle添加split函数是完全可以实现的,避免了插入临时表,所以效率比上面的第2中方法效率高很多。

后来我还添加了splitstr函数,可以很方便获取字符串中的指定节点。
有了这两个函数,处理批量操作,真是如虎添翼,效率倍增,嘿嘿……
好了,闲话少说,上代码!如有不妥之处,请各位前辈博友斧正。
代码如下:
/*
* Oracle 创建 split 和 splitstr 函数
*/
/* 创建一个表类型 */
create or replace type tabletype as table of VARCHAR2(32676)
/
/* 创建 split 函数 */
CREATE OR REPLACE FUNCTION split (p_list CLOB, p_sep VARCHAR2 := ',')
RETURN tabletype
PIPELINED
/**************************************
* Name: split
* Author: Sean Zhang.
* Date: 2012-09-03.
* Function: 返回字符串被指定字符分割后的表类型。
* Parameters: p_list: 待分割的字符串。
p_sep: 分隔符,默认逗号,也可以指定字符或字符串。
* Example: SELECT *
FROM users
WHERE u_id IN (SELECT COLUMN_VALUE
FROM table (split ('1,2')))
返回u_id为1和2的两行数据。
**************************************/
IS
l_idx PLS_INTEGER;
v_list VARCHAR2 (32676) := p_list;
BEGIN
LOOP
l_idx := INSTR (v_list, p_sep);
IF l_idx > 0
THEN
PIPE ROW (SUBSTR (v_list, 1, l_idx - 1));
v_list := SUBSTR (v_list, l_idx + LENGTH (p_sep));
ELSE
PIPE ROW (v_list);
EXIT;
END IF;
END LOOP;
END;
/
/* 创建 splitstr 函数 */
CREATE OR REPLACE FUNCTION splitstr (str IN CLOB,
i IN NUMBER := 0,
sep IN VARCHAR2 := ','
)
RETURN VARCHAR2
/**************************************
* Name: splitstr
* Author: Sean Zhang.
* Date: 2012-09-03.
* Function: 返回字符串被指定字符分割后的指定节点字符串。
* Parameters: str: 待分割的字符串。
i: 返回第几个节点。当i为0返回str中的所有字符,当i 超过可被分割的个数时返回空。
sep: 分隔符,默认逗号,也可以指定字符或字符串。当指定的分隔符不存在于str中时返回sep中的字符。
* Example: select splitstr('abc,def', 1) as str from dual; 得到 abc
select splitstr('abc,def', 3) as str from dual; 得到 空
**************************************/
IS
t_i NUMBER;
t_count NUMBER;
t_str VARCHAR2 (4000);
BEGIN
IF i = 0
THEN
t_str := str;
ELSIF INSTR (str, sep) = 0
THEN
t_str := sep;
ELSE
SELECT COUNT ( * )
INTO t_count
FROM table (split (str, sep));
IF i THEN
SELECT str
INTO t_str
FROM (SELECT ROWNUM AS item, COLUMN_VALUE AS str
FROM table (split (str, sep)))
WHERE item = i;
END IF;
END IF;
RETURN t_str;
END;
/
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara mengimport pangkalan data oracle Cara mengimport pangkalan data oracle Apr 11, 2025 pm 08:06 PM

Kaedah Import Data: 1. Gunakan utiliti SQLLoader: Sediakan fail data, buat fail kawalan, dan jalankan SQLLoader; 2. Gunakan alat IMP/EXP: data eksport, data import. Petua: 1. Disyorkan SQL*loader untuk set data besar; 2. Jadual sasaran harus wujud dan perlawanan definisi lajur; 3. Selepas mengimport, integriti data perlu disahkan.

Cara memeriksa saiz meja oracle Cara memeriksa saiz meja oracle Apr 11, 2025 pm 08:15 PM

Untuk menanyakan saiz ruang meja oracle, ikuti langkah -langkah berikut: Tentukan nama meja dengan menjalankan pertanyaan: pilih Tablespace_Name dari DBA_TableSpaces; Tanya saiz meja dengan menjalankan pertanyaan: pilih jumlah (bait) sebagai total_size, jumlah (bytes_free) sebagai tersedia_space, jumlah (bytes) - jumlah (bytes_free) sebagai digunakan_space dari dba_data_files di mana tablespace_

Cara membuat jadual di oracle Cara membuat jadual di oracle Apr 11, 2025 pm 08:00 PM

Mewujudkan Jadual Oracle melibatkan langkah -langkah berikut: Gunakan sintaks Create Table untuk menentukan nama jadual, nama lajur, jenis data, kekangan, dan nilai lalai. Nama jadual harus ringkas dan deskriptif, dan tidak boleh melebihi 30 aksara. Nama lajur hendaklah menjadi deskriptif, dan jenis data menentukan jenis data yang disimpan dalam lajur. Kekangan tidak null memastikan bahawa nilai null tidak dibenarkan dalam lajur, dan klausa lalai menentukan nilai lalai untuk lajur. Kekangan utama utama untuk mengenal pasti rekod unik jadual. Kekangan utama asing menentukan bahawa lajur dalam jadual merujuk kepada kunci utama dalam jadual lain. Lihat penciptaan pelajar jadual sampel, yang mengandungi kunci utama, kekangan unik, dan nilai lalai.

Cara menyampaikan semula oracle Cara menyampaikan semula oracle Apr 11, 2025 pm 07:33 PM

Oracle menyediakan pelbagai kaedah pertanyaan deduplikasi: Kata kunci yang berbeza mengembalikan nilai yang unik untuk setiap lajur. Kumpulan oleh klausa mengumpulkan hasil dan mengembalikan nilai tidak berulang bagi setiap kumpulan. Kata kunci yang unik digunakan untuk membuat indeks yang mengandungi hanya baris unik, dan pertanyaan indeks akan secara automatik deduplicate. Fungsi row_number () memberikan nombor unik dan menapis hasil yang mengandungi hanya baris 1. Min () atau max () mengembalikan nilai tidak berulang dari lajur angka. Operator Intersect mengembalikan nilai -nilai bersama kedua -dua set hasil (tiada pendua).

Apa yang perlu dilakukan sekiranya oracle tidak dapat dibuka Apa yang perlu dilakukan sekiranya oracle tidak dapat dibuka Apr 11, 2025 pm 10:06 PM

Penyelesaian kepada Oracle tidak boleh dibuka termasuk: 1. Mulakan perkhidmatan pangkalan data; 2. Mulakan pendengar; 3. Periksa konflik pelabuhan; 4. Menetapkan pembolehubah persekitaran dengan betul; 5. Pastikan perisian firewall atau antivirus tidak menghalang sambungan; 6. Periksa sama ada pelayan ditutup; 7. Gunakan RMAN untuk memulihkan fail rasuah; 8. Periksa sama ada nama perkhidmatan TNS betul; 9. Periksa sambungan rangkaian; 10. Pasang semula perisian Oracle.

Cara menyelesaikan kod gadbled di oracle Cara menyelesaikan kod gadbled di oracle Apr 11, 2025 pm 10:09 PM

Masalah Garbled Oracle boleh diselesaikan dengan memeriksa set aksara pangkalan data untuk memastikan ia sepadan dengan data. Tetapkan set aksara klien untuk memadankan pangkalan data. Tukar data atau ubah suai set aksara lajur untuk memadankan set aksara pangkalan data. Gunakan set aksara Unicode dan elakkan set aksara multibyte. Semak bahawa tetapan bahasa pangkalan data dan pelanggan betul.

Cara menambah medan meja ke oracle Cara menambah medan meja ke oracle Apr 11, 2025 pm 07:30 PM

Gunakan pernyataan ALTER Jadual, sintaks khusus adalah seperti berikut: alter table table_name Tambah column_name data_type [kekangan-klausa]. Di mana: Table_name adalah nama jadual, column_name adalah nama medan, data_type adalah jenis data, dan kekangan-fasal adalah kekangan pilihan. Contoh: Alter Table Pekerja menambah e -mel varchar2 (100) Tambahkan medan e -mel ke jadual pekerja.

Cara menyahpasang pemasangan Oracle gagal Cara menyahpasang pemasangan Oracle gagal Apr 11, 2025 pm 08:24 PM

Nyahpasang Kaedah untuk kegagalan pemasangan Oracle: Tutup Perkhidmatan Oracle, Padam Fail Program Oracle dan Kekunci Pendaftaran, Nyahpasang pembolehubah persekitaran Oracle, dan mulakan semula komputer. Jika penyahpasang gagal, anda boleh menyahpasang secara manual menggunakan alat penyahpasang Oracle Universal.

See all articles