Отложенные SQL запросы

6yrop

Интересно поддерживает ли какая-нибудь из СУБД скрипты типа такого
SqlStatement = SELECT * FROM Order WHERE Id = '123456';
SELECT *
FROM SqlStatement; /*в реальности здесь более сложный запрос*/
SELECT *
FROM SqlStatement INNER JOIN OrderDetails
ON SqlStatement.Id = OrderDetails.SqlStatementId;
Хочется проверки синтаксиса во время создания хранимой процедуры, а не в рантайме.
P.S. В MSSQLServer-е это можно сделать через параметризованные вьюшки, но это не очень красиво.

zya369

в более или менее свежих DB2-ах есть "with":

WITH RPL (PART, SUBPART, QUANTITY) AS
(SELECT ROOT.PART, ROOT.SUBPART, ROOT.QUANTITY
FROM PARTLIST ROOT
WHERE ROOT.PART = '01'
UNION ALL
SELECT CHILD.PART, CHILD.SUBPART, CHILD.QUANTITY
FROM RPL PARENT, PARTLIST CHILD
WHERE PARENT.SUBPART = CHILD.PART)
SELECT DISTINCT PART, SUBPART, QUANTITY
FROM RPL
ORDER BY PART, SUBPART, QUANTITY;

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

with foo(id) as (select id from table)
select id from foo inner join ...

6yrop

о круто , спасибо, В MSSQL2005 тоже есть with, но я не смотрел детально, думал, что это только для рекурсивных запросов.

teonazoi

with - в 2000 это всякие хинты,
в 2005 еще для создания именого подзапроса, чтоли.
а тебе я так понимаю нужен динамичиский sql, а насчет
проверки на этапе создания хранимой процедуры тут я
думаю без вариантов.
возможно тебе поможет sp_executesql, вроде как побыстрее работает.
Оставить комментарий
Имя или ник:
Комментарий: