Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Переменные в SQL-операторах, но не exec immediate? / 4 сообщений из 4, страница 1 из 1
26.03.2004, 12:33
    #32458280
AndreiVG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные в SQL-операторах, но не exec immediate?
Подскажите пожалуйста, как другим способом сделать (без использования execute immediate)

execute immediate 'select '||MyFunction()||' from Table'

я слышал, что вроде в 9.0.1 сделали переменные в SQL-операторах.

Заранее спасибо
...
Рейтинг: 0 / 0
26.03.2004, 12:34
    #32458283
Александр Спелицин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные в SQL-операторах, но не exec immediate?
А чем execute immediate не устраивает?
...
Рейтинг: 0 / 0
26.03.2004, 12:43
    #32458308
AndreiVG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные в SQL-операторах, но не exec immediate?
Execute immediate не устраивает по той причине, что он не возвращает набор значений. т.е. он сработает только в случае когда результат селекта будет только одна строка...
...
Рейтинг: 0 / 0
26.03.2004, 13:21
    #32458422
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные в SQL-операторах, но не exec immediate?
В BOL написано, что только глобальные переменные имеют право участвовать в динамическом SQL. Однако привожу скрипт для 9.01:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
BEGIN
  DECLARE @Value1 int;
  DECLARE @Value2 int;
  DECLARE LOCAL TEMPORARY TABLE #Table (Value int NOT NULL) NOT TRANSACTIONAL;

  SET @Value1 =  0 ;

  // Увеличим @Value1 на  1 
  EXECUTE IMMEDIATE WITH RESULT SET OFF 'SET @Value1 = @Value1 + 1';

  // Суммируем @Value1 +  1  в @Value2
  EXECUTE IMMEDIATE WITH RESULT SET OFF 'SELECT @Value1 + 1 INTO @Value2';

  // Покажем, что все сработало
  SELECT @Value1, @Value2;

  // Организуем глобальную переменную
  CREATE VARIABLE @Value int;
  SET @Value =  2 ;

  // Заполним табличку
  EXECUTE IMMEDIATE WITH RESULT SET OFF '
    INSERT INTO #Table
      SELECT 10
      UNION ALL
      SELECT 20';
  
  // Вернем набор данных с вычисляемым столбцом по формуле @Value * Value
  EXECUTE IMMEDIATE WITH RESULT SET ON 'SELECT @Value * Value AS Value FROM #TABLE';

  DROP VARIABLE @Value;

  // Попробуем сделать тоже самое с локальной переменной и получим ошибку
  EXECUTE IMMEDIATE WITH RESULT SET ON 'SELECT @Value2 * Value AS Value FROM #TABLE';
END

Как видим, если динамический SQL не возвращает выборку, то все нормально работает и с локальными переменными. В выборках он локальные переменные не видит, однако видит локальные темповые таблицы.

авторExecute immediate не устраивает по той причине, что он не возвращает набор значений. т.е. он сработает только в случае когда результат селекта будет только одна строка...
Вот это я честно говоря не понял. Прекрасно он возвращает набор данных больше одной строки :)
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Переменные в SQL-операторах, но не exec immediate? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]