Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

ACL to SQL

Dieses Thema im Forum "Andere Datenbankserver" wurde erstellt von ukulele, 5 Juli 2012.

  1. ukulele

    ukulele Datenbank-Guru

    Wir testen grade ACL ( http://www.acl.com ) zur Datenanalyse, welches allerdings nicht direkt von ACL an uns lizensiert wird. Ich suche einen Weg, Daten nach SQL zu exportieren, hat hier jemand damit schonmal Erfahrungen gemacht?
     
  2. Walter

    Walter Administrator Mitarbeiter

    PLSQL_SQL gefällt das.
  3. ukulele

    ukulele Datenbank-Guru

    Ja habe das schon getan, schade aber das es nur so umständlich geht. Zum Glück lief der Import nach SQL sehr gut. Am liebsten hätte ich jedoch eine Sync Funktion mit SQL oder eine Möglichkeit, meine SQL Scripte direkt in ACL laufen zu lassen :)

    In diesem konkreten Fall muss ich in Buchungsdaten Buchung und Gegenbuchung zusammen puzzeln. Das krieg ich nur mit einem SQL Script hin das mir Schlüssel generiert. Derzeit atemberaubende 200 pro Minute :(
     
  4. ukulele

    ukulele Datenbank-Guru

    Ich poste mal mein derzeitiges Script, vieleicht hat hier ja jemand eine Idee:
    Code:
    DECLARE    @NULLbk UNIQUEIDENTIFIER,
            @pk UNIQUEIDENTIFIER,
            @bk UNIQUEIDENTIFIER,
            @buchungs_nr VARCHAR(10),
            @buchungs_datum DATETIME,
            @counter INT
     
    -- Dummy PK zur vorübergehenden Nutzung bei Datensätzen die
    -- vom Script nicht verarbeitet werden können
    SET        @NULLbk = 'F4BEBFC7-1CFB-435A-BFA6-55D12132C0BA'
    SET        @counter = 1
     
    SET        @pk = newid()
     
    WHILE    @counter <= 100
    AND        @pk IS NOT NULL
    BEGIN
        SET        @pk = (    SELECT    TOP 1 pk
                        FROM    kb
                        WHERE    bk IS NULL )
     
        SELECT    @buchungs_nr = buchungs_nr,
                @buchungs_datum = buchungs_datum
        FROM    kb
        WHERE    pk = @pk
     
        IF        @buchungs_nr != ''
        AND    (    SELECT    sum(konto_umsatz_s) - sum(konto_umsatz_h)
                FROM    (    SELECT    buchungs_belegnr,
                                    buchungs_text,
                                    konto_umsatz_s,
                                    konto_umsatz_h
                            FROM    b
                            WHERE    buchungs_nr = @buchungs_nr
                            AND        buchungs_datum = @buchungs_datum
                            -- ausg. Sammelkonten
                            AND        konto_nr NOT IN ( '1400','1600' ) ) tabelle ) = 0
        BEGIN
            SET        @bk = newid()
        END
        ELSE
        BEGIN
            SET        @bk = @NULLbk
        END
     
        UPDATE    kb
        SET        bk = @bk
        WHERE    buchungs_nr = @buchungs_nr
        AND        buchungs_datum = @buchungs_datum
        UPDATE    lb
        SET        bk = @bk
        WHERE    buchungs_nr = @buchungs_nr
        AND        buchungs_datum = @buchungs_datum
        UPDATE    sb
        SET        bk = @bk
        WHERE    buchungs_nr = @buchungs_nr
        AND        buchungs_datum = @buchungs_datum
     
        SET        @counter = @counter + 1
    END
    Ich habe drei Tabellen mit "Buchungssätzen", leider ohne Gegenkonto. Diese Tabellen (lb Lieferanten, kb Kunden, sb Sachkontenbuchungen) werden in einer Sicht b zusammengefasst. Die Buchungsnummer ist fast immer eindeutig und, wenn ich das richtig sehe immer gegeben, sofern es sich nicht um EB Werte / AfA Buchungen etc. handelt. Sicherheitshalber prüfe ich auf Buchungsnummer und Datum.

    Ich habe einen PK künstlich erzeugt der jeden Datensatz eindeutig macht. Dazu kommt ein BK (Buchungssatz-Key), der Buchungen zusammenfast die die selbe Buchungssatznummer und das selbe Datum haben sowie in Summe Soll - Summe Haben 0 ergeben. Wenn dies nicht der Fall ist wird ein Dummy BK eingetragen, um zu verhindern das der Datensatz sofort wieder ausgewählt wird. Der @counter dient nur als "Laufzeiteinschränkung", damit ich das Script nicht anhalten muss um zwischendurch auszusetzen oder zu testen.

    Das Problem ist, die Laufzeit bei 3,3 Mio Datensätzen ist enorm. Hat jemand einen anderen Ansatz als eine Schleife oder andere Optimierungsvorschläge?
     
  5. ukulele

    ukulele Datenbank-Guru

    Mit Index gehts zumindest schonmal 100x so schnell ;)
     

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden