С Java 1.5 Java теперь имеет намного более чистый синтаксис для записи функций переменной арности. Так, вместо того, чтобы просто передать массив, теперь можно сделать следующий
public void foo(String... bars) {
for (String bar: bars)
System.out.println(bar);
}
, панели автоматически преобразовываются в массив указанного типа. Не огромная победа, а победа, тем не менее.
Как уже говорилось, вы не можете.
Возможным решением было бы реализовать сохраненную функцию, например:
CREATE FUNCTION v_emp (@pintEno INT)
RETURNS TABLE
AS
RETURN
SELECT * FROM emp WHERE emp_id=@pintEno;
Это позволяет использовать ее как нормальное представление, с:
SELECT * FROM v_emp(10)
нет вы можете передать параметр рассматриваемой процедуре
Нет, представление статично. Одна вещь, которую вы можете сделать (в зависимости от версии сервера SQl), - это проиндексировать представление.
В вашем примере (запрос только одной таблицы) индексированное представление не имеет преимуществ, просто запрашивая таблицу с индексом на ней, но если вы выполняете много соединений для таблиц с условиями соединения, индексированное представление может значительно повысить производительность.
Нет, представление запрашивается точно так же, как SELECT из таблицы.
Чтобы делать то, что вы хотите, используйте пользовательскую функцию с табличным значением с одним или несколькими параметрами
нет. если вы должны затем использовать определяемую пользователем функцию, в которую вы можете передавать параметры.
Есть два способа добиться того, что вы хотите, к сожалению, ни один из них не может быть реализован с использованием представления.
Вы можете либо создать определяемую пользователем функцию с табличным значением, которая принимает требуемый параметр и возвращает результат запроса
Или вы можете сделать почти то же самое, но создать хранимую процедуру вместо определяемой пользователем функции.
Для примера
хранимая процедура будет выглядеть как
CREATE PROCEDURE s_emp
(
@enoNumber INT
)
AS
SELECT
*
FROM
emp
WHERE
emp_id=@enoNumber
Или определяемая пользователем функция будет выглядеть например
CREATE FUNCTION u_emp
(
@enoNumber INT
)
RETURNS TABLE
AS
RETURN
(
SELECT
*
FROM
emp
WHERE
emp_id=@enoNumber
)
Нет, не можете, как сказал Младен Праждич. Думайте о представлении как о «статическом фильтре» для таблицы или комбинации таблиц. Например: представление может объединять таблицы Order
и Customer
, поэтому вы получаете новую «таблицу» строк из Order
вместе с новыми столбцами, содержащими имя клиента и номер клиента (комбинация таблиц). Или вы можете создать представление, которое выбирает только необработанные заказы из таблицы Order
(статический фильтр).
Затем вы выбираете из представления, как если бы вы выбирали из любой другой "нормальной" таблицы - все "нестатическая" фильтрация должна выполняться вне представления (например, "Получить все заказы для клиентов по имени Миллер" или "Получить необработанные заказы, поступившие 24 декабря").
Представление - это не что иное, как предопределенный оператор SELECT. Таким образом, единственный реальный ответ был бы: нет, вы не можете.
Я думаю, что вы действительно хотите создать хранимую процедуру, где в принципе вы можете использовать любой допустимый SQL, чтобы делать все, что захотите, включая параметры приема и выбора data.
Кажется вероятным, что вам действительно нужно добавить предложение where только при выборе из вашего представления, но вы на самом деле не предоставили достаточно деталей, чтобы быть уверенным.