Freitag, 19. März 2010

Oracle: DROP TABLE OR SEQUENCE IF EXIST als Prozedur


CREATE OR REPLACE
PROCEDURE drop_object
(
ObjName IN VARCHAR2
) IS
counter NUMBER := 0;
to_drp VARCHAR2(200) := UPPER(ObjName);
drp_stmt VARCHAR2(200) := NULL;

BEGIN

SELECT COUNT(*)
INTO counter
FROM user_tables
WHERE table_name = to_drp;
IF counter = 1
THEN drp_stmt := 'Drop Table ' || to_drp;
EXECUTE IMMEDIATE drp_stmt;
END IF;

SELECT COUNT(*) INTO counter
FROM user_sequences
WHERE sequence_name = to_drp;
IF counter = 1 THEN
drp_stmt := 'DROP SEQUENCE ' || to_drp;
EXECUTE IMMEDIATE drp_stmt;
END IF;

END DROP_OBJECT;
/

Der Aufruf der Prozedur könnte z.B. so erfolgen:


CALL drop_object('t_test');
CREATE TABLE t_test
(
test_id NUMBER, uid_text VARCHAR2(80)
)

Oracle: DROP TABLE OR SEQUENCE IF EXIST als Prozedur


CREATE OR REPLACE
PROCEDURE drop_object
(
ObjName IN VARCHAR2
) IS
counter NUMBER := 0;
to_drp VARCHAR2(200) := UPPER(ObjName);
drp_stmt VARCHAR2(200) := NULL;

BEGIN

SELECT COUNT(*)
INTO counter
FROM user_tables
WHERE table_name = to_drp;
IF counter = 1
THEN drp_stmt := 'Drop Table ' || to_drp;
EXECUTE IMMEDIATE drp_stmt;
END IF;

SELECT COUNT(*) INTO counter
FROM user_sequences
WHERE sequence_name = to_drp;
IF counter = 1 THEN
drp_stmt := 'DROP SEQUENCE ' || to_drp;
EXECUTE IMMEDIATE drp_stmt;
END IF;

END DROP_OBJECT;
/

Der Aufruf der Prozedur könnte z.B. so erfolgen:


CALL drop_object('t_test');
CREATE TABLE t_test
(
test_id NUMBER, uid_text VARCHAR2(80)
)

Oracle: LDAP ID als Primärschlüssel


CALL drop_object('t_test');
CREATE TABLE t_test (test_id NUMBER, uid_text VARCHAR2(80));

CREATE OR REPLACE TRIGGER insert_lid
BEFORE INSERT ON t_test FOR EACH ROW

DECLARE
l_ldap_host VARCHAR2(256) := 'hera.leipzig.ufz.de';
l_ldap_port VARCHAR2(256) := '389';
l_ldap_base VARCHAR2(256) := 'dc=ufz,dc=de';
l_retval PLS_INTEGER;
l_session DBMS_LDAP.session;
l_attrs DBMS_LDAP.string_collection;
l_message DBMS_LDAP.message;
l_entry DBMS_LDAP.message;
l_vals DBMS_LDAP.string_collection;

BEGIN
l_session := DBMS_LDAP.init
(
hostname => l_ldap_host,
portnum => l_ldap_port
);

l_retval := DBMS_LDAP.simple_bind_s
(
ld => l_session,
dn => NULL,
passwd => NULL
);

l_attrs(0) := 'uidNumber';
l_retval := DBMS_LDAP.search_s
(
ld => l_session,
base => l_ldap_base,
scope => DBMS_LDAP.SCOPE_SUBTREE,
filter => '(&
(nsrole=*roleself*)
(objectClass=ufzperson)
(uid=' || :new.uid_text || ')
)',
attrs => l_attrs,
attronly => 0,
res => l_message
);

IF DBMS_LDAP.count_entries
(
ld => l_session,
msg => l_message
) = 1
THEN
l_entry := DBMS_LDAP.first_entry
(
ld => l_session,
msg => l_message
);

l_vals := DBMS_LDAP.get_values
(
ld => l_session,
ldapentry => l_entry,
attr => l_attrs(0)
);
END IF;

DBMS_OUTPUT.PUT_LINE
(
l_attrs(0) || ' = ' || l_vals(0)
);

l_retval := DBMS_LDAP.unbind_s
(
ld => l_session
);

:new.test_id := l_vals(0);

END;
/

Der Trigger könnte z.B. so ausgelöst werden:


INSERT INTO t_test (uid_text)
VALUES ('dutzend');

Oracle: LDAP ID als Primärschlüssel


CALL drop_object('t_test');
CREATE TABLE t_test (test_id NUMBER, uid_text VARCHAR2(80));

CREATE OR REPLACE TRIGGER insert_lid
BEFORE INSERT ON t_test FOR EACH ROW

DECLARE
l_ldap_host VARCHAR2(256) := 'hera.leipzig.ufz.de';
l_ldap_port VARCHAR2(256) := '389';
l_ldap_base VARCHAR2(256) := 'dc=ufz,dc=de';
l_retval PLS_INTEGER;
l_session DBMS_LDAP.session;
l_attrs DBMS_LDAP.string_collection;
l_message DBMS_LDAP.message;
l_entry DBMS_LDAP.message;
l_vals DBMS_LDAP.string_collection;

BEGIN
l_session := DBMS_LDAP.init
(
hostname => l_ldap_host,
portnum => l_ldap_port
);

l_retval := DBMS_LDAP.simple_bind_s
(
ld => l_session,
dn => NULL,
passwd => NULL
);

l_attrs(0) := 'uidNumber';
l_retval := DBMS_LDAP.search_s
(
ld => l_session,
base => l_ldap_base,
scope => DBMS_LDAP.SCOPE_SUBTREE,
filter => '(&
(nsrole=*roleself*)
(objectClass=ufzperson)
(uid=' || :new.uid_text || ')
)',
attrs => l_attrs,
attronly => 0,
res => l_message
);

IF DBMS_LDAP.count_entries
(
ld => l_session,
msg => l_message
) = 1
THEN
l_entry := DBMS_LDAP.first_entry
(
ld => l_session,
msg => l_message
);

l_vals := DBMS_LDAP.get_values
(
ld => l_session,
ldapentry => l_entry,
attr => l_attrs(0)
);
END IF;

DBMS_OUTPUT.PUT_LINE
(
l_attrs(0) || ' = ' || l_vals(0)
);

l_retval := DBMS_LDAP.unbind_s
(
ld => l_session
);

:new.test_id := l_vals(0);

END;
/

Der Trigger könnte z.B. so ausgelöst werden:


INSERT INTO t_test (uid_text)
VALUES ('dutzend');

Oracle: Per Trigger Website in CLOB einlesen

Die Tabelle für das Beispiel


CREATE TABLE t_pages
(
pages_id NUMBER,
url VARCHAR2(80),
page CLOB
);

-- Sequenz für das Increment der ID
CREATE SEQUENCE t_pages_autoinc_seq
START WITH 1
INCREMENT BY 1
NOCACHE
NOMAXVALUE;

-- Trigger zum Aufruf der Sequenz
CREATE OR REPLACE TRIGGER t_pages_autoinc_trigger
BEFORE INSERT ON t_pages
FOR EACH ROW
BEGIN
SELECT t_pages_autoinc_seq.NEXTVAL INTO :NEW.pages_id FROM DUAL;
END;
/

Der Trigger löst folgendes aus:
Wird ein Datensatz mit einer gültigen URL eingefügt, wird die Seite aufgerufen und der HTML-Code der Seite in den CLOB geschrieben.


CREATE OR REPLACE TRIGGER insert_page
BEFORE INSERT ON t_pages
FOR EACH ROW

DECLARE
req UTL_HTTP.req;
resp UTL_HTTP.resp;
page CLOB;

BEGIN
-- Verbindung aufbauen
req := UTL_HTTP.begin_request(:new.url);
-- Als Mozilla ausgeben
UTL_HTTP.set_header(req, 'User-Agent', 'Mozilla/4.0');

resp := UTL_HTTP.get_response(req);
UTL_HTTP.read_text(resp, page, 50000);
UTL_HTTP.end_response(resp);
:new.page := page;

EXCEPTION
WHEN
UTL_HTTP.end_of_body
THEN
UTL_HTTP.end_response(resp);
END;
/

Beispiel zum Aufrufen des Ganzen


INSERT INTO t_pages (url)
VALUES ('http://www.ufz.de/');

Oracle: Per Trigger Website in CLOB einlesen

Die Tabelle für das Beispiel


CREATE TABLE t_pages
(
pages_id NUMBER,
url VARCHAR2(80),
page CLOB
);

-- Sequenz für das Increment der ID
CREATE SEQUENCE t_pages_autoinc_seq
START WITH 1
INCREMENT BY 1
NOCACHE
NOMAXVALUE;

-- Trigger zum Aufruf der Sequenz
CREATE OR REPLACE TRIGGER t_pages_autoinc_trigger
BEFORE INSERT ON t_pages
FOR EACH ROW
BEGIN
SELECT t_pages_autoinc_seq.NEXTVAL INTO :NEW.pages_id FROM DUAL;
END;
/

Der Trigger löst folgendes aus:
Wird ein Datensatz mit einer gültigen URL eingefügt, wird die Seite aufgerufen und der HTML-Code der Seite in den CLOB geschrieben.


CREATE OR REPLACE TRIGGER insert_page
BEFORE INSERT ON t_pages
FOR EACH ROW

DECLARE
req UTL_HTTP.req;
resp UTL_HTTP.resp;
page CLOB;

BEGIN
-- Verbindung aufbauen
req := UTL_HTTP.begin_request(:new.url);
-- Als Mozilla ausgeben
UTL_HTTP.set_header(req, 'User-Agent', 'Mozilla/4.0');

resp := UTL_HTTP.get_response(req);
UTL_HTTP.read_text(resp, page, 50000);
UTL_HTTP.end_response(resp);
:new.page := page;

EXCEPTION
WHEN
UTL_HTTP.end_of_body
THEN
UTL_HTTP.end_response(resp);
END;
/

Beispiel zum Aufrufen des Ganzen


INSERT INTO t_pages (url)
VALUES ('http://www.ufz.de/');

Oracle: LDAP Connection mi dem DBMS_LDAP Package

Im folgenden wird das DBMS_LDAP-Package genutzt um auf einen LDAP-Server anonym zuzugreifen und den Wert eines bestimmten Attributes zu lesen.
Konkret ist das hier die LDAP-ID (uidNumber) einer bestimmten Person (ufzperson).
Die ID der Person soll später als Primärschlüssel in einer Oracle-Tabelle genutzt werden.


DECLARE
l_ldap_host VARCHAR2(256) := 'hera.leipzig.ufz.de';
l_ldap_port VARCHAR2(256) := '389'; -- varchar?
l_ldap_base VARCHAR2(256) := 'dc=ufz,dc=de';

l_retval PLS_INTEGER;
l_session DBMS_LDAP.session;
l_attrs DBMS_LDAP.string_collection;
l_message DBMS_LDAP.message;
l_entry DBMS_LDAP.message;
l_vals DBMS_LDAP.string_collection;

BEGIN
l_session := DBMS_LDAP.init
(
hostname => l_ldap_host,
portnum => l_ldap_port
);

-- anonym anmelden
l_retval := DBMS_LDAP.simple_bind_s
(
ld => l_session,
dn => NULL,
passwd => NULL
);

-- Attribut welches gesucht wird
l_attrs(0) := 'uidNumber';

-- Suche ausführen
l_retval := DBMS_LDAP.search_s
(
ld => l_session,
base => l_ldap_base,
scope => DBMS_LDAP.SCOPE_SUBTREE,
filter => '(&(nsrole=*roleself*)(objectClass=ufzperson)(uid=dutzend))',
attrs => l_attrs,
attronly => 0,
res => l_message);

-- Wenn genau ein Eintrag gefunden wurde
IF DBMS_LDAP.count_entries(ld => l_session, msg => l_message) = 1
THEN
-- ersten Eintrag festlegen
l_entry := DBMS_LDAP.first_entry
(
ld => l_session,
msg => l_message
);

-- Wert des Eintrages holen
l_vals := DBMS_LDAP.get_values
(
ld => l_session,
ldapentry => l_entry,
attr => l_attrs(0)
);
END IF;

-- Attribut und Wert ausgeben
DBMS_OUTPUT.PUT_LINE(l_attrs(0) || ' = ' || l_vals(0));

-- Verbindung beenden
l_retval := DBMS_LDAP.unbind_s(ld => l_session);
END;
/

Oracle: LDAP Connection mi dem DBMS_LDAP Package

Im folgenden wird das DBMS_LDAP-Package genutzt um auf einen LDAP-Server anonym zuzugreifen und den Wert eines bestimmten Attributes zu lesen.
Konkret ist das hier die LDAP-ID (uidNumber) einer bestimmten Person (ufzperson).
Die ID der Person soll später als Primärschlüssel in einer Oracle-Tabelle genutzt werden.


DECLARE
l_ldap_host VARCHAR2(256) := 'hera.leipzig.ufz.de';
l_ldap_port VARCHAR2(256) := '389'; -- varchar?
l_ldap_base VARCHAR2(256) := 'dc=ufz,dc=de';

l_retval PLS_INTEGER;
l_session DBMS_LDAP.session;
l_attrs DBMS_LDAP.string_collection;
l_message DBMS_LDAP.message;
l_entry DBMS_LDAP.message;
l_vals DBMS_LDAP.string_collection;

BEGIN
l_session := DBMS_LDAP.init
(
hostname => l_ldap_host,
portnum => l_ldap_port
);

-- anonym anmelden
l_retval := DBMS_LDAP.simple_bind_s
(
ld => l_session,
dn => NULL,
passwd => NULL
);

-- Attribut welches gesucht wird
l_attrs(0) := 'uidNumber';

-- Suche ausführen
l_retval := DBMS_LDAP.search_s
(
ld => l_session,
base => l_ldap_base,
scope => DBMS_LDAP.SCOPE_SUBTREE,
filter => '(&(nsrole=*roleself*)(objectClass=ufzperson)(uid=dutzend))',
attrs => l_attrs,
attronly => 0,
res => l_message);

-- Wenn genau ein Eintrag gefunden wurde
IF DBMS_LDAP.count_entries(ld => l_session, msg => l_message) = 1
THEN
-- ersten Eintrag festlegen
l_entry := DBMS_LDAP.first_entry
(
ld => l_session,
msg => l_message
);

-- Wert des Eintrages holen
l_vals := DBMS_LDAP.get_values
(
ld => l_session,
ldapentry => l_entry,
attr => l_attrs(0)
);
END IF;

-- Attribut und Wert ausgeben
DBMS_OUTPUT.PUT_LINE(l_attrs(0) || ' = ' || l_vals(0));

-- Verbindung beenden
l_retval := DBMS_LDAP.unbind_s(ld => l_session);
END;
/

Dienstag, 16. März 2010

Linux/Solaris: Dateiname in Textdateien einfügen

Um den jeweiligen Dateinamen in die 2. Zeile aller Textdateien einzufügen, die in einem Verzeichnis liegen, kann man folgende Befehlszeile im verwenden:

for i in *.*; do sed -i "2i\\$i" $i; done

Linux/Solaris: Dateiname in Textdateien einfügen

Um den jeweiligen Dateinamen in die 2. Zeile aller Textdateien einzufügen, die in einem Verzeichnis liegen, kann man folgende Befehlszeile im verwenden:

for i in *.*; do sed -i "2i\\$i" $i; done

Donnerstag, 11. März 2010

Linux/Solaris: Text in Dateien einfügen

  1. Terminal öffnen
  2. in den Ordner mit den Dateien wechseln (cd)
  3. sed -i "1i\Text in Zeile 1" *.mop
  4. sed -i "2i\Text in Zeile 2" *.mop

Linux/Solaris: Text in Dateien einfügen

  1. Terminal öffnen
  2. in den Ordner mit den Dateien wechseln (cd)
  3. sed -i "1i\Text in Zeile 1" *.mop
  4. sed -i "2i\Text in Zeile 2" *.mop

Windows 7: Test auf Unterstützung des TRIM-Befehls

fsutil behavior query disabledeletenotify

Die Meldung DisableDeleteNotify = 0 bedeutet in diesem Fall die Aktierung von Trim, eine DisableDeleteNotify = 1 würde seine Deaktivierung signalisieren.

Windows 7: Test auf Unterstützung des TRIM-Befehls

fsutil behavior query disabledeletenotify

Die Meldung DisableDeleteNotify = 0 bedeutet in diesem Fall die Aktierung von Trim, eine DisableDeleteNotify = 1 würde seine Deaktivierung signalisieren.

Dienstag, 9. März 2010

COMA: Linkicons und Glossarlinks setzen

Um z.B. in AJAX-Responses nachträglich die Glossarlinks und Linkicons zu setzen, kann man nachfolgende COMA-Funktion nutzen:

$html = "HTML mit Glossarbegriffen und Hyperlinks";
$root_pid = 28;
$html = linkicon_glossar_parser($html, $root_pid);
Der Parameter $root_pid entscheidet über das Setzen der Glossarlinks (Knoten 1 JA, Knoten 9 NEIN ?).

Zu ersetzende Linkicons müssen in einem DIV mit der ID content stehen (nicht valide da ID dann doppelt)!

COMA: Linkicons und Glossarlinks setzen

Um z.B. in AJAX-Responses nachträglich die Glossarlinks und Linkicons zu setzen, kann man nachfolgende COMA-Funktion nutzen:

$html = "HTML mit Glossarbegriffen und Hyperlinks";
$root_pid = 28;
$html = linkicon_glossar_parser($html, $root_pid);
Der Parameter $root_pid entscheidet über das Setzen der Glossarlinks (Knoten 1 JA, Knoten 9 NEIN ?).

Zu ersetzende Linkicons müssen in einem DIV mit der ID content stehen (nicht valide da ID dann doppelt)!

COMA: Makroparser aufrufen

Um z.B. Makros in AJAX-Responses zu parsen, kann man nachfolgende COMA-Funktion nutzen:

$html = "HTML mit einem Makro (§fgetpic_9908§)";
$html = ersetze_funktionstemplates
(
$conn, $sprache, $code, $html,
$baum, $adm, $su, $pub
);

COMA: Makroparser aufrufen

Um z.B. Makros in AJAX-Responses zu parsen, kann man nachfolgende COMA-Funktion nutzen:

$html = "HTML mit einem Makro (§fgetpic_9908§)";
$html = ersetze_funktionstemplates
(
$conn, $sprache, $code, $html,
$baum, $adm, $su, $pub
);

Montag, 8. März 2010

USB Stick ohne Floppy bootfähig machen

Man braucht für diese Methode eigentlich eine startfähige Diskette im Laufwerk,als Ersatz kann man Virtual Floppy Drive verwenden.
  1. ZIP-Datei an beliebiger Stelle entpacken
  2. VFDWIN.EXE als Administrator starten
  3. unter Driver auf Start klicken
  4. bei Drive 0 oder Drive 1 mittels Change den Laufwerksbuchstaben auf A setzen
  5. Open und dann Create klicken (Image File bleibt leer)
  6. im Explorer den Arbeitsplatz öffnen
  7. Rechtsklick auf 3½-Diskette A - Formatieren - MS-DOS Startdiskette erstellen

Systemdateien auf den Stick übertragen

  1. HP USB Disk Storage Format Tool installieren
  2. USB Stick einstecken
  3. HP Tool starten
  4. Bei Device den Stick wählen
  5. Häkchen bei Create DOS Startup Diskusing DOS System Files located at A:\ machen

USB Stick ohne Floppy bootfähig machen

Man braucht für diese Methode eigentlich eine startfähige Diskette im Laufwerk,als Ersatz kann man Virtual Floppy Drive verwenden.
  1. ZIP-Datei an beliebiger Stelle entpacken
  2. VFDWIN.EXE als Administrator starten
  3. unter Driver auf Start klicken
  4. bei Drive 0 oder Drive 1 mittels Change den Laufwerksbuchstaben auf A setzen
  5. Open und dann Create klicken (Image File bleibt leer)
  6. im Explorer den Arbeitsplatz öffnen
  7. Rechtsklick auf 3½-Diskette A - Formatieren - MS-DOS Startdiskette erstellen

Systemdateien auf den Stick übertragen

  1. HP USB Disk Storage Format Tool installieren
  2. USB Stick einstecken
  3. HP Tool starten
  4. Bei Device den Stick wählen
  5. Häkchen bei Create DOS Startup Diskusing DOS System Files located at A:\ machen

Mittwoch, 3. März 2010

COMA: Cron-Job einrichten

Als erstes erstellt man das Makro, welches per Cron aufgerufen werden soll.
Danach sucht man sich in der Datenbank die Tabelle W_CJ.
In die Spalte CJ_FKT trägt man den Namen des Makros ein.
Der Eintrag in die Spalte CJ_EXE besteht aus 4 Ziffern, die ersten beiden geben die volle Stunde an, in der das Makro gestartet wird (00 - 23).
Die beiden letzten stehen für den Tag im Monat an dem man das Makro ausführen möchte (01 - 31), 00 steht dabei für täglich.
In der Spalte CJ_LAST_EXE wird das Datum gesetzt an dem der Job zum letzten Mal ausgeführt wurde.

COMA: Cron-Job einrichten

Als erstes erstellt man das Makro, welches per Cron aufgerufen werden soll.
Danach sucht man sich in der Datenbank die Tabelle W_CJ.
In die Spalte CJ_FKT trägt man den Namen des Makros ein.
Der Eintrag in die Spalte CJ_EXE besteht aus 4 Ziffern, die ersten beiden geben die volle Stunde an, in der das Makro gestartet wird (00 - 23).
Die beiden letzten stehen für den Tag im Monat an dem man das Makro ausführen möchte (01 - 31), 00 steht dabei für täglich.
In der Spalte CJ_LAST_EXE wird das Datum gesetzt an dem der Job zum letzten Mal ausgeführt wurde.