News Artikel Foren Join Projekte List Links Random Über Redscope Previous Next Startseite › Foren › Allgemeine Fragen zu SAS SQL-Passthrough und Erzeugung einer Tabelle in einem DB2Tablespace 12 December, 2008 - 15:46 — Wolfgang Hornung Hallo zusammen, gibt es die Möglichkeit innerhalb eines SQL-Passthrough, also hier: ... from connection to mycon ( "Erzeuge hier eine Tabelle in einem DB2-Tablespace" )); ... dort eine Tabelle zu erzeugen? Der Hintergrund ist, dass wir einige QMF-Abfragen haben, die in Prozeduren nacheinander ablaufen. Hierbei greift oft eine Query auf eine zuvor erzeugte Tabelle zu. Welche Alternativen gibt es? Vielen Dank schon einmal Wolfgang Hornung Foren: Allgemeine Fragen zu SAS Log in or register to post comments execute by 12 December, 2008 - 16:04 — Lutz Ritter Hallo Herr Hornung, beim SQL-Passthrough gibt es die Möglichkeit einzelne Datenbankbefehle abzusetzen. Dies erfolgt mit dem execute-Befehl: execute( create table test as select ...... ) by mycon ; Damit können Sie auch einen Index anlegen, eine bestehende Tabellen ändern oder löschen. Allerdings immer nur ein Befehl nach dem anderen. Viel Erfolg Lutz Ritter Log in or register to post comments EXECUTE-Frage 19 January, 2009 - 10:43 — Wolfgang Hornung Hallo Herr Ritter, hallo Herr Schmidt, zunächst vielen Dank für die Tipps! Das mit dem Execute funktioniert bei mir nicht, ich habe folgenden Code abgeschickt: proc sql; connect to db2 as mycon ( user = xxx password = xxx database = xxx owner = xxx ) ; execute( create table test as select var1 from tabelle1 ) by mycon ; ; quit; mit folgender Fehlermeldung: ERROR: CLI execute error: [IBM][CLI Driver][DB2] SQL0199N The use of the reserved word Expected tokens may include: "(". SQLSTATE=42601 NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements. 24 ; 25 quit; Wo würde diese Tabelle abgelegt, im Standard-Tablespace? Gibt es die Möglichkeit einen Tablespace anzulegen, wenn ja wie? @Hr. Schmidt:Gibt es die Möglichkeit eine QMF-Prozedur auszuführen? Z.B. etwas wie: START CREATETS DB(H84966) NAME(ADR) ZEILEN(9000000) LAENGE(300) STOGROUP(TEMP30) SET PROFILE (SPACE='H84966.ADR') ERASE A### RUN ZWIBESCH#A SAVE DATA AS A### ERASE PTIN### RUN ZWIBESCH# SAVE DATA AS PTIN### ERASE PTOUT### RUN PARTNER# SAVE DATA AS PTOUT### SET PROFILE (SPACE='H84966.QMF') STOP Vielen Dank und viele Grüße Wolfgang Hornung Log in or register to post comments per LIBNAME oder alles in SAS 2 January, 2009 - 11:51 — marcosch Hallo Herr Hornung, übrigens arbeitet auch die Hamburg-Mannheimer, Victoria und DAS mit der Koexistenz aus QMF und SAS. Ich kämpfe aber seit Jahren für den schrittweisen Umstieg von QMF auf PC-SAS. Es gibt aus meiner Sicht folgende Alternativen zur QMF-PROC: 1. Ermitteln von Basis-Tabelle mit SQL-Passthrough. Ablage der Tabellen innerhalb von SAS und dort dann die Weiterverarbeitung. RSUBMIT; PROC SQL; CONNECT TO DB2 (SSID=DB2F); DROP TABLE TMPVNRTAB; CREATE TABLE TMPVNRTAB AS SELECT * FROM CONNECTION TO DB2 ( SELECT FROM WHERE WITH UR ); DISCONNECT FROM DB2; QUIT; %SQLRC;%DB2RC; ENDRSUBMIT; 2. Das Ergebnis gleich ich der DB2-Welt speichern und dort ggf. mit QMF weiterverarbeiten. /********************************************************* Definieren eines LIBNAMEs innerhalb des DB2 *********************************************************/ RSUBMIT; %LET AUTHID = &SYSUSERID.; /*Userkennung z.B. M123456*/ LIBNAME DB2 DB2 SSID=DB2F AUTHID="&AUTHID" READ_LOCK_TYPE=NOLOCK ; ENDRSUBMIT; /* Optional: Ansicht der DB2-Tabellen der AUTHID in PC-SAS */ LIBNAME DB2 SLIBREF=DB2 SERVER=HOST; /********************************************************* Erstellen einer Teilliste (z.B. einer VNR-liste) *********************************************************/ RSUBMIT; PROC SQL; CONNECT TO DB2 (SSID=DB2F); DROP TABLE DB2.TMPVNRTAB; CREATE TABLE DB2.TMPVNRTAB AS SELECT * FROM CONNECTION TO DB2 ( SELECT FROM WHERE WITH UR ); DISCONNECT FROM DB2; QUIT; %SQLRC;%DB2RC; ENDRSUBMIT; Diese Variante legt zwar eine voll funktionierende Tabelle in DB2 an, allerdings passen da bei uns nicht immer die Formate so ganz (VARCHAR statt CHAR, FLOAT statt DEC...) Müssen die Formate stimmen, lege ich die Tabelle vorher mit EXECUTE an, wie von Herrn Ritter beschrieben an. Gruß aus Hamburg Marco Schmidt Log in or register to post comments