2016-09-21 3 views
0

Мы в первую очередь используем SQL Server для наших запросов, но кажется, что когда мы используем Java, он запускается в движке Oracle. В this question Я попросил метод подсчета записей SQL Server из нескольких таблиц, так как в большинстве случаев SQL Server работает так же, как Oracle. Я смог получить данные, возвращаемые по этому запросу:Oracle Subquery Returning No Records

declare @count table (count1 int, count2 int, count3 int) 
INSERT INTO @count 
select (SELECT COUNT(*) FROM Bike), 
(SELECT COUNT(*) FROM Car), 
(SELECT COUNT(*) FROM Truck) 
select * from @count; 

Однако, когда вы помещаете это на Java, я получаю сообщение об ошибке, чтобы никакие записи не возвращались. Любая идея, что я могу сделать здесь, чтобы это исправить?

+0

Oracle не имеет табличных переменных, поэтому я озадачен тем, какой код вы могли бы запустить. –

+0

Независимо от кода, который я запускал, мне нужно знать, как получить подсчеты для трех отдельных таблиц в одном запросе. –

+0

Я предпочитаю отделять свой java и мой sql, помещая запросы в хранимые процедуры. Если вы можете заставить свой sql работать непосредственно в базе данных, я думаю, что запуск внутри хранимой процедуры будет стратегией, которую стоит изучить. – mba12

ответ

1

В Oracle, вам нужно использовать dual таблицу:

select (SELECT COUNT(*) FROM Bike), 
     (SELECT COUNT(*) FROM Car), 
     (SELECT COUNT(*) FROM Truck) 
from dual; 

Если вам необходимо вернуть эти значения в одной строке, то должно работать в любой базе данных:

select b.bcnt, c.ccnt, t.tcnt 
from (SELECT COUNT(*) as bcnt FROM Bike) b cross join 
    (SELECT COUNT(*) as ccnt FROM Car) c cross join 
    (SELECT COUNT(*) as tcnt FROM Truck) t; 
+0

Этот второй запрос сделал это для меня. Спасибо огромное! –

Смежные вопросы