Paket DBMS_UTILITY berisi sejumlah subprogram utilitas. PolarDB for PostgreSQL (Compatible with Oracle) mendukung subset fungsi dan prosedur dari paket DBMS_UTILITY milik Oracle.
Paket DBMS_UTILITY menyediakan hal-hal berikut:
|
API |
Type |
Return type |
Description |
|
|
stored procedure |
N/A |
Menganalisis tabel database. |
|
|
stored procedure |
N/A |
Menganalisis tabel partisi. |
|
|
stored procedure |
N/A |
Menganalisis tabel skema. |
|
|
stored procedure |
N/A |
Menormalisasi string. Misalnya, menghapus spasi berlebih. |
|
|
stored procedure |
N/A |
Mengonversi daftar nama yang dipisahkan koma menjadi tabel nama. |
|
|
stored procedure |
N/A |
Mendapatkan versi database. |
|
|
stored procedure |
N/A |
Menjalankan pernyataan DDL. |
|
|
function |
TEXT |
Mengembalikan konten terformat dari tumpukan panggilan saat ini. |
|
|
function |
TEXT |
Mengembalikan konten terformat dari tumpukan panggilan pada titik tempat pengecualian dilemparkan. |
|
|
function |
TEXT |
Mengembalikan konten terformat dari tumpukan panggilan pada titik tempat pengecualian dilemparkan. |
|
|
function |
NUMBER |
Mendapatkan waktu CPU saat ini. |
|
|
stored procedure |
N/A |
Mendapatkan objek yang bergantung pada objek tertentu. |
|
|
function |
NUMBER |
Menghitung nilai hash. |
|
|
stored procedure |
BINARY_INTEGER |
Mendapatkan nilai parameter inisialisasi database. |
|
|
function |
NUMBER |
Mendapatkan waktu saat ini. |
|
|
stored procedure |
N/A |
Mengurai nama tertentu menjadi komponen-komponennya. |
|
|
stored procedure |
N/A |
Mengonversi tabel nama menjadi daftar yang dipisahkan koma. |
Dibandingkan dengan Oracle, PolarDB for PostgreSQL (Oracle Compatible) menyediakan implementasi parsial dari paket DBMS_UTILITY. Hanya fungsi dan stored procedure yang tercantum dalam tabel di atas yang didukung.
Tabel ini mencantumkan variabel publik yang tersedia dalam paket DBMS_UTILITY.
|
Parameter |
Type |
Value |
Description |
|
|
|
1 |
Untuk stored procedure |
|
|
|
— |
Menyimpan daftar nama panjang. |
|
|
|
— |
Menyimpan daftar pengguna dan nama. |
Jenis DBMS_UTILITY
LNAME_ARRAY
Jenis LNAME_ARRAY menyimpan daftar nama panjang, termasuk nama yang memenuhi syarat penuh.
TYPE lname_array IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;
UNCL_ARRAY
Jenis UNCL_ARRAY menyimpan daftar nama pengguna dan objek.
TYPE uncl_array IS TABLE OF VARCHAR2(227) INDEX BY BINARY_INTEGER;
Penggunaan
ANALYZE_DATABASE, ANALYZE_SCHEMA, dan ANALYZE_PART_OBJECT
Gunakan stored procedure ANALYZE_DATABASE(), ANALYZE_SCHEMA(), dan ANALYZE_PART_OBJECT() untuk mengumpulkan statistik untuk tabel dalam database. Saat Anda menjalankan pernyataan ANALYZE, Postgres melakukan sampling data dalam tabel dan mencatat statistik distribusi dalam tabel sistem pg_statistics.
Perbedaan utama antara ANALYZE_DATABASE, ANALYZE_SCHEMA, dan ANALYZE_PART_OBJECT terletak pada cakupannya:
-
ANALYZE_DATABASE: Menganalisis semua tabel di semua skema dalam database saat ini. -
ANALYZE_SCHEMA: Menganalisis semua tabel dalam skema tertentu dalam database saat ini. -
ANALYZE_PART_OBJECT: Menganalisis satu tabel.
Sintaks
Sintaks untuk perintah ANALYZE adalah sebagai berikut:
ANALYZE_DATABASE(method VARCHAR2 [, estimate_rows NUMBER
[, estimate_percent NUMBER [, method_opt VARCHAR2 ]]])
ANALYZE_SCHEMA(schema VARCHAR2, method VARCHAR2
[, estimate_rows NUMBER [, estimate_percent NUMBER
[, method_opt VARCHAR2 ]]])
ANALYZE_PART_OBJECT(schema VARCHAR2, object_name VARCHAR2
[, object_type CHAR [, command_type CHAR
[, command_opt VARCHAR2 [, sample_clause ]]]])
Parameter
-
ANALYZE_DATABASEdanANALYZE_SCHEMAParameter
Description
methodMenentukan apakah stored procedure
ANALYZEmengisi tabelpg_statisticsatau menghapus baris darinya.-
Metode
DELETEmenghapus baris terkait daripg_statistics. -
Metode
COMPUTEdanESTIMATEmenganalisis satu atau beberapa tabel dan mencatat informasi distribusi dalampg_statistics.CatatanCOMPUTEdanESTIMATEidentik. Kedua metode menjalankan pernyataanANALYZEPostgres. Semua parameter lain divalidasi lalu diabaikan.
estimate_rowsMenentukan jumlah baris yang menjadi dasar estimasi statistik.
Parameter ini disediakan untuk kompatibilitas dan diabaikan.
estimate_percentMenentukan persentase baris yang menjadi dasar estimasi statistik.
Parameter ini disediakan untuk kompatibilitas dan diabaikan.
method_optJenis objek yang akan dianalisis. Kombinasi apa pun dari berikut ini:
[ FOR TABLE ] [ FOR ALL [ INDEXED ] COLUMNS ] [ SIZE n ] [ FOR ALL INDEXES ]Parameter ini disediakan untuk kompatibilitas dan diabaikan.
-
-
ANALYZE_PART_OBJECTParameter
Description
schemaNama skema yang berisi objek yang akan dianalisis.
object_nameNama objek partisi yang akan dianalisis.
object_typeJenis objek yang akan dianalisis. Nilai yang valid adalah
Tuntuk tabel danIuntuk indeks.Parameter ini disediakan untuk kompatibilitas dan diabaikan.
command_typeJenis analisis yang akan dilakukan. Nilai yang valid adalah:
-
E: Mengumpulkan statistik estimasi berdasarkan jumlah atau persentase baris yang ditentukan dalamsample_clause. -
C: Menghitung statistik eksak. -
V: Memvalidasi struktur dan integritas partisi.
Parameter ini disediakan untuk kompatibilitas dan diabaikan.
command_optJika
command_typeadalahCatauE, nilainya dapat berupa kombinasi apa pun dari berikut ini:[ FOR TABLE ] [ FOR ALL COLUMNS ] [ FOR ALL LOCAL INDEXES ]Jika
command_typeadalahV, nilainya dapat berupaCASCADEjikaobject_typeadalahT.Parameter ini disediakan untuk kompatibilitas dan diabaikan.
sample_clauseJika
command_typeadalahE, klausa ini menentukan jumlah atau persentase baris yang menjadi dasar estimasi.SAMPLE n { ROWS | PERCENT }Parameter ini disediakan untuk kompatibilitas dan diabaikan.
-
Canonicalize
Stored procedure CANONICALIZE menormalisasi string input sebagai berikut:
-
Jika string tidak diapit tanda kutip ganda, prosedur memvalidasi bahwa string tersebut merupakan identifier yang valid. Jika validasi gagal, prosedur melemparkan pengecualian. Jika string diapit tanda kutip ganda, semua karakter diperbolehkan.
-
Jika string tidak diapit tanda kutip ganda dan tidak mengandung titik, prosedur mengonversi semua karakter alfabet menjadi huruf kapital serta menghapus spasi di awal dan akhir.
-
Jika string diapit tanda kutip ganda dan tidak mengandung titik, prosedur menghapus tanda kutip ganda tersebut.
-
Jika string mengandung titik dan tidak ada segmen yang diapit tanda kutip ganda, prosedur mengonversi setiap segmen menjadi huruf kapital lalu mengapitnya dengan tanda kutip ganda.
-
Jika string mengandung titik dan beberapa segmen diapit tanda kutip ganda, prosedur mengembalikan segmen yang dikutip apa adanya, termasuk tanda kutipnya. Segmen yang tidak dikutip dikonversi menjadi huruf kapital dan diapit tanda kutip ganda.
Sintaks
CANONICALIZE(name VARCHAR2, canon_name OUT VARCHAR2,
canon_len BINARY_INTEGER)
Parameter
|
Parameter |
Description |
|
name |
String input yang akan dinormalisasi. |
|
canon_name |
String output hasil normalisasi. |
|
canon_len |
Jumlah byte dalam name yang akan dinormalisasi, dimulai dari karakter pertama. |
Contoh
-
Buat stored procedure pembungkus untuk memanggil DBMS_UTILITY.CANONICALIZE dan menampilkan hasilnya.
CREATE OR REPLACE PROCEDURE canonicalize ( p_name VARCHAR2, p_length BINARY_INTEGER DEFAULT 30 ) IS v_canon VARCHAR2(100); BEGIN DBMS_UTILITY.CANONICALIZE(p_name,v_canon,p_length); DBMS_OUTPUT.PUT_LINE('Canonicalized name ==>' || v_canon || '<=='); DBMS_OUTPUT.PUT_LINE('Length: ' || LENGTH(v_canon)); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM); DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE); END; -
Jalankan prosedur pembungkus dengan string yang dikutip yang berisi karakter khusus.
EXEC canonicalize('"_+142%"');Hasil berikut dikembalikan:
Canonicalized name ==>_+142%<== Length: 6
COMMA_TO_TABLE
Sintaks
Stored procedure COMMA_TO_TABLE mengonversi daftar nama yang dipisahkan koma menjadi tabel. Setiap entri dalam daftar menjadi entri tabel. Nama-nama tersebut harus diformat sebagai identifier yang valid.
COMMA_TO_TABLE(list VARCHAR2, tablen OUT BINARY_INTEGER,
tab OUT { LNAME_ARRAY | UNCL_ARRAY })
Parameter
|
Parameter |
Description |
|
list |
Daftar nama yang dipisahkan koma. |
|
tablen |
Jumlah entri dalam |
|
tab |
Tabel output yang berisi nama-nama dari |
|
LNAME_ARRAY |
Tabel |
|
UNCL_ARRAY |
Tabel |
Contoh
-
Buat stored procedure pembungkus untuk mengonversi daftar nama menjadi tabel.
CREATE OR REPLACE PROCEDURE comma_to_table ( p_list VARCHAR2 ) IS r_lname DBMS_UTILITY.LNAME_ARRAY; v_length BINARY_INTEGER; BEGIN DBMS_UTILITY.COMMA_TO_TABLE(p_list,v_length,r_lname); FOR i IN 1..v_length LOOP DBMS_OUTPUT.PUT_LINE(r_lname(i)); END LOOP; END; -
Jalankan pernyataan berikut:
EXEC comma_to_table('polardb.dept, polardb.emp, polardb.jobhist');Pernyataan tersebut mengembalikan hasil berikut:
polardb.dept polardb.emp polardb.jobhist
DB_VERSION
Sintaks
Stored procedure DB_VERSION mengembalikan versi database.
DB_VERSION(version OUT VARCHAR2, compatibility OUT VARCHAR2)
Parameter
|
Parameter |
Description |
|
version |
Versi database. |
|
compatibility |
Informasi kompatibilitas database. Maknanya ditentukan oleh implementasi. |
Contoh
Jalankan blok anonim berikut untuk menampilkan informasi versi database.
DECLARE
v_version VARCHAR2(150);
v_compat VARCHAR2(150);
BEGIN
DBMS_UTILITY.DB_VERSION(v_version,v_compat);
DBMS_OUTPUT.PUT_LINE('Version: ' || v_version);
DBMS_OUTPUT.PUT_LINE('Compatibility: ' || v_compat);
END;
Outputnya adalah:
Version: PostgreSQL 11.15 (POLARDB Database Compatible with Oracle 11.15.25)
Compatibility: PostgreSQL 11.15 (POLARDB Database Compatible with Oracle 11.15.25)
EXEC_DDL_STATEMENT
Sintaks
EXEC_DDL_STATEMENT menjalankan pernyataan DDL.
EXEC_DDL_STATEMENT(parse_string VARCHAR2)
Parameter
|
Parameter |
Description |
|
parse_string |
Pernyataan DDL yang akan dijalankan. |
Contoh
Blok anonim berikut membuat tabel job.
BEGIN
DBMS_UTILITY.EXEC_DDL_STATEMENT(
'CREATE TABLE job (' ||
'jobno NUMBER(3),' ||
'jname VARCHAR2(9))'
);
END;
Jika parse_string tidak berisi pernyataan DDL yang valid, PolarDB for PostgreSQL (Compatible with Oracle) melemparkan error:
EXEC dbms_utility.exec_ddl_statement('select rownum from dual');
ERROR: 'parse_string' must be a valid DDL statement
Perilaku PolarDB for PostgreSQL (Compatible with Oracle) berbeda dari Oracle, yang menerima parse_string yang tidak valid tanpa melemparkan error.
FORMAT_CALL_STACK
Sintaks
Fungsi FORMAT_CALL_STACK mengembalikan tumpukan panggilan saat ini sebagai teks terformat.
DBMS_UTILITY.FORMAT_CALL_STACK return TEXT
Panggil fungsi ini dari dalam stored procedure, function, atau package untuk mendapatkan tumpukan panggilan saat ini.
FORMAT_ERROR_BACKTRACE
Sintaks
Fungsi FORMAT_ERROR_BACKTRACE mengembalikan tumpukan panggilan terformat dari titik tempat pengecualian dilemparkan.
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE RETURN TEXT
Fungsi ini dirancang untuk digunakan dalam stored procedure, function, atau package.
FORMAT_ERROR_STACK
Sintaks
Fungsi FORMAT_ERROR_STACK mengembalikan tumpukan panggilan pada titik pengecualian sebagai string terformat.
DBMS_UTILITY.FORMAT_ERROR_STACK return TEXT
Anda dapat memanggil fungsi ini dalam stored procedure, function, atau package untuk mengambil tumpukan panggilan.
FORMAT_ERROR_STACK berperilaku berbeda di PolarDB for PostgreSQL (Compatible with Oracle) dibandingkan di Oracle. Di Oracle, fungsi ini mengembalikan string yang berisi informasi SQLCODE dan SQLERRM. Di PolarDB for PostgreSQL (Compatible with Oracle), fungsi ini berperilaku sama seperti FORMAT_ERROR_BACKTRACE.
GET_CPU_TIME
Sintaks
Fungsi GET_CPU_TIME mengembalikan waktu CPU saat ini dalam perseratus detik, diukur dari titik waktu arbitrer.
Parameter
|
Parameter |
Description |
|
cputime |
Waktu CPU yang telah berlalu dalam perseratus detik. |
Contoh
Jalankan pernyataan SELECT berikut untuk mengambil waktu CPU saat ini.
SELECT DBMS_UTILITY.GET_CPU_TIME FROM DUAL;
Pernyataan tersebut mengembalikan hasil serupa berikut, di mana nilai 603 merepresentasikan 603 perseratus detik (6,03 detik).
get_cpu_time
--------------
603
GET_DEPENDENCY
Sintaks
Gunakan stored procedure GET_DEPENDENCY untuk mencantumkan objek yang bergantung pada objek tertentu. Prosedur ini tidak menampilkan dependensi untuk function atau stored procedure.
GET_DEPENDENCY(type VARCHAR2, schema VARCHAR2,
name VARCHAR2)
Parameter
|
Parameter |
Description |
|
type |
Jenis objek target. Nilai yang valid adalah |
|
schema |
Skema objek target. |
|
name |
Nama objek target. |
Contoh
Jalankan blok anonim berikut untuk menemukan dependensi pada tabel EMP.
BEGIN
DBMS_UTILITY.GET_DEPENDENCY('TABLE','public','EMP');
END;
Hasilnya adalah sebagai berikut:
DEPENDENCIES ON public.EMP
------------------------------------------------------------------
*TABLE public.EMP()
* CONSTRAINT c public.emp()
* CONSTRAINT f public.emp()
* CONSTRAINT p public.emp()
* TYPE public.emp()
* CONSTRAINT c public.emp()
* CONSTRAINT f public.jobhist()
* VIEW .empname_view()
GET_HASH_VALUE
Sintaks
Gunakan fungsi GET_HASH_VALUE untuk menghitung nilai hash dari string tertentu.
hash NUMBER GET_HASH_VALUE(name VARCHAR2, base NUMBER,
hash_size NUMBER)
Parameter
|
Parameter |
Description |
|
name |
String yang akan di-hash. |
|
base |
Nilai awal untuk pembangkitan hash. |
|
hash_size |
Jumlah nilai hash berbeda untuk tabel hash. |
|
hash |
Nilai hash yang dihitung. |
Contoh
Blok anonim berikut membuat tabel hash menggunakan kolom ename dari tabel emp lalu menampilkan setiap kunci dan nilai hash-nya. Nilai hash dimulai dari 100, dan fungsi menghasilkan hingga 1.024 nilai berbeda.
DECLARE
v_hash NUMBER;
TYPE hash_tab IS TABLE OF NUMBER INDEX BY VARCHAR2(10);
r_hash HASH_TAB;
CURSOR emp_cur IS SELECT ename FROM emp;
BEGIN
FOR r_emp IN emp_cur LOOP
r_hash(r_emp.ename) :=
DBMS_UTILITY.GET_HASH_VALUE(r_emp.ename,100,1024);
END LOOP;
FOR r_emp IN emp_cur LOOP
DBMS_OUTPUT.PUT_LINE(RPAD(r_emp.ename,10) || ' ' ||
r_hash(r_emp.ename));
END LOOP;
END;
Berikut adalah contoh outputnya:
SMITH 377
ALLEN 740
WARD 718
JONES 131
MARTIN 176
BLAKE 568
CLARK 621
SCOTT 1097
KING 235
TURNER 850
ADAMS 156
JAMES 942
FORD 775
MILLER 148
GET_PARAMETER_VALUE
Sintaks
Gunakan stored procedure GET_PARAMETER_VALUE untuk mengambil nilai parameter inisialisasi database.
status BINARY_INTEGER GET_PARAMETER_VALUE(parnam VARCHAR2,
intval OUT INTEGER, strval OUT VARCHAR2)
Parameter
|
Parameter |
Description |
|
parnam |
Nama parameter yang nilainya ingin Anda ambil. Parameter-parameter ini tercantum dalam tampilan sistem |
|
intval |
Untuk parameter integer atau Boolean, ini adalah nilainya. Untuk parameter string, ini adalah panjang string yang dikembalikan dalam |
|
strval |
Nilai parameter string. |
|
status |
Mengembalikan |
Contoh
Blok anonim berikut menampilkan nilai parameter inisialisasi.
DECLARE
v_intval INTEGER;
v_strval VARCHAR2(80);
BEGIN
DBMS_UTILITY.GET_PARAMETER_VALUE('client_encoding', v_intval, v_strval);
DBMS_OUTPUT.PUT_LINE('client_encoding' || ': ' || v_strval);
END;
Berikut adalah hasilnya:
client_encoding: UTF8
GET_TIME
Sintaks
Fungsi GET_TIME mengembalikan waktu saat ini dalam perseratus detik.
Parameters
|
Parameter |
Description |
|
time |
Jumlah perseratus detik yang telah berlalu sejak program dimulai. |
Contoh
Contoh ini memanggil fungsi GET_TIME.
SELECT DBMS_UTILITY.GET_TIME FROM DUAL;
Kueri mengembalikan output berikut:
get_time
----------
1555860
NAME_TOKENIZE
Sintaks
Stored procedure NAME_TOKENIZE mengurai nama menjadi komponen-komponennya. Prosedur ini mengonversi komponen yang tidak dikutip menjadi huruf kapital dan menghapus tanda kutip ganda dari komponen yang dikutip.
NAME_TOKENIZE(name VARCHAR2, a OUT VARCHAR2, b OUT VARCHAR2,c OUT VARCHAR2, dblink OUT VARCHAR2, nextpos OUT BINARY_INTEGER)
Parameter
|
Parameter |
Description |
|
name |
String yang berisi nama dalam format berikut:
|
|
a |
Komponen paling kiri. |
|
b |
Komponen kedua, jika ada. |
|
c |
Komponen ketiga, jika ada. |
|
dblink |
Nama tautan basis data, jika ada. |
|
nextpos |
Posisi karakter terakhir yang diurai dalam string input. |
Contoh
Jalankan pernyataan berikut untuk membuat stored procedure yang menampilkan parameter output dari NAME_TOKENIZE untuk nama-nama berbeda.
CREATE OR REPLACE PROCEDURE name_tokenize (
p_name VARCHAR2
)
IS
v_a VARCHAR2(30);
v_b VARCHAR2(30);
v_c VARCHAR2(30);
v_dblink VARCHAR2(30);
v_nextpos BINARY_INTEGER;
BEGIN
DBMS_UTILITY.NAME_TOKENIZE(p_name,v_a,v_b,v_c,v_dblink,v_nextpos);
DBMS_OUTPUT.PUT_LINE('name : ' || p_name);
DBMS_OUTPUT.PUT_LINE('a : ' || v_a);
DBMS_OUTPUT.PUT_LINE('b : ' || v_b);
DBMS_OUTPUT.PUT_LINE('c : ' || v_c);
DBMS_OUTPUT.PUT_LINE('dblink : ' || v_dblink);
DBMS_OUTPUT.PUT_LINE('nextpos: ' || v_nextpos);
END;
-
Nama tunggal tanpa kutip—dikonversi ke kapital: Contoh ini mengurai
emp.BEGIN name_tokenize('emp'); END;Output berikut ditampilkan:
name : emp a : EMP b : c : dblink : nextpos: 3 -
Nama dua bagian tanpa kutip—kedua komponen dikonversi ke kapital: Contoh ini mengurai
polardb.list_emp.BEGIN name_tokenize('polardb.list_emp'); END;Output berikut ditampilkan:
name : polardb.list_emp a : polardb b : LIST_EMP c : dblink : nextpos: 16 -
Nama tiga bagian dengan campuran kutipan—bagian yang dikutip dipertahankan, bagian yang tidak dikutip dikonversi ke kapital: Contoh ini mengurai
"polardb"."Emp_Admin".update_emp_sal.BEGIN name_tokenize('"polardb"."Emp_Admin".update_emp_sal'); END;Output berikut ditampilkan:
name : "polardb"."Emp_Admin".update_emp_sal a : polardb b : Emp_Admin c : UPDATE_EMP_SAL dblink : nextpos: 36 -
Nama dengan tautan basis data: Contoh ini mengurai
polardb.emp@polardb_dblink.BEGIN name_tokenize('polardb.emp@polardb_dblink'); END;Output berikut ditampilkan:
name : polardb.emp@polardb_dblink a : polardb b : EMP c : dblink : polardb_DBLINK nextpos: 26
TABLE_TO_COMMA
Sintaks
Stored procedure TABLE_TO_COMMA mengonversi tabel nama menjadi daftar yang dipisahkan koma. Setiap entri tabel menjadi item daftar. Nama-nama tersebut harus merupakan identifier yang valid.
TABLE_TO_COMMA(tab { LNAME_ARRAY | UNCL_ARRAY },
tablen OUT BINARY_INTEGER, list OUT VARCHAR2)
Parameter
|
Parameter |
Description |
|
tab |
Tabel input berisi nama. |
|
LNAME_ARRAY |
Tabel DBMS_UTILITY.LNAME_ARRAY. Untuk informasi lebih lanjut, lihat LNAME_ARRAY. |
|
UNCL_ARRAY |
Tabel DBMS_UTILITY.UNCL_ARRAY. Untuk informasi lebih lanjut, lihat UNCL_ARRAY. |
|
tablen |
Jumlah entri dalam daftar output. |
|
list |
Daftar output yang dipisahkan koma berisi nama dari tab. |
Contoh
-
Jalankan pernyataan berikut untuk membuat stored procedure. Prosedur ini pertama-tama menggunakan COMMA_TO_TABLE untuk mengonversi daftar yang dipisahkan koma menjadi tabel, lalu menggunakan TABLE_TO_COMMA untuk mengonversi tabel kembali menjadi daftar yang dipisahkan koma.
CREATE OR REPLACE PROCEDURE table_to_comma ( p_list VARCHAR2 ) IS r_lname DBMS_UTILITY.LNAME_ARRAY; v_length BINARY_INTEGER; v_listlen BINARY_INTEGER; v_list VARCHAR2(80); BEGIN DBMS_UTILITY.COMMA_TO_TABLE(p_list,v_length,r_lname); DBMS_OUTPUT.PUT_LINE('Table Entries'); DBMS_OUTPUT.PUT_LINE('-------------'); FOR i IN 1..v_length LOOP DBMS_OUTPUT.PUT_LINE(r_lname(i)); END LOOP; DBMS_OUTPUT.PUT_LINE('-------------'); DBMS_UTILITY.TABLE_TO_COMMA(r_lname,v_listlen,v_list); DBMS_OUTPUT.PUT_LINE('Comma-Delimited List: ' || v_list); END; -
Jalankan stored procedure:
EXEC table_to_comma('polardb.dept, polardb.emp, polardb.jobhist');Prosedur mengembalikan hasil berikut:
Table Entries ------------- polardb.dept polardb.emp polardb.jobhist ------------- Comma-Delimited List: polardb.dept, polardb.emp, polardb.jobhist