скрипт оболочки, который будет взаимодействовать с базой данных - PullRequest
0 голосов
/ 29 сентября 2010

Пишу сценарий оболочки, такой как:

#! /bin/bash
`sqlplus -s <username>/<passwd>@dbname`    
set echo on  
set pagesize 0  
set verify off  
set lines 32000  
set trimspool on  
set feedback off  
`SELECT tr.number, count(*) as total  
              FROM <dbname>.<tablename1> tr  
              LEFT JOIN <tablename2> t2 ON t2.id2 = tr.id1  
              LEFT JOIN <tablename3> t3 ON t3.id2 = tr.id1  
              LEFT JOIN <tablename4> t4 ON t4.id2 = tr.id1  
              WHERE tr.TIMESTAMP > SYSDATE - 75 / 1440  
               AND tr.TIMESTAMP <= SYSDATE - 15 / 1440  
              and (t2.number like '2____' OR t2.number like '3____' OR t2.number like '99____' )  
AND tr.id = 703 and t2.v1 = 100  
          group by (tr.number);`  
exit;  
EOF

В настоящее время мой вывод похож на: *

 tr.number                    count(*)  
 27684                        76        
 27050                         9        
 37744                         7        
 997717                       11        
 997797                        8        
 37224                         3       

Я хочу сгруппировать счетчик чисел 2_ , 3 __ , 99_ _ , например

tr.number  count(*)  
 2____      76+9  
 3____      7+3  
 99_____    11+8  

, выходные данные должны быть ТОЛЬКО в 3 строках с начальными цифрами 2,3 и 99 в трехстроки, как показано выше.

_ представляет 4 места.

Пожалуйста, сообщите.

PS Не могли бы вы сообщить, почему важно ставить операторы SET и их краткое описание?,

Спасибо!

Ответы [ 3 ]

1 голос
/ 29 сентября 2010

Вы можете увидеть, что команды SET делают в руководстве: http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch12040.htm

1 голос
/ 29 сентября 2010

Вы можете получить первые один или два символа tr.number, а затем сгруппировать их, чтобы получить ожидаемые результаты.

Поскольку вы не предоставили сценарии создания таблицы, я создал демонстрационную таблицу и ее данные, чтобы проиллюстрировать это.

create table tr(
   id number,
   total_records number);

insert into tr values (200123,50);
insert into tr values (20034, 25);
insert into tr values (30034, 15);
insert into tr values (300567, 100);
insert into tr values (990034, 75);
insert into tr values (990034, 80);
insert into tr values (990034, 456);
commit;


SELECT   starts_with, SUM (total_records) total_records
    FROM (SELECT ID,
                 (CASE WHEN ID LIKE '2%'  THEN '2____'
                       WHEN ID LIKE '3%'  THEN '3____'
                       WHEN ID LIKE '99%' THEN '99____'
                  END
                 ) starts_with,
                 total_records
            FROM tr
            where ( id like '2%' or id like '3%' or id like '99%'))
GROUP BY starts_with;

STARTS TOTAL_RECORDS
------ -------------
2____             75
3____            115
99____           611
0 голосов
/ 30 сентября 2010

Спасибо Раджеш,

Теперь я должен отправить вывод по электронной почте на определенный адрес электронной почты из скрипта, если total_records станет равным 0. Это письмо также должно иметь тему и текст.

...