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

Tipe data NYATA di PLSQL

Referensi bahasa SQL mengatakan "Tipe data REAL adalah bilangan floating-point dengan presisi biner 63, atau 18 desimal", dan ditampilkan sebagai FLOAT(63). Dan FLOAT [(p)] adalah:

Jika Anda membuat tabel dengan kolom NYATA berperilaku seperti FLOAT(63):

create table t42 (a real, b float(126), c float(63), d number);
insert into t42 (a, b, c, d)
values (123456789123456789123456789123456789123456789123456,
  123456789123456789123456789123456789123456789123456,
  123456789123456789123456789123456789123456789123456,
  123456789123456789123456789123456789123456789123456);

select a, b, c, d from t42;

                                                               A
----------------------------------------------------------------
                                                               B
----------------------------------------------------------------
                                                               C
----------------------------------------------------------------
                                                               D
----------------------------------------------------------------
             123456789123456789100000000000000000000000000000000 
             123456789123456789123456789123456789120000000000000 
             123456789123456789100000000000000000000000000000000 
             123456789123456789123456789123456789123000000000000

Saya telah menggunakan nilai yang lebih kecil sehingga dapat ditampilkan dalam batas Pengembang SQL*Plus/SQL 49 digit untuk numformat. Perhatikan bahwa nilai FLOAT(126) dan NUMBER tidak sama persis dengan nilai tersebut.

PL/SQL sedikit berbeda. Dalam paket standar Anda dapat melihat:

  type NUMBER is NUMBER_BASE;
  subtype FLOAT is NUMBER; -- NUMBER(126)
  subtype REAL is FLOAT; -- FLOAT(63)

Dalam blok PL/SQL REAL . Anda variabel dapat mengambil nilai apa pun yang tidak dibatasi NUMBER dapat dan memiliki efek skala/presisi yang sama; dalam hal ini hanya mempertahankan (38- 40) digit, dan pembulatan sisanya menjadi yang terkecil dari 40 digit pertama tersebut. Keseluruhan 'ukuran' nilai Anda, sebagai angka 72 digit, dipertahankan, tetapi Anda kehilangan presisi melebihi apa yang dapat disimpan dalam format internal Oracle. Jika Anda memiliki tipe variabel yang sama seperti contoh tabel dan memasukkan nilai asli Anda ke dalam:

DECLARE
  A REAL := 123456789123456789123456789123456789123456789123456789123456789123456789;
  B FLOAT(126) := 123456789123456789123456789123456789123456789123456789123456789123456789;
  c FLOAT(63) := 123456789123456789123456789123456789123456789123456789123456789123456789;
  D NUMBER := 123456789123456789123456789123456789123456789123456789123456789123456789;
BEGIN
  DBMS_OUTPUT.PUT_LINE('A Value is : ' || A);
  DBMS_OUTPUT.PUT_LINE('B Value is : ' || B);
  DBMS_OUTPUT.PUT_LINE('C Value is : ' || C);
  DBMS_OUTPUT.PUT_LINE('D Value is : ' || D);
END;
/

A Value is : 123456789123456789123456789123456789123500000000000000000000000000000000
B Value is : 123456789123456789123456789123456789120000000000000000000000000000000000
C Value is : 123456789123456789100000000000000000000000000000000000000000000000000000
D Value is : 123456789123456789123456789123456789123500000000000000000000000000000000

Perhatikan kali ini bahwa FLOAT dan NUMBER yang tidak dibatasi menunjukkan nilai yang sama, sedangkan FLOAT yang dibatasi memiliki presisi yang Anda harapkan.

Jadi ini menunjukkan nol setelah digit ke-40 dan digit ke-40 itu adalah 5 bukannya 4 karena Anda telah melampaui presisi dan nilainya dibulatkan ke digit yang paling signifikan. Tipe data SQL REAL memiliki presisi 63 biner atau 18 digit desimal; tetapi kecuali ditentukan, PL/SQL REAL cocok dengan NUMBER.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rekursi Pada Query Database untuk mendapatkan hasil hierarkis menggunakan Hibernate - Java

  2. meneruskan nama tabel sebagai parameter plsql

  3. Cakupan kode untuk PL/SQL

  4. Apakah ada cara, di ORACLE, untuk menggabungkan beberapa baris baris menjadi satu, menggunakan dua tabel, di mana nilai akhir dipisahkan dengan koma?

  5. sampel bertingkat pada rentang