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

Hitung persentase akar yang dimiliki oleh orang tuanya

Dalam 11g, Mungkin seperti-

SELECT a.*, LEVEL AS lvl
      ,XMLQuery( substr( sys_connect_by_path( percent_owned, '*' ), 2 ) RETURNING CONTENT).getnumberval() AS calc
   FROM hierarchy_test a
  START WITH id = 1
CONNECT BY nocycle PRIOR parent_id = id;

SQL Fiddle .

Atau, sesuai '1'|| . Anda trik-

SELECT a.*, LEVEL AS lvl
      , XMLQuery( ('1'|| sys_connect_by_path( percent_owned, '*' )) RETURNING CONTENT).getnumberval() AS calc
   FROM hierarchy_test a
  START WITH id = 1
CONNECT BY nocycle PRIOR parent_id = id;

Sayangnya dalam 10g, XMLQuery tidak dapat menerima fungsi dan selalu mengharapkan literal string untuk evaluasi misalnya-

select XMLQuery('1*0.25' RETURNING CONTENT).getnumberval() as val 
  from dual;

berfungsi dan mengembalikan 0.25 , tapi

select XMLQuery(substr('*1*0.25',2) RETURNING CONTENT).getnumberval() as val
   from dual;

memberikan ORA-19102: XQuery string literal expected .

Kueri mungkin menjadi lebih lambat karena jumlah level pada pohon meningkat dengan tambahan overhead pembuatan pohon internal oleh XMLQuery diri. Metode yang paling optimal untuk mencapai hasil tetap adalah Fungsi PL/SQL yang akan bekerja baik dalam 10g dan 11g.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. hsqldb Oracle mode pilih untuk pembaruan SEKARANG

  2. Kembalikan nilai dari skrip sql ke skrip shell

  3. Bagaimana cara mengeluarkan semua urutan angka dari string dengan ekspresi reguler Oracle?

  4. Pisahkan String berdasarkan posisi pembatas menggunakan Oracle SQL

  5. Hapus semua catatan kecuali yang terbaru?