Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 17.11.2014
Сообщений: 53
1

Обычный select и переменная

10.03.2017, 15:53. Показов 3350. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Скажите, как-нибудь можно объявить переменную перед селектом, а потом ее использовать в запросе?
На выходе (результат запроса) должна получиться таблица с набором данных.
Рассматривал курсоры, функции...но они не подходят т.к. все выводят в единое окно
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2017, 15:53
Ответы с готовыми решениями:

SELECT игнорировать переменная =null
не пойму как сделать следующее. есть две переменные N и F нужно написать SELECT типа такого ...

Переменная как имя select-a
Добрый день Товарищи! Подскажите как получить значение select если они создаются динамически и имя...

Переменная=Документ.имя. Сделать выборку всех документов с именем Переменная
Привет всем. У меня есть проблема и варианты решения, но они не работают. Проблема вот такая:...

Проблема с Adodc: 'Переменная объекта или переменная блока With не задана'
В свойствах самого контрола (MS ADO Data Control) проверка подключения к атблице (подключаюсь через...

5
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
10.03.2017, 16:39 2
Цитата Сообщение от Shtokola
Скажите, как-нибудь можно объявить переменную перед селектом, а потом ее использовать в запросе?
Только в PL/SQL блоке.

Цитата Сообщение от Shtokola
На выходе (результат запроса) должна получиться таблица с набором данных.
Если нужна не одна строка, тогда только курсор

Цитата Сообщение от Shtokola
Рассматривал курсоры, функции...но они не подходят т.к. все выводят в единое окно
В какое такое окно?
0
0 / 0 / 0
Регистрация: 17.11.2014
Сообщений: 53
10.03.2017, 16:57  [ТС] 3
В общем есть запрос. В нем используется счет. Вот как бы его "запихать" в переменную перед запросом, т.к. он часто используется в самом запросе ? Чтоб при выполнении данного запроса в PL/SQL Developer или sql Navigator получить таблицу с набором данных ?
Oracle 11 SQL
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
SELECT 
t.prodate AS "Дата",
t.opercode AS "Шифр",
t.docnum AS "№ Док.",
CASE WHEN twinpln.GetNewAccNum (dbacc, dbcurrcode) = '20202978500160000016' 
     THEN  twinpln.GetNewAccNum (dbacc, dbcurrcode)
     ELSE  twinpln.GetNewAccNum (kracc, krcurrcode)
     END "Cчет кассы",
CASE WHEN twinpln.GetNewAccNum (kracc, krcurrcode) <> '20202978500160000016'  
     THEN  twinpln.GetNewAccNum (kracc, krcurrcode)
     ELSE  twinpln.GetNewAccNum (dbacc, dbcurrcode)
     END "Cчет Контрагента",            
CASE WHEN twinpln.GetNewAccNum (dbacc, dbcurrcode) = '20202978500160000016' 
     THEN t.sumvalpro
     END "Сум.Прих.",
CASE WHEN twinpln.GetNewAccNum (dbacc, dbcurrcode) <> '20202978500160000016'
     THEN t.sumvalpro
     END "Сум.Расх.",
CASE WHEN twinpln.GetNewAccNum (dbacc, dbcurrcode) = '20202978500160000016' 
     THEN t.sumpro
     END "Экв.в руб.Прих",
CASE WHEN twinpln.GetNewAccNum (dbacc, dbcurrcode) <> '20202978500160000016'
     THEN t.sumpro
     END "Экв.в руб.Расх",      
NVL (co.comment_ , cd.comment_) AS "Назначение",
ca.symbol AS "Символ",
CASE WHEN t.opercode <> '3'
     THEN (SELECT cl.shortname FROM clients cl
           WHERE cl.clientcode = 
                 (SELECT ac.clientcode FROM accounts ac
                  WHERE ac.accnum = t.kracc AND ac.currcode = t.krcurrcode  ))
     ELSE (SELECT cl.shortname FROM clients cl
           WHERE cl.clientcode = 
                 (SELECT ac.clientcode FROM accounts ac
                  WHERE t.dbacc = ac.accnum AND t.dbcurrcode = ac.currcode))
     END AS "Контрагент",
CASE WHEN twinpln.GetNewAccNum (dbacc, dbcurrcode) = '20202978500160000016'
     THEN TRIM (leading '-' FROM limman.RepInLim(p2.prodate, dbacc, dbcurrcode))
     WHEN twinpln.GetNewAccNum (kracc, krcurrcode) = '20202978500160000016'
     THEN TRIM (leading '-' FROM limman.RepInLim(p2.prodate, kracc, krcurrcode))   
     END "Ост.ВХ.",
CASE WHEN twinpln.GetNewAccNum (dbacc, dbcurrcode) = '20202978500160000016'
     THEN TRIM (leading '-' FROM limman.RepOutLimVal(p2.prodate, dbacc, dbcurrcode))
     WHEN twinpln.GetNewAccNum (kracc, krcurrcode) = '20202978500160000016'
     THEN TRIM (leading '-' FROM limman.RepOutLimVal(p2.prodate, kracc, krcurrcode))  
     END "Ост.ИСХ.",
CASE WHEN twinpln.GetNewAccNum (dbacc, dbcurrcode) = '20202978500160000016'
     THEN TRIM (leading '-' FROM limman.RepOutlim(p2.prodate - 1, dbacc, dbcurrcode))
     WHEN twinpln.GetNewAccNum (kracc, krcurrcode) = '20202978500160000016'
     THEN TRIM (leading '-' FROM limman.RepOutlim(p2.prodate - 1, kracc, krcurrcode)) 
     END "Экв.в руб.ВХ",
 
CASE WHEN twinpln.GetNewAccNum (dbacc, dbcurrcode) = '20202978500160000016'
     THEN TRIM (leading '-' FROM limman.RepOutlim(p2.prodate, dbacc, dbcurrcode))
     WHEN twinpln.GetNewAccNum (kracc, krcurrcode) = '20202978500160000016'
     THEN TRIM (leading '-' FROM limman.RepOutlim(p2.prodate, kracc, krcurrcode))  
     END "Экв.в руб.ИСХ"                 
FROM PRO t
left join cashcoma co ON t.doccode = co.doccode
left join CASHSDA ca ON t.doccode = ca.doccode
left join commentadoc cd ON t.procode = cd.procode
WHERE t.prodate BETWEEN TO_DATE ('01.12.2015','dd.mm.yyyy') AND TO_DATE('28.02.2017','dd.mm.yyyy')
AND (--кредит
     twinpln.GetNewAccNum (dbacc, dbcurrcode) = '20202978500160000016' OR
     --Дебет
     twinpln.GetNewAccNum (kracc, krcurrcode) = '20202978500160000016')
0
476 / 239 / 114
Регистрация: 12.05.2016
Сообщений: 647
10.03.2017, 18:24 4
Лучший ответ Сообщение было отмечено Shtokola как решение

Решение

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WITH w_acc AS(
  SELECT  '20202978500160000016'  AS acc FROM dual
)
 
SELECT 
......
 
CASE WHEN twinpln.GetNewAccNum (dbacc, dbcurrcode) = w_acc.acc
     THEN  twinpln.GetNewAccNum (dbacc, dbcurrcode)
     ELSE  twinpln.GetNewAccNum (kracc, krcurrcode)
     END "Cчет кассы",
 
.....
 
FROM w_acc CROSS JOIN  PRO t
LEFT JOIN cashcoma co ON t.doccode = co.doccode
LEFT JOIN CASHSDA ca ON t.doccode = ca.doccode
LEFT JOIN commentadoc cd ON t.procode = cd.procode
1
0 / 0 / 0
Регистрация: 17.11.2014
Сообщений: 53
11.03.2017, 12:27  [ТС] 5
Anvano, В понедельник попробую. Спасибо
0
0 / 0 / 0
Регистрация: 17.11.2014
Сообщений: 53
13.03.2017, 15:20  [ТС] 6
Anvano, Еще раз спасибо! Все работает.
0
13.03.2017, 15:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2017, 15:20
Помогаю со студенческими работами здесь

Модульная переменная или блочная статическая переменная: что лучше
Переменная (тип String) нужна на всем протяжении работы программы. Нужен совет опытных - что...

Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз
Исходники: /* main.cpp */ #include &quot;hider.h&quot; int main(void) { return 0; } /* foo.cpp */

Public переменная, или private переменная и функции get/set
Пишу свой класс, который потом будет много где использоваться и пытаюсь осознать, как правильнее и,...

Пустая переменная выводится как %переменная%
Когда %var% ещё пустая, echo %var% выдаёт не пустоту (или &quot;Режим вывода команд на экран (ECHO)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru