То, что мне нравится делать, имеют много таблиц, которые представляют необработанные данные, так в этом случае Вы имели бы
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] .
Execute
- это sql * плюс синтаксис .. попробуйте заключить вызов в begin .. end следующим образом:
begin
temp_proc;
end;
(Хотя Джеффри говорит, что это не работает в APEX .. но вы пытаетесь заставить это работать в SQLDeveloper ... попробуйте там меню "Выполнить".)
Oracle 10g Express Edition поставляется со встроенным Oracle Application Express (Apex). Вы запускаете его в окне команд SQL, которое не поддерживает синтаксис SQL * Plus.
Это не имеет значения, потому что (как вы обнаружили) синтаксис BEGIN ... END действительно работает в Apex.
Вы пытались исправить такой синтаксис?:
create or replace procedure temp_proc AS
begin
DBMS_OUTPUT.PUT_LINE('Test');
end;