Oracle
 sql >> база данни >  >> RDS >> Oracle

REAL тип данни в PLSQL

Справочник за SQL език казва „Типът данни REAL е число с плаваща запетая с двоична точност 63 или 18 десетични“ и се показва като FLOAT(63). И FLOAT [(p)] е:

Ако създадете таблица с колона REAL, тя се държи като 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

Използвах по-малка стойност, така че да може да се покаже в рамките на ограничението на SQL*Plus/SQL Developer от 49 цифри за numformat. Забележете, че стойностите FLOAT(126) и NUMBER не са съвсем еднакви с тази стойност.

PL/SQL е малко по-различен. В стандартния пакет можете да видите:

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

В PL/SQL блокирайте вашия REAL променливата може да приеме всякаква стойност над неограничен NUMBER може и има същите ефекти на мащаб/прецизност; в този случай запазва само най-значимото (38- 40) цифри и закръгляване на останалите до най-малкото от първите 40 цифри. Общият „размер“ на вашата стойност като 72-цифрено число се запазва, но вие губите прецизността отвъд това, което може да се съхрани във вътрешния формат на Oracle. Ако имате същите типове променливи като примерната таблица и поставите оригиналните си стойности в:

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

Забележете този път, че неограничените FLOAT и NUMBER показват една и съща стойност, докато ограничените FLOAT имат прецизността, която очаквате.

Така че показва нули след 40-тата цифра и тази 40-та цифра е 5 вместо 4, защото сте превишили точността и стойността се закръгля до най-значимите цифри. Типът данни SQL REAL има точност от 63 двоични или 18 десетични цифри; но освен ако не е указано, PL/SQL REAL съвпада с 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. Oracle:Имам нужда от частично външно свързване. Вижте изображението

  2. Напишете заявка, за да намерите името на студента(ите), който е получил максимална оценка по Софтуерно инженерство. Сортирайте резултата въз основа на име

  3. Наскоро присъствах на едно интервю. Не мога да отговоря на този, можете ли да ми помогнете

  4. Oracle:множество актуализации на таблици => ORA-01779:не може да промени колона, която се съпоставя с таблица без ключ

  5. Помощна програма:Генерирайте PL/SQL процедура за експортиране на данни от таблица за 2 минути