Каковы Точность по умолчанию и Масштаб для Числа в Oracle?

Предварительно: это плохое решение, но оно отвечает вашим требованиям с минимальными изменениями. По сути, вам нужно, чтобы экземпляры __str__ работали, поэтому это обманывает, используя синтаксис декоратора, чтобы изменить объявление класса в одноэлементную реализацию объявленного класса. Поскольку невозможно неявно ссылаться на внешние классы из вложенных классов , ссылка выполняется явно. А для повторного использования __str__, file1 и file2 были превращены в @property с тем, чтобы они могли использовать форму str экземпляра details для построения себя.

@object.__new__
class FileStructure(object): # Root directory
    root = "root"

    @object.__new__
    class details(object): # details directory
        root = "details"
        @property
        def file1(self):
            return os.path.join(str(self), 'file1')
        @property
        def file2(self):
            return os.path.join(str(self), 'file2')

        def __str__(self):
            return f"{os.path.join(FileStructure.root, self.root)}"

    def __str__(self):
        return f"{self.root}"

Опять же: хотя это и приводит к желаемому поведению, это все же является плохим решением. Я сильно подозреваю, что у вас здесь есть проблема XY , но это отвечает на вопрос в том виде, в котором он был задан.

64
задан Abdullah Khan 29 August 2017 в 08:10
поделиться

3 ответа

ЧИСЛО (точность, масштаб)

, Если точность не определяется, значения хранилищ столбца, как дали. Если никакой масштаб не определяется, масштаб является нулем.

Намного больше информации в:

http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832

40
ответ дан Angelo Marcotullio 24 November 2019 в 15:57
поделиться

Oracle числа хранилищ следующим образом: 1 byte для питания, 1 byte для первой цифры мантиссы (который является тем перед разделителем), остальные для других цифр.

digits здесь Oracle средства centesimal digits (т.е. base 100)

SQL> INSERT INTO t_numtest VALUES (LPAD('9', 125, '9'))
  2  /

1 row inserted

SQL> INSERT INTO t_numtest VALUES (LPAD('7', 125, '7'))
  2  /

1 row inserted

SQL> INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))
  2  /

INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))

ORA-01426: numeric overflow

SQL> SELECT DUMP(num) FROM t_numtest;

DUMP(NUM)
--------------------------------------------------------------------------------
Typ=2 Len=2: 255,11
Typ=2 Len=21: 255,8,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79

, Как мы видим, максимальное число здесь 7.(7) * 10^124, и он имеет 19 сотенные цифры для точности, или 38 десятичные цифры.

9
ответ дан Quassnoi 24 November 2019 в 15:57
поделиться

Я полагаю, что точность по умолчанию равняется 38, масштаб по умолчанию является нулем. Однако фактический размер экземпляра этого столбца, является динамичным. Это возьмет в качестве большого количества пространства по мере необходимости для хранения значения, или макс. 21 байт.

14
ответ дан baretta 24 November 2019 в 15:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: