Anmelden

View Full Version : SQL RENAME TABLE und Tabellen-Name < 10 Zeichen



wti
11-05-16, 18:17
Moin zusammen,

jetzt habe ich mir soviel Mühe gemacht und beim Abschicken des Textes geht's in die Grütze - also noch Mal :(:(:(
Hoffentlich reicht auch die Kurzform.

Für lange SQL-Namen funktioniert der RENAME TABLE:
CREATE TABLE "ChurchMembershipType" (...
RENAME TABLE "ChurchMembershipType" TO SYSTEM NAME "CHURCHMTYP";
Ergibt:
TABLE_NAME: ChurchMembershipType
SYSTEM_TABLE_NAME: CHURCHMTYP

Bei kurzen SQL-Namen arbeitet der RENAME nicht wie erwartet:

CREATE TABLE "Passport" (...
Ergibt:
TABLE_NAME: Passport
SYSTEM_TABLE_NAME: "Passport"

RENAME TABLE "Passport" TO SYSTEM NAME "PASSPORT";
Ergibt:
TABLE_NAME: PASSPORT
SYSTEM_TABLE_NAME: PASSPORT

Bei meiner Suche bin ich nicht erfolgreich gewesen und hoffe dass ihr eine Lösung/Workaround habt.

Ziel ist die SQL-Namen case-sensitiv und die System-Namen upper-case darzustellen, d.h.
TABLE_NAME: Passport
SYSTEM_TABLE_NAME: PASSPORT

Vielen Dank im Voraus und einen schönen Abend

Gruß
Wolfgang

Fuerchau
11-05-16, 21:16
Nun der Befehl lautet ja auch:
Rename OldName to NewName for system name SYSNAME
Soll der Name casesensitive werden, muss der Befehl eben
Rename "OldName" to "NewName" for system name SYSNAME
lauten.
Allerdings bringt dir das ja bei 10-stelligen Namen eher wenig, da ja der Systemname und Tablename alternativ verwendet werden kann.
Was für einen Sinn macht es,
select * from "Passport"
von
select * from passport
oder
SELECT * FROM PASSPORT
zu unterscheiden?
Ich denke mal die DB übernimmt den 10-stelligen Systemnamen als Tabellen-Namen, wenn er den Richtlinien für Objektnamen entspricht.

Pikachu
11-05-16, 23:01
Die AS/400 tut's teilweise, denn "Passport" bezieht sich nicht (immer) auf dasselbe Objekt wie passport oder Passport oder PASSPORT.



Was für einen Sinn macht es,
select * from "Passport"
von
select * from passport
oder
SELECT * FROM PASSPORT
zu unterscheiden?

wti
12-05-16, 07:48
Nun der Befehl lautet ja auch:
Rename OldName to NewName for system name SYSNAME
Soll der Name casesensitive werden, muss der Befehl eben
Rename "OldName" to "NewName" for system name SYSNAME
lauten.
Allerdings bringt dir das ja bei 10-stelligen Namen eher wenig, da ja der Systemname und Tablename alternativ verwendet werden kann.
Was für einen Sinn macht es,
select * from "Passport"
von
select * from passport
oder
SELECT * FROM PASSPORT
zu unterscheiden?
Ich denke mal die DB übernimmt den 10-stelligen Systemnamen als Tabellen-Namen, wenn er den Richtlinien für Objektnamen entspricht.


Moin,

den Befehl kenne ich auch:

RENAME TABLE "Passport" to "Passport" for SYSTEM NAME "PASSPORT"

...bringt aber bei mir folgende Fehlermeldung:

> RENAME TABLE "Passport" to "Passport" for SYSTEM NAME "PASSPORT"
SQL State: 428B8
Vendor Code: -7029
Message: [SQL7029] Neuer Name "Passport" ist ungültig. Ursache . . . . : Es wurde versucht, "Passport" in PARTNERLIB umzubenennen, der neue Name ist jedoch ungültig. Sowohl der neue Name als auch der neue Systemname sind gültige Systemnamen. Werden beide Namen in der Anweisung RENAME angegeben, kann nur der Name, der auf SYSTEM NAME folgt, ein gültiger Systemname sein. Fehlerbeseitigung: Einen der folgenden Schritte durchführen und die Anforderung wiederholen: -- Entweder den neuen Namen oder den neuen Systemnamen angeben. -- Den ersten Namen in einen Namen ändern, der als Systemname nicht gültig ist.

Ein Rename lässt sich nur ausführen wenn der neue Name unterschiedlich zu dem alten Namen ist. Allerdings habe ich verschiedene Kombinationen ausprobiert und nicht das gewünschte Ergebnis erzielt - die Tabelle zunächst unter einem anderen Namen zu erzeugen kann ja auch nur eine Krücke sein.

Allerdings bringt mir das nicht nur ein einheitliches Bild und nicht so etwas:

Mit Dateien arbeiten

Auswahl eingeben und Eingabetaste drücken.
1=Erstellen 3=Kopieren 4=Löschen 5=Physische Teildatei anzeigen
8=Dateibeschreibung anzeigen 9=Sichern 10=Zurückspeichern
13=Beschreibung ändern



Ausw Datei Bibliothek Attribut Text

"Passport" PARTNERLIB PF
ADDRESSTYP PARTNERLIB PF Address Type


Außerdem kann ich in diesen Fällen die Schreibweise nicht alternativ verwenden, da ich nur case-sensitiv oder nur upper-case umbenennen kann.
Somit muss ich auch auf dem GreenScreen case-sensitiv arbeiten:
dspffd partnerlib/"Passport"
dspffd partnerlib/passport funktioniert nicht(!!!)

Gruß
Mr. Monk ;)

Fuerchau
12-05-16, 08:19
Na ja, das System weist doch mit der Fehlermeldung darauf hin, wenn der Tabellenname einem Systemnamen entspricht, dass dann nur der Systemname gesetzt werden kann.
Beim Create Table wird der Systemname natürlich automatisch generiert.
In deinem Beispiel ggf. PASSP00001.
Somit kannst du den Systemnamen natürlich auch ansprechen.
Aber warum machst du dir die Mühe überhaupt?
Wenn du doch mit SQL arbeitest und unbedingt casesensitive, dann ignoriere doch die Systemnamen einfach. Für die Anzeige von Tabelleninformationen gibt es dann andere Hilfsmittel als den DSPFD/FFD.
Z.B. diverse SQL-Explorer, den iSeries-Navigator, u.v.m.
Ja ich weiß, nicht auf dem Greenscreen.
Aber da gibts dann die selben Schwierigkeiten mit den casesensitiven Feldnamen.

Pikachu
12-05-16, 08:35
Bei kurzen SQL-Namen arbeitet der RENAME nicht wie erwartet: ...

Dann sind wohl deine Erwartungen zu hoch:
DB2 Universal Database for iSeries SQL Reference - RENAME (https://publib.boulder.ibm.com/iseries/v5r2/ic2924/info/db2/rbafzmstrena.htm#HDRRENA)

Und Vorsicht bei Systemnamen in doppelten Anführungszeichen:
CL concepts > Objects > Object naming rules > Names (*NAME) - *NAME (basic name in quoted form) (https://www.ibm.com/support/knowledgecenter/ssw_i5_54/rbam6/rbam6names.htm?lang=de)