объединение запросов с переменными перестановки в sqlplus - PullRequest
0 голосов
/ 08 марта 2011

У меня 14 одинаковых полей, и я ищу строку «А» в каждом из них.Я хотел бы после этого заказа по полю "position"

-- some set in order to remove a lot of useless text
def col='col01'
select '&col' "Fieldname", 
       &col "value", 
       position
from oneTable
where &col like '%A%'
/
-- then for the second field, I only have to type two lines
def col='col02'
/
...
def col='col14'
/

Запишите все поля, которые содержат 'A'.Проблема в том, что эти поля не упорядочены по позиции.

Если я использую UNION между таблицами, я не могу использовать переменные подстановки (& col), и мне нужно написать bash в unix, чтобы сделатьзамена обратно в кш.Проблема, конечно, в том, что код базы данных должен быть жестко запрограммирован в этом сценарии (соединение не является простым делом).

Если я использую REFCURSOR с OPEN, я не могу сгруппировать наборы результатов вместе.У меня есть только одна просьба, и я не могу сделать СОЮЗ тогда.(вывести refcursor1 union refcursor2; вывести refcursor1 + refcursor2 вызвать исключение, выбрать * из refcursor1 union select * из refcursor2, также не работает).

Как объединить результаты в один большой "REFCURSOR"?Или использовать объединение двух разных прогонов ('/') моего запроса, что-то вроде удержания запроса при наборе нового определения переменных?

Спасибо за любой совет.

1 Ответ

0 голосов
/ 08 марта 2011

Это отвечает на ваш вопрос?

CREATE TABLE #containingAValueTable
(
    FieldName VARCHAR(10),
    FieldValue VARCHAR(1000),
    position   int
)
def col='col01'

INSERT INTO #containingAValueTable
(
FieldName , FieldValue, position
)
SELECT '&col' "Fieldname", 
       &col "value", 
       position
FROM yourTable
        WHERE &col LIKE '%A%'

/
-- then for the second field, I only have to type two lines
def col='col02'
INSERT INTO...
/

def col='col14'
/

select * from #containingAValueTable order by postion

DROP #containingAValueTable

Но я не совсем уверен в том, что вы используете «переменную подстановки», называемую «col» (и у меня есть только SQL Server для проверки моего запроса, поэтому я использовал явные имена полей)

edit: извините за charcater '#', мы так часто используем его в SQL Server для временных, я даже не знал, что это специфично для SQL Server (более того, я думаю, что в SQL Server это обязательно для создания временной таблицы). Как бы то ни было, я счастлив, что смогу быть тебе полезен.

...