SQL-Passthrough und Erzeugung einer Tabelle

Werbung
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
Herunterladen