WS

Verlorene Sätze bei SAS/Access to Adabas vermeiden

Homepage
Unternehmensprofil
Angebot
Tools
Vorträge
Gedanken
Tips
Kunden und Presse

Ihre Meinung
Kontakt

 

Einführung

SAS/Access to ADABAS unter MVS verwendet beim Lesen der Daten grundsätzlich eine Where-Klausel auf einen Superdescriptor in ADABAS. Wenn weder im View-Descriptor noch beim Zugriff selbst eine Where-Klausel angegeben wurde, wird das Verhalten von SAS mit der System-Option ADBDEFW gesteuert.

Laut Dokumentation wird in diesem Fall bei der Default-Einstellung, ADBDEFW=1, automatisch eine gültige Where-Klausel erzeugt, die alle Beobachtungen erfasst:

  • bei numerischen Feldern: where (aa <= 0) or aa > 0
  • bei alphanumerischen Feldern: where aa >= ' '

Problem

Leider funktioniert das nicht mehr, wenn auf den ADABAS-View-Descriptor noch ein SAS-SQl-View gesetzt wird. Das ist z.B. beim Code-Generator des SAS/Warehouse-Administrators der Fall. In diesem Fall wird der erste in Frage kommende Superdescriptor offensichtlich auf ungleic 0, bzw. ungleich _blank_ abgefragt, wie das folgende Beispiel zeigt.

5    /* Erstellen des View-Descriptors */
6    proc access dbms=adabas
7      accdesc = adaacc.acc220_1;
8      create adaview.vF220_1.view;
9      select Z1 OB CM GC PA CW CX MA;
10   RUN;

NOTE: The view descriptor ADAVIEW.VF220_1 was written.
NOTE: The PROCEDURE ACCESS used 0.02 CPU seconds and 8386K.

     /* Die richtige Anzahl beim direkten Zugriff */
11   Proc sql;
12    select count(*) into :count
13     from adaview.vF220_1;
14   %PUT Count = &count;
Count =   130956

15   create table work.test as
16     select * from adaview.vF220_1;

/* Ein SAS-View auf den Adabas-View-Descriptor,
   wie er z.B. vom Warehouse-Adminstrator erzeugt wird */
17    create view work.testv as
18     select * from adaview.vF220_1;
NOTE: SQL view WORK.TESTV has been defined.
NOTE: The PROCEDURE SQL printed page 1.
NOTE: The PROCEDURE SQL used 1.29 CPU seconds and 10982K.

/* Der nächste Zugriff liefert zuwenig Sätze.
   Im implizit verwendeten Superdescriptor kommen Blanks vor. */
19   Data work.test;
20    set work.testv;
21   RUN;

NOTE: There were 126083 observations read from the data set WORK.TESTV.
NOTE: The data set WORK.TEST has 126083 observations and 8 variables.
NOTE: The DATA statement used 1.02 CPU seconds and 11654K.

/* Mit Where-Klausel stimmt die Anzahl der Sätze wieder
  (z1 ist immer ungleich Blank)*/
22   Data work.test;
23    set work.testv;
24    where z1 NE " ";
25   RUN;

NOTE: There were 130956 observations read from the data set WORK.TESTV.
      WHERE z1 not = ' ';
NOTE: The data set WORK.TEST has 130956 observations and 8 variables.
NOTE: The DATA statement used 1.05 CPU seconds and 11654K.

Lösung

Um solche Fehlerquellen zu vermeiden, empfielt es sich, auf die automatische Erstellung der Where-Klausel zu verzichten, und bei der Erstellung des View-Descriptors explizit eine Where-Klausel anzugeben.

Damit das niemand vergisst, kann man die SAS-System-Option ADBDEFW auf den Wert 2 setzen. Dann wird eine Fehlermeldung erzeugt, wenn die Where-Klausel fehlt.


Anmerkung: Dieses Verhalten kann installationsabhängig sein.
Zumindest bei einem Hotfix-Bundle hatten wir die Situation, dass wir im Batch über einen SQL-View gar nicht mehr auf ADABAS-Files zugreifen konnten, wenn im selben Job nicht vorher mindestens einmal mit einem Datastep direkt auf den View-Descriptor zugegriffen wurde.


 
 

 
 
Ihr Kommentar
(alle Angaben sind freiwillig)
Ihr Name :
Ihre Emailadresse:
Telefon-Nummer:
Ihre Meinung:
Ich wünsche die Zusendung von weiterem Informationsmaterial:
Ja, Infomaterial zuschicken   Nein, kein Infomaterial zuschicken
Bitte nehmen Sie Kontakt zu mir auf:
per email   rufen Sie mich an  

©WS Unternehmensberatung und Controlling-Systeme GmbH
Friedrich-Weinbrenner-Straße 20
69126 Heidelberg

Tel.: 06221 / 401 409
Fax: 06221 / 401 422

EMail: info @ ws-unternehmensberatung.de

Amtsgericht Heidelberg, HRB 5485
Geschäftsführer: Wilfried Schollenberger
zurück zum Anfang