SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » select на удаленной базе (execute statement - как правильно приготовить)
select на удаленной базе [сообщение #5701] Tue, 12 November 2024 20:34 Переход к следующему сообщению
GrigoryFomin в настоящее время не в онлайне  GrigoryFomin
Сообщений: 91
Зарегистрирован: April 2023
Member
Доброго дня.
Помогите, плз с проблемой.
Необходимо выполнить SELECT на другой базе и получить результат.
Пробую сделать так:
execute block as
declare variable poss varchar(1000);
declare variable vall numeric (16,0);

begin
for execute statement
'select row_number() over (order by sum(pricetowdisc) desc) || '' место - '' || badgename || '' [Б+'' || caname||'']'' as poss, sum(pricetowdisc) as total from opers o
join contragents c on caid=opcaidown
join emps e on e.empid=o.empid
where opdate between dateadd(day,-30,current_timestamp) and current_timestamp and optype in (100,101,102,150,151,152)
group by caname,badgename
order by total desc'
WITH AUTONOMOUS TRANSACTION
ON EXTERNAL 'd:\basa\DBSERVER.FDB'
into :poss, :vall
do
begin
end
но выдает ошибку, что неожиданный конец команды. селект выдает множество строк при этом.
Пните в нужном направлении, плз
Re: select на удаленной базе [сообщение #5702 является ответом на сообщение #5701] Wed, 13 November 2024 00:33 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 82
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
Удвойте кавычки в склейке внутри over()
Re: select на удаленной базе [сообщение #5703 является ответом на сообщение #5702] Wed, 13 November 2024 01:54 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 407
Зарегистрирован: August 2022
Senior Member
А ещё лучше - делай склейку уже возвращённых значений.
Re: select на удаленной базе [сообщение #5704 является ответом на сообщение #5703] Wed, 13 November 2024 04:08 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 82
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
Еще проще - убрать строки в кавычках, они никак не влияют на сортировку
Re: select на удаленной базе [сообщение #5705 является ответом на сообщение #5704] Wed, 13 November 2024 08:38 Переход к предыдущему сообщениюПереход к следующему сообщению
ova в настоящее время не в онлайне  ova
Сообщений: 5
Зарегистрирован: February 2024
Junior Member
Не мучать зверушку.
Текст запроса загнать в переменную S VARCHAR(1000) и сделать

for execute statement :S on external ...

При отладке и увидите, где каких кавычек по тексту не хватает.
Re: select на удаленной базе [сообщение #5706 является ответом на сообщение #5705] Wed, 13 November 2024 08:46 Переход к предыдущему сообщениюПереход к следующему сообщению
ova в настоящее время не в онлайне  ova
Сообщений: 5
Зарегистрирован: February 2024
Junior Member
...и не ясно, как вы наружу собрались результат выдавать.

execute block
returns (
poss varchar(1000),
vall numeric (16,0))
as
declare variable S VARCHAR(1000);
begin
 s = 'select --';
 for execute statement :S on external ... into :poss, :vall
 ...
end

Можно на отладке и S загнать в returns и результат отлаживать.
execute block
returns (
poss varchar(1000),
vall numeric (16,0),
S VARCHAR(1000))
as
-- declare variable S VARCHAR(1000);
begin
 s = 'select --';
 SUSPEND;
 for execute statement :S on external ... into :poss, :vall
 do
 begin
    ...
    SUSPEND;
 end
end

Re: select на удаленной базе [сообщение #5712 является ответом на сообщение #5706] Wed, 13 November 2024 20:10 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 329
Зарегистрирован: June 2022
Senior Member
Открой для себя альтернативные кавычки для строковых литералов и сразу станет легче

execute block as
  declare variable poss varchar(1000);
  declare variable vall numeric (16,0);
begin
  for
    execute statement
Q'{
select
  row_number() over (order by sum(pricetowdisc) desc) || ' место - ' || badgename || ' [Б+' || caname|| ']' as poss,
  sum(pricetowdisc) as total
from
  opers o
  join contragents c on caid=opcaidown
  join emps e on e.empid=o.empid
where opdate between dateadd(day, -30,current_timestamp)
  and current_timestamp and optype in (100,101,102,150,151,152)
group by caname, badgename
order by total desc
}'
    WITH AUTONOMOUS TRANSACTION
    ON EXTERNAL 'd:\basa\DBSERVER.FDB'
    into :poss, :vall
  do
  begin
  end
end
Re: select на удаленной базе [сообщение #5713 является ответом на сообщение #5712] Thu, 14 November 2024 05:29 Переход к предыдущему сообщениюПереход к следующему сообщению
fraks в настоящее время не в онлайне  fraks
Сообщений: 134
Зарегистрирован: June 2022
Географическое положение: Новосибирск
Senior Member
sim_84 писал(а) Thu, 14 November 2024 00:10
Открой для себя альтернативные кавычки для строковых литералов и сразу станет легче

execute block as
  declare variable poss varchar(1000);
  declare variable vall numeric (16,0);
begin
  for
    execute statement
Q'{
select
А это с какой версии появилось (альтернативные кавычки)?

[Обновления: Thu, 14 November 2024 05:30]

Известить модератора

Re: select на удаленной базе [сообщение #5714 является ответом на сообщение #5701] Thu, 14 November 2024 08:20 Переход к предыдущему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 329
Зарегистрирован: June 2022
Senior Member
Firebird 3.0
Предыдущая тема: FireBird и PowerShell
Следующая тема: Архив "старого" скруля
Переход к форуму:
  


Текущее время: Thu Nov 14 23:49:03 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00870 секунд