Vertica постулирует, что она "почти" 100% совместима с Oracle. По крайней мере, в том что касается данных.
Это очень близко к правде. Но тем более обидно находить мелкие проблемы несоответствия, которые взрывают мозг.
CREATE TABLE num1 (id INTEGER, amount NUMERIC( 8 , 2 ));
INSERT INTO num1 VALUES ( 1 , 123456.78 );
SELECT * FROM num1;
|
Если ее поправить для проверки типа number.
CREATE TABLE num1 (id INTEGER, amount number);
INSERT INTO num1 VALUES ( 1 , 123456.78 );
SELECT * FROM num1;
|
и проверить на Vertica и Oracle (11), то можно увидеть вот что
Oracle
SQL> CREATE TABLE num1 (id INTEGER, amount number);
Table created.
SQL> INSERT INTO num1 VALUES ( 1 , 123456.78 );
1 row created.
SQL> SELECT * FROM num1;
ID AMOUNT
---------- ----------
1 123456.78
|
но при этом
SQL> INSERT INTO num1 VALUES ( 1 , 123456.122333444455555666666777777788888888999999999 );
1 row created.
SQL> select * from num1;
ID AMOUNT
---------- ----------
1 1.23456122333444455555666666777777788889E05
|
То есть оно сохраняет и дробную часть. То есть по документации Number - это Number(38,38)
Vertica
dbadmin=> CREATE TABLE num1 (id INTEGER, amount number);
CREATE TABLE
dbadmin=> \d num1
List of Fields by Tables
Schema | Table | Column | Type | Size | Default | Not Null | Primary Key | Foreign Key
--------+-------+--------+---------------+------+---------+----------+-------------+-------------
public | num1 | id | int | 8 | | f | f |
public | num1 | amount | numeric( 38 , 0 ) | 24 | | f | f |
( 2 rows)
dbadmin=> INSERT INTO num1 VALUES ( 1 , 123456.78 );
OUTPUT
--------
1
( 1 row)
dbadmin=> SELECT * FROM num1;
id | amount
----+--------
1 | 123457
( 1 row)
|
то есть number = numeric (38,0) , что соответствует документации, но не соответствует Oracle.
Комментариев нет:
Отправить комментарий