Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да разделя низ в PL/SQL?

В тази статия давам пример за функция, която най-вече използвам за разделяне на низ в PL/SQL. Особено, когато пиша програма за импортиране на файл с разделители. Ето тази функция и пример за това как да я използвате.

PL/SQL функция за разделяне на низ

Тази функция приема четири параметъра и подробностите за тези параметри са както следва:

  1. Source_String :Низ за разделяне
  2. Позиция_на поле :Позиция на разделителя
  3. Непрекратен :False по подразбиране, но ако подадете True, тогава той ще добави посочения разделител в края на низа.
  4. Разграничител :По подразбиране е запетая ',', можете да подадете всеки друг разделител.
CREATE OR REPLACE FUNCTION GetString (
Source_string IN VARCHAR2,
Field_position IN NUMBER,
UnTerminated IN BOOLEAN DEFAULT FALSE,
Delimiter IN VARCHAR2 DEFAULT ',')
RETURN VARCHAR2
IS
iPtrEnd PLS_INTEGER := 0;
iPtrStart PLS_INTEGER := 0;
vcSourceStrCopy VARCHAR2 (4000) := Source_string;
BEGIN
IF UnTerminated
THEN
vcSourceStrCopy := vcSourceStrCopy || Delimiter;
END IF;

IF Field_Position > 1
THEN
iPtrStart :=
INSTR (vcSourceStrCopy,
Delimiter,
1,
Field_Position - 1)
+ LENGTH (Delimiter);
ELSE
iPtrStart := 1;
END IF;

iPtrEnd :=
INSTR (vcSourceStrCopy,
Delimiter,
1,
Field_Position);
RETURN SUBSTR (vcSourceStrCopy, iPtrStart, (iPtrEnd - iPtrStart));
END GetString;

Пример:Използвайте тази функция в PL/SQL програма

SET SERVEROUTPUT ON;

DECLARE
   v_string      VARCHAR2 (1000) := 'Java|.Net|C|Oracle|PHP';

   TYPE t_string IS TABLE OF VARCHAR2 (1000)
                       INDEX BY BINARY_INTEGER;

   t_str_array   t_string;
BEGIN
   FOR i IN 1 .. 5
   LOOP
      t_str_array (i) :=
         getstring (v_string,
                    i,
                    TRUE,
                    '|');
   END LOOP;

   FOR j IN t_str_array.FIRST .. t_str_array.LAST
   LOOP
      DBMS_OUTPUT.put_Line (t_str_array (j));
   END LOOP;
END;
/

Изход:

Java
.Net
C
Oracle
PHP
PL/SQL procedure successfully completed.

Вижте също:

  • Експортирайте данни в JSON с помощта на PL/SQL в Oracle 11g
  • PL/SQL програма за отпечатване на данни за служители
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. merge update oracle не може да получи стабилен набор от редове

  2. как да извикам един съхранен процес от прашник и да модифицирам рекурсора, който се връща?

  3. База данни срещу пространство за таблици, каква е разликата?

  4. Как да получите името на месеца от дата в Oracle

  5. Предотвратяване на отпадане на таблица в целева схема в Oracle Streams