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.