Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6 7 8   вперед  Ctrl      все
 Re: СУБД для учета финансовых потоков?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67487
Блог
ChA
Или что-то другое ?

Я бы делал примерно так:

SQL> create procedure get_cursor ( p_schema varchar2,
  2                                result out sys_refcursor ) is
  3  begin
  4    open result for
  5      select object_type, count(*) cnt
  6      from dba_objects
  7      where owner = p_schema
  8      group by object_type ;
  9  end ;
 10  /

SQL> exec get_cursor ( 'SYSTEM', :result ) ;

PL/SQL procedure successfully completed.

OBJECT_TYPE                CNT
------------------- ----------
FUNCTION                     1
INDEX                      171
INDEX PARTITION             31
LOB                         24
PACKAGE                      1
PACKAGE BODY                 1
PROCEDURE                    1
QUEUE                        4
SEQUENCE                    20
SYNONYM                      8
TABLE                      137
TABLE PARTITION             27
TRIGGER                      2
TYPE                         1
VIEW                        10

15 rows selected.
15 ноя 06, 21:14    [3406380]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67487
Блог
Председатель Мао
тем что вы не можете сделать такое
create Procedure p_ec_pays( @id int)

Кстати, не покажете ли, как Вы сделаете такое:

SQL> conn sys@svintus as sysdba

Connected.

SQL> create user t_app identified by t_app default tablespace users ;

User created.

SQL> create user t_user identified by t_user ;

User created.

SQL> grant connect to t_user ;

Grant succeeded.

SQL> grant connect, resource, unlimited tablespace to t_app ;

Grant succeeded.

SQL> conn t_app/t_app@svintus

Connected.

SQL> create table my_objects as
  2    select object_id, object_name, object_type from user_objects 
  3    where rownum < 1 ;

Table created.

SQL> create procedure get_objects ( result out sys_refcursor,
  2                                 filter varchar2 default null ) as
  3  begin
  4    open result for
  5      'select * from my_objects where rownum <= 5 ' ||
  6      case when filter is null then null else 'and ' || filter end ;
  7  end ;
  8  /

Procedure created.

SQL> create view my_objects_view as select * from my_objects ;

View created.

SQL> insert into my_objects
  2    select object_id, object_name, object_type from user_objects ;

3 rows created.

SQL> grant execute on get_objects to t_user ;

Grant succeeded.

SQL> conn t_user/t_user@svintus

Connected.

SQL> exec t_app.get_objects ( :result ) ;

PL/SQL procedure successfully completed.

 OBJECT_ID OBJECT_NAME                    OBJECT_TYPE                           
---------- ------------------------------ -------------------                   
     68451 MY_OBJECTS_VIEW                VIEW                                  
     68448 GET_OBJECTS                    PROCEDURE                             
     68449 MY_OBJECTS                     TABLE                                 

SQL> exec t_app.get_objects ( :result, 'object_type = ''VIEW''' ) ;

PL/SQL procedure successfully completed.

 OBJECT_ID OBJECT_NAME                    OBJECT_TYPE                           
---------- ------------------------------ -------------------                   
     68451 MY_OBJECTS_VIEW                VIEW                                  

SQL> select * from t_app.my_objects ;
select * from t_app.my_objects 
                    *
ERROR at line 1:
ORA-00942: table or view does not exist 
15 ноя 06, 21:54    [3406429]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
OS/360
Guest
softwarer
ChA
"Нормально" - это как

"Нормально" - это возвращать сколько угодно выборок каждую через свой именованный out параметр, а не в виде одной кучи, индексы в которой слетают от каждого чиха.


про кучу - понятно, индексы то причём?
15 ноя 06, 21:59    [3406438]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67487
Блог
OS/360
про кучу - понятно, индексы то причём?

Ээ... "индексы" - не в смысле "объекты БД", а в смысле "порядковый номер в массиве возвращаемых рекордсетов". Это в сторону команды set nocount on, если мне не изменяет память.
15 ноя 06, 22:02    [3406447]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
Изопропил
Member

Откуда:
Сообщений: 31629
softwarer
Это в сторону команды set nocount on, если мне не изменяет память.

Глюки с NOCOUNT - это тоже один из любимейших вопросов на профильном форуме.

До кучи - скалярные OUTPUT параметры можно получить только выбрав предварительно табличные результаты. TDS так устроен. Tabulated Data Stearm
15 ноя 06, 22:11    [3406460]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
Anton Demidov
Member

Откуда: Atlanta, GA
Сообщений: 1187
Di_LIne
Anton Demidov
Изопропил
И отчего люди так Оракла боятся? Конкркетно, что сложного в администрировании?
Это миф, бережно поддерживаемый конкурентами.

... и плюс 8 томов "Справочник администратора Оракла"...
Вот про это я и говорю - где вы видели эти 8 томов? Сделайте поиск на том же Озоне, в конце концов.

Прежде чем судить о сложности администрирования, поставьте себе Oracle XE, посмотрите на его web интерфейс - многие заблуждения развеются как дым.

Для полноценных версий есть курс "2 Day DBA" - это вполне по силам каждому заинтересованному.
15 ноя 06, 23:06    [3406576]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
Советую реализовывать на том, что знаешь, и думать в первую очередь о проектировании модели данных, идеологии написании ХП, репликации (если 50 филиалов).
А имея 3-х летний опыт писанины АИС на базе СУБД Oracle, скажу, что при реализация финансового учёта каких-то специфичных, с точки зрения технологии, проблем не возникало.
16 ноя 06, 01:06    [3406788]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
ChA
Member

Откуда: Москва
Сообщений: 11381
softwarer
"Нормально" - это возвращать сколько угодно выборок каждую через свой именованный out параметр, а не в виде одной кучи
Допустим. Но этот механизм будет работать только через OCI, но не через ODBC, разве не так ?
softwarer
индексы в которой слетают от каждого чиха.
Простуда здесь не при чем, результаты возвращаются по мере их выдачи сервером. Возврат значений счетчика обработанных записей последней командой тоже входит в их число, что действительно становится проблемой для новичков, особенно, когда они начинают работать с множественными результатами, не умея этого делать правильно. На практике NOCOUNT, как правило, устанавливается в ON, так как возвращаемое значение просто не нужно, тем более, что получить его можно и другими способами. Более того, оно просто вредно, так как посылается практически после каждого выполняемого оператора DML, забивая сеть ненужными пакетами. Лично я склонен считать эту возможность анахронизмом, наследием Sybase, хотя, в исключительно редких случаях, и полезным при отладке скрипта в QA, так как просто лень писать
PRINT @@ROWCOUNT
.

*В принципе, наверное, действительно можно считать недостатком, что протокол TDS поддерживает только синхронную передачу данных - "вопрос - ответ". Но если правильно помню, то стандарт ODBC не поддерживает асинхронной передачи данных, так что все в рамках стандартов :)
**Хотя в 2005 и была введена какая-то поддержка такой возможности(MARS), но, по отзывам, как то не очень убедительно, не говоря уж о практической пользе, которая мне, например, вообще неочевидна. Тем более, что в Oracle, насколько понимаю, главное не множественные результаты, как таковые, но множество независимых и одновременно открытых курсоров. А это уже совсем другая цель и, естественно, механизм, протокол и, разумеется, свой native API.
16 ноя 06, 04:44    [3406860]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67487
Блог
ChA
Допустим. Но этот механизм будет работать только через OCI, но не через ODBC, разве не так ?

Нет, не так. Точнее, я не имею личного опыта - не вижу никакого смысла использовать ODBC - но кого-то из спрашиваюших лично посылал в статью, где расписывалось, как использовать эту фичу через ODBC.

ChA
Простуда здесь не при чем,

Простуда здесь вызвана тем фактом, что клиентский код начинает неоправданно зависеть от реализации серверного.

ChA
Но если правильно помню, то стандарт ODBC не поддерживает

Тем хуже для него. Я не понимаю, какой смысл кивать на кривой и мертвый стандарт и гордиться наследованием его глупостей.

Резюмируя: по сравнению с MSSQL, в Oracle для записи того же требуется одна лишняя строка (open for select вместо просто select). Этим мы покупаем именованные параметры-рекордсеты и возможность легко крутить выборки так, как нам удобно, в частности передавать их между подпрограммами и использовать на сервере. Собственно, как мы недавно установили, существует возможность взять на клиенте out-курсор, выданный одной ХП и передать его параметром на вход вызываемой с клиента другой ХП - конечно, это есть изврат, но показывает возможности механизма.

Что касается второго из приведенных мной примеров, то подозреваю ответа на него я не дождусь :)
16 ноя 06, 08:00    [3407006]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Andreww
SergSuper
а в Оракле в функции можно побочный эффект сделать? т.е. сделать изменения в каких-то таблицах


Конечно. А В MSSQL-e разве нет ? Где же тут "ЖОПА"-то ?


В MSSQL-e функция не может менять таблицы, можно делать модификации, только процедура.

А что будет есть функция меняет таблицу и выдаёт данные из неё же?

С передачей выборки через параметр в MSSQL-e действительно плохо.
16 ноя 06, 09:56    [3407318]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67487
Блог
SergSuper
А что будет есть функция меняет таблицу и выдаёт данные из неё же?

Если хотите простой ответ, то ничего не будет, в смысле выборка будет построена над снапшотом на момент запроса. Если сложный ответ - надо лезть в Oracle Concepts, читать про согласованное чтение. Например если на уровне read committed из запроса вызывается функция, которая в свою очередь делает запрос, то эти два запроса не будут взаимосогласованы (основной запрос изменений не увидит, запрос в функции увидит).

Впрочем, на практике такие задачи (модифицировать читаемую таблицу) вряд ли встречаются. Побочный эффект функций применяется для более мягких вещей, например для аудита (залогировать, кто и когда запрашивал вот такую строку данных).
16 ноя 06, 10:12    [3407425]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
softwarer , спасибо, понял

а что имелось в виду
softwarer
Что касается второго из приведенных мной примеров, то подозреваю ответа на него я не дождусь :)

Я чесно говоря не понял что там делается. Динамический запрос или еще что?
16 ноя 06, 10:17    [3407476]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67487
Блог
SergSuper
Я чесно говоря не понял что там делается. Динамический запрос или еще что?

Динамический запрос, но с одной важной деталью:


-- пользователь t_user через процедуру читает таблицу t_app.my_objects

SQL> exec t_app.get_objects ( :result, 'object_type = ''VIEW''' ) ;

PL/SQL procedure successfully completed.

 OBJECT_ID OBJECT_NAME                    OBJECT_TYPE                           
---------- ------------------------------ -------------------                   
     68451 MY_OBJECTS_VIEW                VIEW                                  



-- пользователь t_user обламывается на попытке читать таблицу напрямую

SQL> select * from t_app.my_objects ;
select * from t_app.my_objects 
                    *
ERROR at line 1:
ORA-00942: table or view does not exist 
16 ноя 06, 10:35    [3407623]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
В 2000 такого не сделать, а в 2005 по-моему можно - есть возможность задать от имени кого выполнится запрос
(проветить не могу, есть только хелп к 2005)
16 ноя 06, 10:53    [3407741]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32896

Привет, Yo.!!!
Ты пишешь:

Yo.!!
Мимопроходящий
йоу, ты когда цитируешь чего-й-то,
то хотя бы читай, что там понаписано.
"...в DIANA будет компилиться..."
ты даже не понял, что есть DIANA...
Y> откою страшную тайну ...
и снова надпИси на заборах...
йоу, ты всё ж таки разберись, что есть DIANA.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3

16 ноя 06, 11:42    [3408064]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
Председатель Мао
Member

Откуда:
Сообщений: 79
2 softwarer

а теперь представьте что ваше безобидная лишняя строчка open по свой сути применяет иной механизм выборки данных. То есть обычный селект будет намного быстрее работать, чем перебор строчек. А когда большой объем выборки, оракл скажет кря?
16 ноя 06, 12:18    [3408387]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Председатель Мао
2 softwarer

а теперь представьте что ваше безобидная лишняя строчка open по свой сути применяет иной механизм выборки данных. То есть обычный селект будет намного быстрее работать, чем перебор строчек. А когда большой объем выборки, оракл скажет кря?

Не факт, это только домыслы
16 ноя 06, 12:23    [3408435]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
Председатель Мао
Member

Откуда:
Сообщений: 79
SergSuper
Председатель Мао
2 softwarer

а теперь представьте что ваше безобидная лишняя строчка open по свой сути применяет иной механизм выборки данных. То есть обычный селект будет намного быстрее работать, чем перебор строчек. А когда большой объем выборки, оракл скажет кря?

Не факт, это только домыслы


Так может давайте проверим?
16 ноя 06, 12:26    [3408463]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
кстати вот пример недостатка оракловского null в строках по сравнению с ансишным

вот это выражение
'select * from my_objects where rownum <= 5 ' ||
        case when filter is null then null else 'and ' || filter end ;
если бы использовался ансишный стандарт можно было бы записать
'select * from my_objects where rownum <= 5 ' || isnull('and ' || filter,'') 

однако скорее всего щас мне предложат на это тыщу достоинств :)
16 ноя 06, 12:35    [3408542]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Председатель Мао
SergSuper
Председатель Мао
2 softwarer

а теперь представьте что ваше безобидная лишняя строчка open по свой сути применяет иной механизм выборки данных. То есть обычный селект будет намного быстрее работать, чем перебор строчек. А когда большой объем выборки, оракл скажет кря?

Не факт, это только домыслы


Так может давайте проверим?

А что проверять? И там и там процедуры выплёвывают данные клиенту. Почему должна быть разница?
16 ноя 06, 12:37    [3408556]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
Председатель Мао
Member

Откуда:
Сообщений: 79
SergSuper
кстати вот пример недостатка оракловского null в строках по сравнению с ансишным

вот это выражение
'select * from my_objects where rownum <= 5 ' ||
        case when filter is null then null else 'and ' || filter end ;
если бы использовался ансишный стандарт можно было бы записать
'select * from my_objects where rownum <= 5 ' || isnull('and ' || filter,'') 

однако скорее всего щас мне предложат на это тыщу достоинств :)


а что в оракле нет isnull()?
16 ноя 06, 12:37    [3408560]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
Yo.!!
Guest
2SergSuper
непонял что за лажа с isnull (NVL по оракловаму) ? ты конкатинируешь строки, а речь вроде про SQL запрос идет ...

ЗЫ. про NULL='' нужно еще раз ? в прошлый раз не хватило :) ??
16 ноя 06, 12:45    [3408620]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
Председатель Мао
Member

Откуда:
Сообщений: 79
Yo.!!
2SergSuper
непонял что за лажа с isnull (NVL по оракловаму) ? ты конкатинируешь строки, а речь вроде про SQL запрос идет ...

ЗЫ. про NULL='' нужно еще раз ? в прошлый раз не хватило :) ??


Речь о том, что
строка1="select .....";
строка2=isnull('and'+filter, ' ');
строка=строка1+строка2;
то есть в мс можно обойтись сразу без консрукции кєйс вен зен енд
16 ноя 06, 12:51    [3408683]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
Yo.!!
Guest
Председатель Мао

Речь о том, что
строка1="select .....";
строка2=isnull('and'+filter, ' ');
строка=строка1+строка2;
то есть в мс можно обойтись сразу без консрукции кєйс вен зен енд


давай ты сначала разберешься, что такое строка и чем строка charов отличается от SQL запроса ;)

ЗЫ. постав NVL вместо isnull получишь тот же результат в оракле.
16 ноя 06, 13:08    [3408813]     Ответить | Цитировать Сообщить модератору
 Re: СУБД для учета финансовых потоков?  [new]
Председатель Мао
Member

Откуда:
Сообщений: 79
Yo
давай ты сначала разберешься, что такое строка и чем строка charов отличается от SQL запроса ;)


мы сейчас ведем речь о построении динамической строки SQL запроса, при чем здесь char
я так понял NVL аналог isnull?
16 ноя 06, 13:15    [3408873]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6 7 8   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить