2015-07-22 2 views
-2

У меня есть 5 разных таблиц, во всех таблицах bat_id является общим столбцом. У меня есть список bat_id и я должен проверить, существует ли запись для каждого bat_id во всех 5 таблицы ожидается пример вывода, как показано нижеПоиск количества записей из разных таблиц для списка значений в pl/sql

Пример вывода:

------------------------------------------------------ 
l table1 l table2 l table3 l table4 l table5 l bat_id 
l 0 l 21 l 5 l  0 l  1 l 452 
l 5 l 3 l 0 l  0 l  15 l 123 
l 235 l 0 l 0 l  0 l  87 l 586 
------------------------------------------------------- 

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

Список значений bat_id, для которого я должен найти количество записей bat_id = 452,123,586,5869,001

declare 
Bat_id Number 
&Bat_id = 452 
begin 
select 
(Select count(*) from Document where bat_id=&Bat_id) as table1, 
(Select count(*) from Eds_task where bat_id=&Bat_id) as table2, 
(Select count(*) from MI_Doc_Reads where bat_id=&Bat_id) as table3, 
(Select count(*) from MI_Batch_Status where bat_id=&Bat_id) as table4, 
(Select count(*) from Batch where bat_id=&Bat_id) as table5 
from dual; 
end 

Заранее спасибо

+1

Теги [tag: sql-server-2008] и [tag: plsql] несовместимы. Какая у вас база данных? – user272735

ответ

0

Печать выберите результат заявление/с внутри анонимной блоку может понадобиться курсор. Я слишком ленив, чтобы сделать это, поэтому я сделал это так.

declare 
    l_bat_id_list    varchar2(200) := '452,123,586,5869,001'; 
    l_bat_id_curr_item   number; 
    l_list_sep_count   number; 
    l_curr_sep_pos    number; 
    l_count      number; 
begin 
    l_list_sep_count := regexp_count(l_bat_id_list, ','); 

    for curr_item in 1..l_list_sep_count + 1 loop 
    l_curr_sep_pos  := instr(l_bat_id_list, ',', 1, 1); 
    if l_curr_sep_pos != 0 then 
     l_bat_id_curr_item := substr(l_bat_id_list, 1, l_curr_sep_pos - 1); 
     l_bat_id_list  := substr(l_bat_id_list, l_curr_sep_pos + 1); 
    else 
     l_bat_id_curr_item := l_bat_id_list; 
    end if; 

    Select count(*) into l_count from Document where bat_id = l_bat_id_curr_item; 
    dbms_output.put_line('table: 1, bat_id: ' || l_bat_id_curr_item || ', count: ' || l_count); 
    Select count(*) into l_count from Eds_task where bat_id = l_bat_id_curr_item; 
    dbms_output.put_line('table: 2, bat_id: ' || l_bat_id_curr_item || ', count: ' || l_count); 
    Select count(*) into l_count from MI_Doc_Reads where bat_id = l_bat_id_curr_item; 
    dbms_output.put_line('table: 3, bat_id: ' || l_bat_id_curr_item || ', count: ' || l_count); 
    Select count(*) into l_count from MI_Batch_Status where bat_id = l_bat_id_curr_item; 
    dbms_output.put_line('table: 4, bat_id: ' || l_bat_id_curr_item || ', count: ' || l_count); 
    Select count(*) into l_count from Batch where bat_id = l_bat_id_curr_item; 
    dbms_output.put_line('table: 5, bat_id: ' || l_bat_id_curr_item || ', count: ' || l_count); 

    end loop; 
end; 
/
+0

струна манипуляции ребенок ~ – sky

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

  • Нет связанных вопросов^_^