powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Константы, хранящиеся в таблице
15 сообщений из 15, страница 1 из 1
Константы, хранящиеся в таблице
    #36415420
aleksandy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, где-то когда-то видел пример, в котором реализовывался сабж. Идея приблизительно такая:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table consts(id char( 1 ) default 'X' not null, const NUMBER( 3 ) default  100  not null ...);
alter table consts add constraint pk_consts primary key (id);
alter table consts add constraint consts_check_id check (id = 'X');
create or replace trigger edit_consts
  before update or delete on consts  
begin
  RAISE_APPLICATION_ERROR(- 20000 , 'Таблица содержит константные значения. Редактирование запрещено.');
end edit_consts;
-- Дальше были еще какие-то "замуты", чтобы новые константы можно было добавлять через alter table

insert into consts(id) values ('X');
Тогда мне это было не нужно, и я не вникал. А сейчас не могу найти где это я видел :(.

Поделитесь ссылкой или может подскажете, что делать дальше?
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36415429
_Alex_SMIRNOV_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По мне так не стоит так усложнять, поскольку изменение будет требовать кучу альтеров: отключение и включение триггера, добавление или изменения констреинтов, итд...

Если грамотно раздать гранты на изменение данных в этой таблице (только для админов приложения), то можно обойтись без такого усложнения....
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36415454
aleksandy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Alex_SMIRNOV_...изменение будет требовать кучу альтеров...
_Alex_SMIRNOV_...раздать гранты на изменение данных...
Во-первых, в таблице не нужно ничего изменять. Только добавлять новые столбцы, если потребуется.

Во-вторых, сервер приложений цепляется к схеме под одним пользователем для всех пользователей приложения. Менять что-то сейчас уже поздно.
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36415472
_Alex_SMIRNOV_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksandy_Alex_SMIRNOV_...изменение будет требовать кучу альтеров...
_Alex_SMIRNOV_...раздать гранты на изменение данных...
Во-первых, в таблице не нужно ничего изменять. Только добавлять новые столбцы, если потребуется.

Во-вторых, сервер приложений цепляется к схеме под одним пользователем для всех пользователей приложения. Менять что-то сейчас уже поздно.

Вы хотите хранить все константы в одной строчке и при новой константе добавлять столбцы... вы же понимаете, что при добавление столбца вам придется переписывать запросы (или писать новые)?
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36415479
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksandy,

А вторую схему создать под константные таблицы нельзя?
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36415481
А ещё есть непреодолимое ограничение от Oracle на количество столбцов в таблице...
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36415619
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksandy,

почитайте про контексты. особливо про глобальные.
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36415649
aleksandy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Alex_SMIRNOV_Вы хотите хранить все константы в одной строчке и при новой константе добавлять столбцы... вы же понимаете, что при добавление столбца вам придется переписывать запросы (или писать новые)?
Конечно понимаю :). Это не так страшно, кажется, т.к. за последние 2 года константы ни разу не менялись. А если такое случится, то это быстро исправляется дампом таблицы в sql, его редактированием и выполнением с предыдущим удалением существующей таблицы.

Добрый Э - ЭхА ещё есть непреодолимое ограничение от Oracle на количество столбцов в таблице...
1000 констант мне не требуется, а 999 по "за глаза" хватит.

AlexFF__|А вторую схему создать под константные таблицы нельзя?
Можно. Только как-то создавать отдельную схему под одну таблицу не совсем хочется...
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36415867
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksandy... Это не так страшно, кажется, т.к. за последние 2 года константы ни разу не менялись. А если такое случится, то это быстро исправляется дампом таблицы в sql, его редактированием и выполнением с предыдущим удалением существующей таблицы ...

Ну так объявляйте его в пакете и не мучайтесь.
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36415953
aleksandy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexFF__|Ну так объявляйте его в пакете и не мучайтесь.
Сейчас так и сделано, но мне такое положение дел не нравится, т.к. в приложение слишком много отчетов, и каждый раз вспоминать, что означает, например, "where id = 10" не очень удобно. А использовать пакетные константы в sql-запросах нельзя :(.
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36415959
_Alex_SMIRNOV_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksandyAlexFF__|Ну так объявляйте его в пакете и не мучайтесь.
Сейчас так и сделано, но мне такое положение дел не нравится, т.к. в приложение слишком много отчетов, и каждый раз вспоминать, что означает, например, "where id = 10" не очень удобно. А использовать пакетные константы в sql-запросах нельзя :(.

Так оберните их в функцию и вперед.
Или воспользуйтесь контекстом, как говорили выше....
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36415967
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksandy
Сейчас так и сделано, но мне такое положение дел не нравится, т.к. в приложение слишком много отчетов, и каждый раз вспоминать, что означает, например, "where id = 10" не очень удобно.

И где же тут пакетные константы?

aleksandyА использовать пакетные константы в sql-запросах нельзя.

А мужики-то не знают ;)
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36416013
aleksandy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexFF__|И где же тут пакетные константы?
Я и говорю, что вместо "where id = const.SOME_CONST" приходится писать "where id = 10"
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36416026
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
CREATE OR REPLACE PACKAGE PKG_CONST

  function get( value_  varchar2 ) number;
....

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE OR REPLACE PACKAGE BODY PKG_CONST

  function get( value_  varchar2 ) number is
    vRes   number;
  begin
    case value_
        when '01' then vRes :=  1 ;
        when '01' then vRes :=  2 ;
        when '03' then vRes :=  3 ;
        else      vRes :=  4 ;
     end case;
  
     return vRes;
  end;
....
...
Рейтинг: 0 / 0
Константы, хранящиеся в таблице
    #36416039
_Alex_SMIRNOV_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|
Код: plaintext
1.
2.
3.
CREATE OR REPLACE PACKAGE PKG_CONST

  function get( value_  varchar2 ) number;
....

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE OR REPLACE PACKAGE BODY PKG_CONST

  function get( value_  varchar2 ) number is
    vRes   number;
  begin
    case value_
        when '01' then vRes :=  1 ;
        when '01' then vRes :=  2 ;
        when '03' then vRes :=  3 ;
        else      vRes :=  4 ;
     end case;
  
     return vRes;
  end;
....



И добавить еще в функцию DETERMINISTIC
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Константы, хранящиеся в таблице
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]