Мы можем передать параметры представлению в SQL?

С Java 1.5 Java теперь имеет намного более чистый синтаксис для записи функций переменной арности. Так, вместо того, чтобы просто передать массив, теперь можно сделать следующий

public void foo(String... bars) {
   for (String bar: bars)
      System.out.println(bar);
}

, панели автоматически преобразовываются в массив указанного типа. Не огромная победа, а победа, тем не менее.

119
задан hims056 25 December 2017 в 07:59
поделиться

8 ответов

Как уже говорилось, вы не можете.

Возможным решением было бы реализовать сохраненную функцию, например:

CREATE FUNCTION v_emp (@pintEno INT)
RETURNS TABLE
AS
RETURN
   SELECT * FROM emp WHERE emp_id=@pintEno;

Это позволяет использовать ее как нормальное представление, с:

SELECT * FROM v_emp(10)
118
ответ дан 24 November 2019 в 01:49
поделиться

нет вы можете передать параметр рассматриваемой процедуре

3
ответ дан 24 November 2019 в 01:49
поделиться

Нет, представление статично. Одна вещь, которую вы можете сделать (в зависимости от версии сервера SQl), - это проиндексировать представление.

В вашем примере (запрос только одной таблицы) индексированное представление не имеет преимуществ, просто запрашивая таблицу с индексом на ней, но если вы выполняете много соединений для таблиц с условиями соединения, индексированное представление может значительно повысить производительность.

4
ответ дан 24 November 2019 в 01:49
поделиться

Нет, представление запрашивается точно так же, как SELECT из таблицы.

Чтобы делать то, что вы хотите, используйте пользовательскую функцию с табличным значением с одним или несколькими параметрами

5
ответ дан 24 November 2019 в 01:49
поделиться

нет. если вы должны затем использовать определяемую пользователем функцию, в которую вы можете передавать параметры.

6
ответ дан 24 November 2019 в 01:49
поделиться

Есть два способа добиться того, что вы хотите, к сожалению, ни один из них не может быть реализован с использованием представления.

Вы можете либо создать определяемую пользователем функцию с табличным значением, которая принимает требуемый параметр и возвращает результат запроса

Или вы можете сделать почти то же самое, но создать хранимую процедуру вместо определяемой пользователем функции.

Для примера

хранимая процедура будет выглядеть как

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
)
33
ответ дан 24 November 2019 в 01:49
поделиться

Нет, не можете, как сказал Младен Праждич. Думайте о представлении как о «статическом фильтре» для таблицы или комбинации таблиц. Например: представление может объединять таблицы Order и Customer , поэтому вы получаете новую «таблицу» строк из Order вместе с новыми столбцами, содержащими имя клиента и номер клиента (комбинация таблиц). Или вы можете создать представление, которое выбирает только необработанные заказы из таблицы Order (статический фильтр).

Затем вы выбираете из представления, как если бы вы выбирали из любой другой "нормальной" таблицы - все "нестатическая" фильтрация должна выполняться вне представления (например, "Получить все заказы для клиентов по имени Миллер" или "Получить необработанные заказы, поступившие 24 декабря").

13
ответ дан 24 November 2019 в 01:49
поделиться

Представление - это не что иное, как предопределенный оператор SELECT. Таким образом, единственный реальный ответ был бы: нет, вы не можете.

Я думаю, что вы действительно хотите создать хранимую процедуру, где в принципе вы можете использовать любой допустимый SQL, чтобы делать все, что захотите, включая параметры приема и выбора data.

Кажется вероятным, что вам действительно нужно добавить предложение where только при выборе из вашего представления, но вы на самом деле не предоставили достаточно деталей, чтобы быть уверенным.

5
ответ дан 24 November 2019 в 01:49
поделиться
Другие вопросы по тегам:

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