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

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

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

Заранее спасибо
...
Рейтинг: 0 / 0
Переменные в SQL-операторах, но не exec immediate?
    #32458283
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем execute immediate не устраивает?
...
Рейтинг: 0 / 0
Переменные в SQL-операторах, но не exec immediate?
    #32458308
AndreiVG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Execute immediate не устраивает по той причине, что он не возвращает набор значений. т.е. он сработает только в случае когда результат селекта будет только одна строка...
...
Рейтинг: 0 / 0
Переменные в SQL-операторах, но не exec immediate?
    #32458422
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 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
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Переменные в SQL-операторах, но не exec immediate?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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