Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menggunakan string dalam prosedur tersimpan Oracle

Sejauh yang saya mengerti masalah Anda, Anda memerlukan metode untuk menerima string yang dibatasi koma sebagai input, memecahnya menjadi kumpulan bilangan bulat dan kemudian membandingkan angka (baca:bilangan bulat) dengan nilai dalam kumpulan ini.

Oracle terutama menawarkan tiga jenis koleksi - varray , tabel bertingkat dan array asosiatif . Saya akan menjelaskan cara mengonversi string yang dipisahkan koma menjadi tabel bersarang dan menggunakannya untuk membuat kueri atau membandingkan.

Pertama, Anda perlu menentukan tipe objek dalam skema. Anda dapat menulis kueri menggunakan jenis ini hanya jika Anda mendefinisikannya di tingkat skema.

CREATE OR REPLACE TYPE entity_id AS OBJECT (id_val NUMBER(28));
/

CREATE OR REPLACE TYPE entity_id_set IS TABLE OF entity_id;
/

Selanjutnya, tentukan fungsi seperti ini:

FUNCTION comma_to_nt_integer (p_comma_delimited_str IN VARCHAR)
    RETURN entity_id_set IS
    v_table     entity_id_set;
BEGIN
    WITH temp AS (SELECT TRIM(BOTH ',' FROM p_comma_delimited_str) AS str FROM DUAL)
        SELECT ENTITY_ID(TRIM (REGEXP_SUBSTR (t.str,
                                    '[^,]+',
                                    1,
                                    LEVEL)))
                   str
          BULK COLLECT INTO v_table
          FROM temp t
    CONNECT BY INSTR (str,
                      ',',
                      1,
                      LEVEL - 1) > 0;

    RETURN v_table;
END comma_to_nt_integer;

Anda selesai dengan DDL yang diperlukan untuk tugas ini. Sekarang, Anda cukup menulis kueri Anda sebagai:

SELECT *
  FROM ..  
 WHERE ...
       AND gfcid in (table(comma_to_nt_integer(GDFCID_STRING)));


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Tidak Setara Operator

  2. Oracle:Bisakah saya memberi tahu secara terprogram jika suatu prosedur berisi komit?

  3. Oracle/SQL:Mengapa kueri SELECT * FROM record WHERE rownum>=5 AND rownum <=10 - mengembalikan nol baris

  4. Apa yang lebih baik? Subquery atau bagian dalam bergabung dengan sepuluh tabel?

  5. Masukkan Kumpulan Data ke Tabel Oracle