Автор | Программирование. Помогите изобрести велосипед. Буквы в числа |
|
Ниче не понял. Если пользователь пишет SQL-запрос к таблице, то он всегда может получить ROWID.
Если он работает с гридом, то никто не мешает добавить в этот грид поле rowid (единственное оно будет недоступно для изменения, только для чтения).
И самое главное - зачем вообще этот уникальный код пользователю? Если у тебя какая-то логика, то и используй в ней уникальный код строки. зачем его пользователю светить? |
А сам он автоматически назначается каждой строке.
Кто? ROWID? Это порядковый номер в результирующей таблице выборки. Ты с инкрементным уникальным полем не путаешь? |
ROWID
Нет, это я его с row_number путаю... |
При удалении соответствие будет меняться.
ROWID по сути это указатель на физическое расположение (подробнее можно посмотреть в документации конкретной СУБД).
Если мы удаляем запись, с чего вдруг все остальные ROWID поменяются??? Они будут неизменны. Добавляем запись - назначается новый ROWID.
Теоретически на удаленное место может быть записана новая строка и rowid станет одинаковым (у удаленной записи и у новой), но в текущий момент времени ВСЕ записи в таблице уникальны.
Коды могут поменяться только при импорте\репликации. НО, все равно уникальность никогда не будет нарушена. Если это число должно обладать историческй уникальностью - используй sequence |
для MrSlayer:
Да я понял, не о том подумал, почему-то.
Кстати, он не обломается выйти за указанные пределы, при активной "жизни" таблицы. |
okay, если пошли по этому пути, то подскажите чем взять строки из sql и засунуть их в .csv файл?
Я не хочу вручную брать N строк, M столбцов и каждый день делать с ними L операций, это должно происходить автоматически по запросу
Обычно справлялся со всеми своими нуждами средствами макросов Excel, теперь нужно что-то новое...
Access справится с описанными запросами (брать N строк, M столбцов и каждый день делать с ними L операций, создать .xls или .csv файл) или нужно что-то другое? |
чем взять строки из sql и засунуть их в .csv файл?
Я обычно делаю простенький сервис. Подойдёт любой язык программирования, не вижу ни одной проблемы. |
Подойдёт любой язык программирования
Turbo Pascal? |
FireSwarm
Если ты имеешь ввиду представления (view), то в них этот псевдостолбец вроде нельзя использовать. Если очень хочется можно создать отельное поле и выполнить слияние rowid из всех физических таблиц :)
про указанные пределы честно говоря не понял... Физическим размещением и управлением памяти занимается СУБД. Если не хватит места для записи, то пользователь получит об этом сообщение. |
для erros:
Turbo Pascal?
А почему нет? Он может сделать выборку из базы и сохранить файл. Собирай соответствующий есзешник и создавай службу, запускающую его в нужный момент. |
для MrSlayer:
Если ты имеешь ввиду представления (view), то в них этот псевдостолбец вроде нельзя использовать.
ХЗ, мне как-то не приходилось его использовать, тут не знаю.
про указанные пределы честно говоря не понял...
Число может быть от 0 до 4294967295
rowid может быть больше 4294967295. Хотя, тут нужно по базе смотреть, сколько там данных. |
Он может сделать выборку из базы и сохранить файл
Не припомню команду экспорта с сервера ABC под пользователем A и паролем Таблисы ВCD в группу переменных :( |
erros
эмм, любое извлечение данных из БД - select. Просто укажи одним из полей rowid и все... Если ты работаешь через какой-то встроенный интерфейс, а не через консоль, то там наверняка можно также указать дополнительный столбец. Как это сделать - гугли для своей СУБД.
В access не знаю, тк с ним я не сталкивался. Наверное, должен. |
для erros:
Не припомню команду экспорта с сервера ABC под пользователем A и паролем Таблисы ВCD в группу переменных :(
Значит погугли. Я с ним не работал, но коллеги говорят, что есть соответствующие библиотеки. |
FireSwarm
10 байт, по крайней мере в оракле. Это адрес ячейки памяти по сути, выхода за пределы быть не может. По умолчанию rowid выводится в символьном виде, но никто не мешает перевести его в десятичный.
Полные ограничения на использование кстати можно посмотреть здесь (опять таки в оракле и именно той версии по которой книжка) (стр 668)
http://books.google.ru/books?id=Et7gxt733S0C&printsec=frontcover&hl=ru#v=onepage&q&f=false |
для MrSlayer:
Кстати.
http://www.sql.ru/forum/272284/rowid-v-ms-sql-server-2000
Вот тут утверждают, что у мс скл сервера этого вообще нет. И я, если честно, ни разу с этой штукой не сталкивался. Так что не везде это есть. |
FireSwarm
Естественно, все СУБД разные (даже реляционные). Видимо разработчики посчитали, что там оно не нужно. В этой же теме написано, что у MSSQL 2005 эта фича таки есть. В db2 кстати тоже есть.
Кстати, меня что-то переклинило :) Вместо rowid можно реально изменить табличку и добавить какой-нибудь первичный числовой ключ (а может быть он уже там есть). |
Вот тут утверждают, что у мс скл сервера этого вообще нет.
В MSSQL этой оракловой байды действительно нет.
Там как-то народу PK с Identity хватает, вот только для этой задачи сабж не подойдет, т.к. после удаления строки и добавления новой строки с тем же (удаленным) словом, оно получит НОВОЕ числовое значение PK, а это противоречит условиям.
Так что ИМХО все-таки задача сводится к алгоритму построения компактного шифра.
Кстати, вопрос к ТС:
а точно 75 символов? Если мы работаем не в режиме case insensitive, то для каждого алфавита число символов умножаем на 2. |
Там как-то народу PK с Identity хватает, вот только для этой задачи сабж не подойдет, т.к. после удаления строки и добавления новой строки с тем же (удаленным) словом, оно получит НОВОЕ числовое значение PK, а это противоречит условиям.
Ну в этом случае и rowid новое значение добавит.
Видимо разработчики посчитали, что там оно не нужно.
Инкрементного уникального поля всю жизнь хватало. Так что тут я с ними согласен.
Кстати, меня что-то переклинило :) Вместо rowid можно реально изменить табличку и добавить какой-нибудь первичный числовой ключ (а может быть он уже там есть).
Ну да, полностью поддерживаю. Как я и писал в 11-м посту, это самый простой и очевидный способ. |