Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tính tỷ lệ phần trăm của gốc thuộc sở hữu của bố mẹ nó

Trong 11g, có lẽ là một cái gì đó giống như-

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 .

Hoặc, theo '1'|| của bạn lừa-

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;

Thật không may trong 10g, XMLQuery không thể chấp nhận các hàm và luôn mong đợi một chuỗi ký tự để đánh giá chẳng hạn-

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

hoạt động và trả về 0.25 , nhưng

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

cung cấp cho ORA-19102: XQuery string literal expected .

Truy vấn có thể chậm hơn khi số lượng cấp trên cây tăng lên khi tạo thêm chi phí tạo cây nội bộ bằng XMLQuery chính nó. Phương pháp tối ưu nhất để đạt được kết quả vẫn sẽ là Hàm PL / SQL mà theo cách này sẽ hoạt động cả trong 10g và 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. Lỗi Xmlparserv2 khi ứng dụng được triển khai trong jboss, Cài đặt mô-đun ojdbc Oracle trong ứng dụng web JBoss dành cho Java

  2. ORA-22905 - khi truy vấn loại bảng bằng câu lệnh select

  3. Truy vấn hiển thị đầu ra theo chiều ngang

  4. Tạo chuỗi UUID không có REGEXP_REPLACE và PL / SQL

  5. Lỗi khi chuyển đổi XML từ cột CLOB sang cột XMLType