Как выполнить хранимую процедуру оракула?

То, что мне нравится делать, имеют много таблиц, которые представляют необработанные данные, так в этом случае Вы имели бы

Items (ID pk, Name, )
Tags (ID pk, Name)
TagItems (TagID fk, ItemID fk)

, Это работает быстро в течение времени записи и сохраняет все нормализованным, но можно также отметить, что для каждого тега, Вам будет нужно к объединяющим таблицам дважды для каждого дальнейшего тега, Вы хотите И, таким образом, это имеет медленное чтение.

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

CachedTagItems(ID, Name, , tag1, tag2, ... tagN)

Тогда можно рассмотреть, как часто таблица Tagged Item должна быть усовершенствована, если это находится на каждой вставке, затем звоните, хранимая процедура в курсоре вставляют событие. Если это - почасовая задача, то настроенный работа с почасовой оплатой выполнить его.

Теперь для получения действительно умными в поиске данных Вы захотите создать хранимую процедуру для получения данных из тегов. Вместо того, чтобы использовать вложенные запросы в операторе крупного дела, Вы хотите передать в единственном параметре, содержащем список тегов, которые Вы хотите выбрать из базы данных и возвратить официальный набор документов Объектов. Это было бы лучшим в двоичном формате, с помощью побитовых операторов.

В двоичном формате, легко объяснить. Скажем, существует четыре тега, которые будут присвоены объекту в двоичном файле, мы могли представить это

0000

, Если бы все четыре тега присвоены объекту, объект был бы похож на это...

1111

, Если просто первые два...

1100

Тогда это - просто случай нахождения двоичных значений с 1 с и нулями в столбце, который Вы хотите. Используя Побитовые операторы SQL Server, можно проверить, что существует 1 в первом из столбцов с помощью очень простых запросов.

Проверка эта ссылка для обнаружения [еще 115] .

48
задан APC 11 January 2012 в 12:12
поделиться

3 ответа

Execute - это sql * плюс синтаксис .. попробуйте заключить вызов в begin .. end следующим образом:

begin 
    temp_proc;
end;

(Хотя Джеффри говорит, что это не работает в APEX .. но вы пытаетесь заставить это работать в SQLDeveloper ... попробуйте там меню "Выполнить".)

74
ответ дан 26 November 2019 в 18:53
поделиться

Oracle 10g Express Edition поставляется со встроенным Oracle Application Express (Apex). Вы запускаете его в окне команд SQL, которое не поддерживает синтаксис SQL * Plus.

Это не имеет значения, потому что (как вы обнаружили) синтаксис BEGIN ... END действительно работает в Apex.

3
ответ дан 26 November 2019 в 18:53
поделиться

Вы пытались исправить такой синтаксис?:

create or replace procedure temp_proc AS
begin
  DBMS_OUTPUT.PUT_LINE('Test');
end;
-1
ответ дан 26 November 2019 в 18:53
поделиться
Другие вопросы по тегам:

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