Kategorien

Suchen


Aktuelle Artikel

Archiv

Oracle

« Vorherige Beiträge

Oracle: Datenbank interne Views (Details zur Datenbank)

Samstag, 08.08.2009

Eine gute Übersicht über Tabellen und Views zur Struktur (Tabellen, Felder, Indizies, Primary keys, Foreign keys, Read only, etc.) finden Sie unter:

http://download.oracle.com/docs/cd/B14117_01/server.101/b10755/toc.htm

Der Aufbau der Views ist kurz und klar dokumentiert.
Ideal als Nachschlagewerk für tiefere Datenabfragen.

Oracle: Text, Befehl (string) in Stored Procedures suchen

Montag, 03.08.2009

Um in Oracle Datenbanken die Stored Procedures (gespeicherten Prozeduren) nach Schlüsselworten, Befehlen oder allg. Text zu durchsuchen, nutzen Sie folgenden SQL Befehl:

select * from USER_SOURCE
where lower(text) like '%suchtext%'

Wichtig ist, dass Sie den Suchtext in Kleinschreibweise eingeben. Das Textfeld wird bei der Suche in Kleinschreibung umgewandelt. Auf diese Weise finden Sie durch den o.a. Befehl auch folgende Daten:

select * from USER_SOURCE
where lower(text) like '%drop table%'

DROP TABLE
Drop Table
drop table
dROp TAbLe

Oracle: “Delete if exists” & “Drop if exists” Befehl

Donnerstag, 23.07.2009

Um auf einfache Weise in Oracle eine Tabelle, Prozedure, View, Funktion usw. zu löschen, nutzen Sie folgenden Befehl. Dabei wird die Exception (Fehlermeldung / Ausnahmefehler) unterdrückt, sodaß Ihr Script oder Programm fehlerfrei weiter laufen kann:

begin
  execute immediate 'DROP TABLE NAME_DER_TABELLE';
  exception when others then null;
end

Oder für eine Prozedur (Stored Procedure):

begin
  execute immediate 'DROP PROCEDURE NAME_DER_PROZEDUR';
  exception when others then null;
end

PHP & Oracle: PHP Datum & Oracle Datum vergleichen / umrechnen

Mittwoch, 15.07.2009

Unter PHP haben Sie z.Bsp. mit folgendem Code ein Zeitstempel erzeugt:

<?php
startdatum = time();
?>

In einer Oracle Datenbank wurde dieser Zeitstempel in einem Feld vom Typ “number” abgespeichert.
Nun möchten Sie diese Werte vergleichen. Nutzen Sie dafür folgendes SQL Statement:

select
  startdatum,
  to_date('01.06.2009', 'dd.mm.yyyy'),
  to_char(TO_DATE('19700101000000', 'YYYYMMDDHH24MISS') +
          NUMTODSINTERVAL(startdatum, 'SECOND'), 'dd.mm.yyyy hh24:mi')
from Tabellenname

Dieses SQL Beispiel zeigt Ihnen die unterschiedlichen Daten und Methoden in einem SQL Query. Passen Sie die Daten einfach an Ihre Bedürfnisse an.

Oracle: LOBSEGMENT Speicherplatz freigeben / bereinigen

Donnerstag, 09.07.2009

Um in Oracle den Speicherplatz von LOBSEGMENTEN (Speicherbereich für Datenelemente) wieder freizugeben oder dem aktuellen Bedarf anzupassen, nutzen Sie folgende Befehle:

ALTER TABLE [Tabellenname]
DEALLOCATE UNUSED

Oder alternativ:

ALTER TABLE [Tabellenname]
DEALLOCATE UNUSED KEEP 0M

Oracle: Größe von Tabellen berechnen (in GB, MB, KB oder Byte)

Dienstag, 07.07.2009

Damit Sie die Größe (das Volumen) Ihrer Tabellen ausrechnen können, nutzen Sie folgenden SQL Befehl:

SELECT TableName, TABLESPACE_NAME, sum(mb)
FROM (
  SELECT nvl2(l.segment_name, l.table_name, s.segment_name) TableName,
         s.TABLESPACE_NAME, bytes / 1024 / 1024 mb
  FROM user_segments s, user_lobs l
  WHERE s.segment_name = l.segment_name(+)
  AND ROUND(bytes / 1024 / 1024) > 0
  ORDER BY 1, 2)
GROUP BY TableName, TABLESPACE_NAME
ORDER BY 1;

Ihnen werden alle Tabellen mit einer Größe von mehr als 0 MB angezeigt. Leere Tabellen werden nicht angezeigt.

Um die Berechnung in GB, KB oder Bytes zu erhalten, ändern Sie bitte die Division im zweiten SELECT Statement entsprechend ab.

Oracle: Stored Procedures mit dynamischen SQL Befehlen

Dienstag, 07.07.2009

Um innerhalb einer “Stored Procedure” oder “Function” in Oracle Parameter in eine SQL Abfrage einzubauen, können Sie folgendes Beispiel als Vorlage nutzen:

CREATE OR REPLACE PROCEDURE SP_TESTS (in_condition IN VARCHAR2)
IS
  ret_value number;
  Ssql varchar2(4000);
BEGIN
  DBMS_OUTPUT.PUT_LINE('Start ...');

  -- Prüfen, ob eine Bedingung übergeben wurde
  -- Fall nicht, where mit "1=1" ergänzen lassen
  if (in_condition is null OR LENGTH(in_condition) = 0) then
    condition := ' 1=1 ';
  else
    condition := in_condition;
  end if;

  -- SQL Query zusammensetzen
  Ssql := 'SELECT id FROM demo WHERE ' || condition || ' ORDER by 1';

  -- SQL Query anzeigen
  DBMS_OUTPUT.PUT_LINE('SQL Query: ' || Ssql);

  -- Den zusammengebauten SQL Befehl ausführen lassen
  execute immediate Ssql into ret_value;

  -- Ergebnis anzeigen
  DBMS_OUTPUT.PUT_LINE('Ergebnis: ' || ret_value|| '%');
END;

Das Script erkennt nach dem Start automatisch, ob eine WHERE Bedingung als Parameter übergeben wurde. Fehlt diese, würde der fehlerhaft SQL so aussehen:

SELECT id FROM demo WHERE ORDER by 1

Dadurch würde ein Fehler ausgelöst werden. Durch die Ergänzung mit “1 = 1″ wird der SQL Befehl wieder gültig und kann fehlerfrei ausgefürt werden:

SELECT id FROM demo WHERE 1 = 1 ORDER by 1

Oracle: Tabellen einer Datenbank mit Anzahl der Datensätze auflisten

Dienstag, 07.07.2009

Mit dieser Funktion erhalten Sie alle Tabellen der Datenbank inkl. der aktuellen Anzahl an gespeicherten Datensätzen. Zusätzlich werden die Summen (Tabellenanzahl, Datensätze) angezeigt:

declare
  cnt number;
  total number := 0;
  tabs number := 0;
begin
  for x in (
    select owner || '.' || table_name tab
    from dba_tables)
  loop
    execute immediate 'select count(*) from ' || x.tab into cnt;
    total := total + cnt;
    tabs := tabs + 1;
    dbms_output.put_line('Table: ' || x.tab || ', Record count: ' || TO_CHAR(cnt));
  end loop;

  dbms_output.put_line('Total ' || TO_CHAR(total) || ' rows in ' || TO_CHAR(tabs) || ' tables');
end;

Oracle: Kalenderwoche (KW) in Datum umrechnen

Mittwoch, 01.07.2009

In Oracle kann aus einer Kalenderwoche (KW) einfach das Startdatum und Enddatum berechnet werden:

SELECT
  TRUNC(TO_DATE('25112009', 'DDMMYYYY'), 'IYYY') + (26 - 1) * 7 AS date_from,
  TRUNC(TO_DATE('25112009', 'DDMMYYYY'), 'IYYY') + (26 - 1) * 7 + 6 AS date_to
FROM sys.dual;

Das Beispiel gilt für die Woche 26/2009. Für andere Kalenderwochen ändern Sie bitte beide Werte “26″ im SQL Statement in Ihre gewünschte Woche um. Das Jahr (im Beispiel “2009″) ggf. ebenfalls angepasst werden.

Das folgende Beispiel zeigt Ihnen den Aufbau der Query:

SELECT
  TRUNC(TO_DATE('2511[Jahr]', 'DDMMYYYY'), 'IYYY') + ([KW] - 1) * 7 AS date_from,
  TRUNC(TO_DATE('2511[Jahr]', 'DDMMYYYY'), 'IYYY') + ([KW] - 1) * 7 + 6 AS date_to
FROM sys.dual;

Dabei ist das Datum im SQL Befehl (hier der 25.11.) unwichtig.

Oracle: Stored Procedures auflisten

Mittwoch, 27.05.2009

Mit dem folgenden SQL Script können Sie alle in der Datenbank gespeicherten Stored Procedures (SP) auflisten:

select * from user_procedures

« Vorheriger Beitrag