Dienstag, 14. August 2007

Ein PL/SQL String-Tokenizer mit mehreren Trennzeichen

Häufig sieht man String-Tokenizer, die nur ein Trennzeichen zwischen den Tokens verarbeiten können. Hiermit nun eine Lösung mit beliebig vielen Trennzeichen: download Package.

Anwendung


SQL> declare
separators varchar2(10) :='-;/,. ''';
string varchar2(100):= 'Black;Blue-Green/Yellow''Green-Blue Black Red.Yellow';
token varchar2(100);
begin
token:=parse_string.strtok(string, separators);
while token is not NULL loop
dbms_output.put_line(token);
token:= parse_string.strtok(NULL, separators);
end loop;
end;
/

Black
Blue
Green
Yellow
Green
Blue
Black
Red
Yellow

PL/SQL procedure successfully completed.
SQL>
.

Friedhold

Sonntag, 12. August 2007

Ausgabe aktiver Locks in einem Formsmodul

Es kommt vor, daß wir in Supportanfragen nach dem Verursacher der Datensatzsperre gefragt werden, da man seine Datenänderungen nicht speichern kann. Hier nun ein Formsmodul (6i) zur Ausgabe der Locks, im unten dargestellten Beispiel unter Scott:
www.free-dev.com/locksall.htm

Voraussetzung


SQL> conn sys/passwd as sysdba

SQL> grant select on v_$locked_object to scott;
Grant succeeded.

SQL> conn scott/tiger
SQL> update emp set sal=4000 where ename='FORD';
1 row updated.

SQL> insert into dept values (50, 'MANAGEMENT', 'Charlston');
1 row created.
.

Ausgabe



Friedhold

Sonntag, 5. August 2007

Erstellung von Excel.XLS - Dateien aus Forms 6i ohne OLE

Unlängst hatte ich folgenden Blog entdeckt: http://sanjeev-oracle-world.blogspot.com/ und die darin vorgestellte serverseitige Lösung getestet. Nach kleineren Tests (Umlaute) habe ich dann eine Clientversion für Oracle Forms 6i angepasst: http://www.free-dev.com/create_xls4emp.htm
Das Demo läuft auf Scott und erstellt EXCEL 2002+ XLS-Files als XML.
Die Sreenshots und der Sourcecode sind nachfolgend zu finden:




DECLARE
l_res VARCHAR2(250);
BEGIN
--
-- Ablauf zur EXCEL-Erstellung
--
-- Erstellen des Files
l_res:=pkg_genexlxml.create_excel('C:\TEMP', 'emp.xls') ;
if l_res<>'OK' then
prc_show_error(l_res);
raise form_trigger_failure;
end if;
..
-- Erstellen des Worksheets
pkg_genexlxml.create_worksheet( 'sheet1');
..
-- Erstellen der Styles
l_res:=pkg_genexlxml.create_style( 'sgs1' , 'Courier', 'red', 16, TRUE , p_backcolor => 'LightGray', P_underline => 'Single' );
if l_res<>'OK' then
prc_show_error(l_res);
raise form_trigger_failure;
end if;
..
-- Definieren der Zeilenhöhe, falls speziell
pkg_genexlxml.set_row_height ( 1, 20 ,'sheet1' );
..
-- Definieren der Spaltenbreiten
pkg_genexlxml.set_column_width( 1, 50, 'sheet1' );
..
-- Schreiben der Header-Spalten
l_res:=pkg_genexlxml.write_cell_char( l_r,1, 'sheet1', 'EMPNO' ,'sgs1' );
if l_res<>'OK' then
prc_show_error(l_res);
raise form_trigger_failure;
end if;
..
-- Schreiben der Daten in die einzelnen Spalten
l_res:=pkg_genexlxml.write_cell_num ( l_r, 1, 'sheet1' , :EMP.EMPNO, 'sgs3' );
if l_res<>'OK' then
prc_show_error(l_res);
raise form_trigger_failure;
end if;
..
EXCEPTION WHEN OTHERS THEN
NULL;
END;


.

Besten Dank an Sanjeev Sapre.

Friedhold