Булево поле в Oracle

Хотя я опаздываю на четыре года, я думаю, что у меня есть самое быстрое решение. Недавно я написал пакет python под названием linereader , который позволяет вам манипулировать указателями дескрипторов файлов.

Вот простое решение для получения случайной строки с этим пакетом:

from random import randint
from linereader import dopen

length = #lines in file
filename = #directory of file

file = dopen(filename)
random_line = file.getline(randint(1, length))

В первый раз это делается хуже всего, так как linereader должен скомпилировать выходной файл в специальном формате. После этого linereader может получить доступ к любой строке из файла быстро, независимо от размера файла.

Если ваш файл очень маленький (достаточно маленький, чтобы вписаться в MB), вы можете заменить dopen с copen, и он делает кэшированную запись файла в памяти. Это происходит не только быстрее, но вы получаете количество строк в файле, поскольку оно загружается в память; это делается для вас. Все, что вам нужно сделать, это создать случайный номер строки. Вот пример кода для этого.

from random import randint
from linereader import copen

file = copen(filename)
lines = file.count('\n')
random_line = file.getline(randint(1, lines))

Я просто очень рад, потому что увидел кого-то, кто мог бы воспользоваться моим пакетом! Извините за мертвый ответ, но пакет определенно может быть применен ко многим другим проблемам.

145
задан Lalit Kumar B 18 December 2015 в 06:30
поделиться

6 ответов

Я нашел этот ссылка полезный.

Вот абзац, выделяющий некоторых профессионалов/недостатки каждого подхода.

обычно замеченный дизайн должен подражать многим подобным булевской переменной флагам, что словарь данных Oracle просматривает использование, выбирая 'Y' для истинного и 'N' для лжи. Однако для взаимодействия правильно с серверными средами, такими как JDBC, OCCI и другие среды программирования, лучше выбрать 0 для лжи и 1 для истинного, таким образом, это может работать правильно с функциями setBoolean и getBoolean.

В основном они защищают метод номер 2, для пользы эффективности, с помощью [1 112]

  • значения из 0/1 (из-за совместимости с JDBC's getBoolean() и т.д.) с проверочным ограничением
  • тип CHAR (потому что это использует меньше пространства, чем ЧИСЛО).

Их пример:

create table tbool (bool char check (bool in (0,1));
insert into tbool values(0);
insert into tbool values(1);`
82
ответ дан Shog9 18 December 2015 в 06:30
поделиться
  • 1
    @Jack Kelly: objdump util кажется более всесторонним, но what' s различие wrt к OP? – Matt Joiner 12 September 2010 в 08:16

Для использования наименьшего количества суммы пространства, необходимо использовать поле CHAR, ограниченное для 'Y' или 'N'. Oracle не поддерживает БУЛЕВСКУЮ ПЕРЕМЕННУЮ, BIT или Типы данных tinyint, таким образом, один байт CHAR является столь маленьким, как можно добраться.

26
ответ дан Bill the Lizard 18 December 2015 в 06:30
поделиться
  • 1
    Я создал динамическую библиотеку (lib*.so файл) и добавил несколько функций в it.so, мне нужна командная строка, которая отобразила бы ее содержание. (т.е. функции) – Pavitar 7 September 2010 в 05:53

Или 1/0 или Y/N с проверочным ограничением на него. эфир путь прекрасен. Я лично предпочитаю 1/0, поскольку я делаю большую работу в жемчуге, и это делает действительно легким сделать Логические операции жемчуга на полях базы данных.

, Если Вы хотите действительно подробно обсуждение этого вопроса с одним из главных управляющих Оракулов, проверьте то, что Tom Kyte должен сказать об этом Здесь

5
ответ дан Matthew Watson 18 December 2015 в 06:30
поделиться
  • 1
    @Noah Roberts: О каком конструкторе Вы говорите? Я don' t видят конкретный в этом вопросе. Я согласую это it' s возможный для конструктора сделать слишком много вещей, но I' d должны посмотреть на него для решения для меня. Насколько ответ идет, it' s мнение, сохраненное ничем, которое не сохранено никаким экспертом по C++, которого я знаю, на или прочь ТАК. Это, поэтому, бесполезно, если не отредактировано для включения своего рода аргумента. – David Thornley 18 May 2010 в 16:55

База данных я сделал большую часть своей работы над используемым 'Y' / 'N' как булевские переменные. С той реализацией можно осуществить некоторые приемы как:

  1. строки количества, которые верны:
    ИЗБРАННАЯ СУММА (СЛУЧАЙ, КОГДА BOOLEAN_FLAG = 'Y' ТОГДА 1 ЕЩЕ 0) ОТ X

  2. При группировке строк, осуществите, "Если одна строка верна, то все - истинная" логика:
    ВЫБОР МАКС (BOOLEAN_FLAG) ОТ Y
    С другой стороны, используйте МИН для принуждения группирующейся лжи, если одна строка является ложью.

4
ответ дан Erick B 18 December 2015 в 06:30
поделиться
  • 1
    Noah - это точно неправильно - при вызове конструктора им, wil возвращают Вас CMyClass, если и только если этому удалось загрузить и проверить файл - Вы не должны видеть случай, где файл является недопустимым или недостающим и т.д. Теперь конструктор CMyClass может использовать несколько классов для достижения этого, но пользователю это или работает или не делает. – Mark 18 May 2010 в 16:38

В наших базах данных мы используем перечисление, которое гарантирует, чтобы мы передали его любой TRUE ИЛИ FALSE. Если Вы делаете это любой из первых двух способов, которыми слишком легко или начать добавлять новое значение к целому числу, не проходя надлежащий дизайн, или заканчиваясь с тем символьным полем, имеющим Y, y, N, n, T, t, F, f значения и имеющим необходимость помнить, какой раздел использования кода, который таблица и какую версию истинных это использует.

1
ответ дан Ryan Ahearn 18 December 2015 в 06:30
поделиться
  • 1
    К вашему сведению движение назад через историю C++, нового, предшествует исключениям. – Joshua 18 May 2010 в 23:20

Сама Oracle использует Y/N для булевых значений. Для полноты нужно отметить, что pl/sql имеет булев тип, это - только таблицы, которые не делают.

при использовании поля, чтобы указать, должна ли запись быть обработана или не, Вы могли бы рассмотреть использование Y и ПУСТОГО УКАЗАТЕЛЯ как значения. Это делает для очень маленького (читайте быстро), индекс, который занимает очень мало места.

28
ответ дан Leigh Riffel 18 December 2015 в 06:30
поделиться
  • 1
    Столяр @Matt: различие между этим ответом и мой - ссылка на nm -D --defined-only. nm -D отобразит неопределенные символы и так далее, который является просто шумом, если Вы хотите видеть то, что определяет сам lib. – Jack Kelly 12 September 2010 в 09:42
Другие вопросы по тегам:

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