В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Если Вы, вероятно, захотите объединить результат этой части кода с другими таблицами, то, очевидно, табличная функция позволит Вам составлять результаты в единственном операторе SELECT.
Обычно существует иерархия (Представление < телевизионная Функция < Сохраненный Proc). Можно сделать больше в каждом, но способность составить выводы, и для оптимизатора для получения действительно включенных уменьшений как функциональности увеличивается.
Так используют, какой бы ни каждый минимально позволяет Вам выражать свой желаемый результат.
Функции должны быть детерминированы, и не могут использоваться для внесения изменений в базу данных, тогда как хранимые процедуры позволяют, Вы, чтобы сделать вставляете и обновляете, и т.д.
необходимо ограничить использование функций, так как они создают огромную проблему масштабируемости для больших, сложных запросов. Они становятся видом "черного квадрата" для оптимизатора запросов, и Вы будете видеть огромные различия в производительности между использованием функций и просто введением кода в запрос.
, Но они определенно полезны для табличных возвратов в очень конкретных случаях.
, Если необходимо проанализировать разграниченный запятой список, для моделирования передачи массива к процедуре, функция может превратить список в таблицу для Вас. Это - обычная практика с SQL-сервером 2005, так как мы еще не можем передать в таблицах хранимым процедурам (мы можем с 2008).
, Если хранимая процедура соответствует следующим критериям, это - хороший кандидат на то, чтобы быть переписанным как табличная функция:
логика является выразимой в единственном операторе SELECT, но является хранимой процедурой, а не представлением, только из-за потребности в параметрах.
хранимая процедура не выполняет операции обновления, кроме к табличным переменным.
нет никакой потребности в динамических операторах EXECUTE.
хранимая процедура возвращает один набор результатов.
основная цель хранимой процедуры должна создать промежуточные результаты, которые должны быть загружены во временную таблицу, которая тогда запрашивается в операторе SELECT.
Если у Вас есть функция, Вы могли бы использовать ее в качестве части Вашего SQL-оператора, например
SELECT function_name(field1) FROM table
Она не прокладывает себе путь для хранимых процедур.
Я лично использую табличные функции, когда все, что я возвращаю, является единственной таблицей без влияния. В основном я рассматриваю их как параметризованные представления.
, Если мне нужны несколько возвращенные recordsets или если будут значения, обновленные в таблицах, я использую хранимую процедуру.
Мои 2 цента
Как упомянуто выше, функции являются большим количеством документирования readable/composable/self, но менее производительны в целом и могут быть серьезно менее производительными, если Вы увлекаетесь ими в соединениях такой как
SELECT *
FROM dbo.tvfVeryLargeResultset1(@myVar1) tvf1
INNER JOIN dbo.tvfVeryLargeResultset1(@myVar2) tvf2
ON (tvf1.JoinId = tvf2.JoinId)
Часто, просто необходимо принять дублирование кода, который мог устранить tvf (по недопустимой стоимости производительности.)
Еще одна точка я еще не видел упомянутый, то, что Вы не можете использовать изменение состояния базы данных временные таблицы в составном tvf. наиболее функционально эквивалентный механизм к временной таблице является негосударственным изменением в табличной переменной памяти, и для больших наборов данных, временная таблица, вероятно, будет более производительной, чем табличная переменная. (Другие альтернативы включают динамические таблицы & общие табличные выражения, но на некотором уровне сложности, они прекращают быть хорошим вариантом IMO.)
Я был бы производительность тестировать обоих. Это вероятно, подход SP или полученная таблица были бы значительно быстрее, чем функция и раз так что подход должен использоваться. В целом я избегаю функций becasue, они могут быть пожирателями ресурсов производительности.
Это зависит:), Если Вы хотите использовать табличный результат в другой процедуре, Вы лучше из использования Функции TableValued. Если результаты для клиента, сохраненный proc обычно является лучшим способом пойти.