PDA

View Full Version : SQL-View Ändern



svit
14-05-12, 10:26
Hallo zusammen,

Problem1:
ich habe einen SQL-View
create view myview(Feld1, Feld2) as
Select (char('abc'), char(feld_x)) from Datei_x
erstellt.
Wenn ich jetzt mein View in einem belibigen ODBC-Query-Tool anschaue dann wird das Feld1 als CHAR FOR BIT DATA (JDBC-Typ Binary) und nicht als CHAR(JDBC-Typ Char) definiert.

Problem 2:
Kann bestehende VIEW geändert werden oder die Definition anzeigen (auf welche Datei erstellt wurde und und.....).


eval user(*all) = 'besten Dank'

Fuerchau
14-05-12, 10:30
Wenn deine Datei_X die CCSID 65535 hat, passiert genau dieses. Die Daten sind als Binärdaten definiert.
Bei CA-ODBC kannst du in der Konfiguration angeben, dass Binärdaten trotzdem umgesetzt werden.
Im ConnectionString für JDBC gibt es auch eine entsprechende Option.

Du kannst allerding sauch deine View so ändern, dass eine CCSID verwendet wird:

create view myview(Feld1, Feld2) as
Select (cast('abc' as char(3) ccsid 273), cast(char(feld_x) as char(nn) ccsid 273) from Datei_x

Beachte aber, dass durhc das Casten beim späteren Select keine Indizes verwendet werden können und immer ein Table-Scan erforderlich wird.

Besser wäre es, der Datei_x eine correkt CCSID zu verpassen und währende der Erstellung der View auch dem Job eine passende CCSID zu vergeben, z.B. "CHGJOB CCSID(273)".

svit
14-05-12, 13:36
Supper

funktioniert.

Danke

P.S.: kann bestehende View geändert werden ?
(zum Bsp. Feld hinzufügen oder die gesamte Definition ansehen)

Robi
14-05-12, 14:19
dspfd oder dspffd zeigt die Definition
(habe grade keine as400 laufen)

Schreib den create view in eine TXT Datei

z.B in QVIEWSRC
dort kannst du den Befehl jederzeit anpassen und mit runsqlstm ausführen.
ab dem 2. mal nimmst du in die Source ein "drop view" mit auf.

kommentar in der SQL Source =
-- Dies ist Kommentar


Robi

Fuerchau
14-05-12, 15:01
Aber Achtung:
Wenn mehrere Befehle in einer Datei stehen, so ist jeder einzelne mit Semikolon abzuschließen:

drop view ....;
create view ....;

svit
15-05-12, 13:25
Danke

funktioniert.

Fuerchau
15-05-12, 13:55
Ich habe mir da übrigens eine PDM-Auswahl geschaffen, da ich das häufiger brauche:

RT ? RUNSQLSTM SRCFILE(&L/&F) SRCMBR(&N) COMMIT(*NONE)

B.Hauser
16-05-12, 12:16
Ich habe mir da übrigens eine PDM-Auswahl geschaffen, da ich das häufiger brauche:

RT ? RUNSQLSTM SRCFILE(&L/&F) SRCMBR(&N) COMMIT(*NONE)

Ich habe meine Auswahl noch etwas erweitert:
RUNSQLSTM SRCFILE(&L/&F) SRCMBR(&N) COMMIT(*NONE) NAMING(*SYS) DFTRDBCOL(&O)

Mit DFTRDBCOL kann die Objektbibliothek vorgegeben werden. Damit ist es nicht erforderlich die zu erstellenden (oder bearbeitendend) Objekte zu qualifizieren (Angabe der Bibliothek ist nicht erforderlich). Über das gleiche Skript können Objekte in unterschiedlichen Bibliotheken erstellt werden.

Mit Naming *SYS wird festgelegt, dass System Naming verwendet wird. Ist zwar der Default-Wert ich möchte jedoch sicherstellen, dass IMMER System Naming verwendet wird. Dies ist deshalb wichtig, damit die OS/400 bzw. IBM i Objektberechtigungen verwendet werden. Verwendet man SQL Naming gelten diese Regeln nicht. (vergl. Artikel: System versus SQL Naming - Part 1 (http://www.ibm.com/developerworks/ibmi/library/i-sqlnaming/index.html))

Birgitta