Как отправить подобный подзапросу параметр в процедуру SQL? - PullRequest
1 голос
/ 07 января 2020

У меня есть база данных firebird, где я вызываю процедуру для получения некоторых данных. Для этой процедуры требуется идентификатор, поэтому у меня есть два php запроса, один из которых дает мне все идентификаторы, а другой вызывает процедуру.

$queryP ="SELECT PROVEEDOR_ID FROM PROVEEDORES";
...some code...
while ($RowQ = ibase_fetch_object ($QueryObject)) 
{   
    $queryCompras =SELECT SUM(IMPORTE) FROM ORSP_CM_COMPRAS_PROV($RowQ->PROVEEDOR_ID, '2019-01-01', '2019-12-31', 'B', 'P', 'N');
...some code...

Я хотел бы сделать что-то вроде

 SELECT SUM(COMPRA_IMPORTE) FROM ORSP_CM_COMPRAS_PROV((SELECT PROVEEDOR_ID FROM PROVEEDORES), '2019-01-01', '2019-12-31', 'B', 'P', 'N'); 

Чтобы не делать слишком много вызовов базы данных, но я получаю

Оператор не выполнен, SQLSTATE = 21000 нескольких строк в синглтоне select

Есть ли способ сделать это?

1 Ответ

1 голос
/ 08 января 2020

Вы можете присоединиться к своему подзапросу (или в данном случае к таблице) и хранимой процедуре, чтобы получить желаемый эффект.

select sum(COMPRA_IMPORTE)
from PROVEEDORES p
left join ORSP_CM_COMPRAS_PROV(p.PROVEEDOR_ID, '2019-01-01', '2019-12-31', 'B', 'P', 'N') on 1 = 1

Обратите внимание, что я использую left join, но его фактический эффект при присоединение к хранимой процедуре аналогично тому, что, например, Microsoft SQL Server называет OUTER APPLY.

...