Dienstag, 16. Dezember 2014

Dynamisch Tabellen abfragen und Datensätze zählen

set serveroutput on
--
DECLARE
  CURSOR c_trig IS
    SELECT table_name
    FROM tabs
    WHERE 1=1
      AND table_name like 'T_%'
  ;
  v_zaehler number;
BEGIN
  FOR r IN c_trig
  LOOP
--    execute immediate 'TRUNCATE TABLE '||r.table_name;
    execute immediate 'select count(*) from ' || r.table_name into v_zaehler;
    DBMS_OUTPUT.PUT_LINE(r.table_name || ' : ' || v_zaehler);
  END LOOP;
END;
/

Freitag, 28. November 2014

For-Cursor-Loop

DECLARE
  v_aenderungszeitstempel TIMESTAMP(6);
BEGIN
  FOR cur IN (select table_name
                from tabs
               where table_name     like 'CT_%'
                 and table_name not like 'CT_D_%'
                 and table_name not like 'CT_PROT_%') LOOP
    execute immediate 'SELECT max (aenderungszeitstempel) FROM ' || cur.table_name INTO v_aenderungszeitstempel;
    DBMS_OUTPUT.put_line('max Aenderungszeitstempel der Tabelle ' || cur.table_name || ':  ' || v_aenderungszeitstempel);
  END LOOP;
END;

einfache Queries

select table_name
  from tabs
 where table_name     like 'T_%'
   and table_name not like 'T_D_%'
   and table_name not like 'T_PRO_%'
 ;

Dienstag, 18. November 2014

Dynamisch SQL-Befehle generieren

select 'delete from ' || table_name || ';' from tabs;

select 'insert into ' || table_name || ' select * from ' || table_name || '@dwh;' from tabs;


select 'CREATE TABLE ' || table_name || '_S  AS (SELECT * from  ' || table_name || ');' from tabs;

Donnerstag, 24. Juli 2014

Parameterübergabe eines Perl-Scripts an SQL*Plus


/*************************************************
*           Programm: start.pl
*************************************************/

sqlplus start.sql §Tabelle§

####################################################


/*************************************************
*           Programm: start.sql
*************************************************/

PROMPT Aufruf eines SQL-Scripts mit Parameteruebergabe
exec sqlScript('&1');

####################################################


/*************************************************
*           Programm: sqlScript.sql
*************************************************/

 select * from &1;

####################################################

Dienstag, 1. April 2014

Funktionen

SELECT avg(sal) as Mittelwert FROM emp;
--> 2035 
--
-- Ermittle die Anzahl aller MA pro
-- Abteilung, die mehr als 1000,- 
-- erhalten.
--
SELECT e.deptno
     , count (e.ename)
  FROM emp e
 WHERE e.sal > 1000
GROUP BY (
e.deptno)
;

--
-- Ermittle die Anzahl aller MA pro
-- Abteilung, die mehr als 1000,- 
-- erhalten und keine Provision 
-- bekommen.
--
SELECT e.deptno
     , count (e.ename)
  FROM emp e
 WHERE e.sal > 1000

   AND nvl(e.comm, 0) = 0
GROUP BY (
e.deptno)
;