Mitmy sql ne tabelle anlegen

hi ich möchte in my SQL mit dem befehl

CREATE TABLE Testtabelle1

eine leere tabelle anlegen.
aber es geht nicht. stattdessen bekomme ich die Fehlermeldung.

„A table must have at least 1 column“

wo liegt der fehler? plz help

Sagt doch die Fehlermeldung. Du musst sagen, welche Spalten die Tabelle haben soll.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin, panter,

eine Tabelle hat vor allem einen Zweck: Sie soll das Speichern von Informationen ermöglichen, dazu muss sie wenigstens eine Spalte haben.

Nebenbei gesagt, eine Tabelle ist leer, wenn sie keine Zeilen hat.

Gruß Ralf

Nebenbei gesagt, eine Tabelle ist leer, wenn sie keine
Zeilen hat.

Hi Hi genau …

Und eine Tabelle ist nicht vorhanden wenn sie kein Feld (SPALTEN) hat…

Hi ihr zwei!

Das Ganze ließ mir jetzt keine Ruhe - und ich schaffte es tatsächlich nicht eine komplett _inhaltslose_ Tabelle anzulegen (Oracle 10g) - die Frage, die sich mir stellt: Wieso eigentlich nicht? Sinn oder Unsinn sei mal dahingestellt - um Felder kann ich jederzeit erweitern.
Den Storage-Daten ist es ja eigentlich egal, ob und wieviele Columns enthalten sind …

Beispiel: Ich habe einen _generischen_ Aufbau in einer aber sowas von dynamischen Applikation, wo ich ganz einfach zuerst mal nur die Tabelle mit sämtlichen Option - außer den Feldern halt - aufbauen will … wie schon gesagt: Sinn oder Unsinn mal außer acht gelassen - Warum funktioniert das nicht???

Mir würde nur die Schlagwortkeule „Relation“ einfallen (Nona, eine feldlose Tabelle kann auch irgendwie nicht ganz in Relationen einbezogen werden), aber ansonsten?

Fragende Grüße,
Tomh

PS: Auch das Löschen aller Felder der Tabelle funktioniert nicht - und in das System-Schema und seine Tabellen greif ich lieber nicht hinein …

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi ihr zwei!

Den Storage-Daten ist es ja eigentlich egal, ob und wieviele
Columns enthalten sind …

Als Programmierer sag ich

der Syntax lautet

CREATE TABLE tabellenname ( create-def, … )

es muss ein parameter angegeben werden.

Genauso kann man auch fragen warum ich bei dem Befehl Copy eine Datei angeben muss. Weil die Funktion so aufgebaut ist, es könnt auch einfach mal alles kopieren nach irgentwo.

Wenn du aber gerne eine Funktion Programmieren willst die keine parameter benötigt, kannst du das gerne machen :smile:

Die nächste Frage die sich mir allerdings stellt,
wenn ich eine tabelle ohne felder habe, wie kann cih garantieren, das bei select etc kein error herrauskommt in den routinen, da ja nicht mal ein feld vorhanden ist, ergo , brauchen viele anderen routinen funktionen jetzt auch parameterlose möglichkeiten ? bzw rückgabe wert prüfung etc…

Ich denk einfacher ist anzunehmen das der sin einer Tabelle nicht bei 0-Dimensionen liegt sondern erst praktikabel bei 1-Dimension , und somit 1 feld mindestens vorhanden sein muss.

Nur mal so eine eingebung , was alles entstehen kann nur weil du gerne erst deine tabelle layouten möchtest und dann füllen.

Hi!

Als Programmierer sag ich

der Syntax lautet

CREATE TABLE tabellenname ( create-def, … )

Ich als Programmierer sage, die Syntax lautet "CREATE TABLE ([Definition]) …

Wenn du aber gerne eine Funktion Programmieren willst die
keine parameter benötigt, kannst du das gerne machen :smile:

Genau DAS habe ich eigentlich schon oft genug gemacht, das ich Funktionen oder Prozeduren OHNE Parameter entwickle.

Die nächste Frage die sich mir allerdings stellt,
wenn ich eine tabelle ohne felder habe, wie kann cih
garantieren, das bei select etc kein error herrauskommt

Naja, bei einem „select *“ kommt halt dann ein NULL heraus … und NULL ist ja nun ein gültiger Wert bzw. Nicht-Wert … NULL ist ganz einfach ein beliebter Parameter bzw. Rückgabewert …

Nur mal so eine eingebung , was alles entstehen kann nur weil
du gerne erst deine tabelle layouten möchtest und dann füllen.

Naja, diese _Eingebung_ hatte ich zum ersten Mal bei der Fragestellung … anfangs dachte ich eigentlich auch „Was will denn der damit?“ … allerdings beschäftigt mich jetzt diese Frage … vor allem in einem System, in dem ein Boolean drei Zustände annehmen kann …

Grüße,
Tomh

Moin, Tomh,

Naja, bei einem „select *“ kommt halt dann ein NULL heraus …

genau hier fängt der Ärger an - der nächste Programmierer / User / wasweißich will dann wissen, warum Null kommt. Weil die Tabelle leer ist? Oder weil sie nur als Dummy herumliegt? Beides wäre möglich, darauf gibt die Datenbank, so sie denn irgendeinem Standard entspricht, aber keine Antwort.

Gruß Ralf

Die nächste Frage die sich mir allerdings stellt,
wenn ich eine tabelle ohne felder habe, wie kann cih
garantieren, das bei select etc kein error herrauskommt

Naja, bei einem „select *“ kommt halt dann ein NULL heraus …
und NULL ist ja nun ein gültiger Wert bzw. Nicht-Wert …
NULL ist ganz einfach ein beliebter Parameter bzw.
Rückgabewert …

Ich mein auch eher andere sachen, wie nehme Feld ( prüfe obs übehaupt ein feld gibt ) , trivial weil es sollte eins da sein.
Du machst also ein untypischen regel fall mit dem predesign einer tabelle. Was auch wirklich nicht brauchbar ist. Leg die Tabelle mit seiner 1 Dimension an und gut ist.
Spezialfälle wie deinen muss man dann halt selber programmieren, und damit mein ich nicht SQL funktion per script. Sondern überall schonmal eine 2 Funktion für nicht parameter, nicht felder und jeweils logische ausgaben, NULL verwirrt auch nur, weil NULL ist auch ein Wert und damit totaler unsinn.

Hi!

Ich mein auch eher andere sachen, wie nehme Feld ( prüfe obs
übehaupt ein feld gibt ) , trivial weil es sollte eins da
sein.

Naja, bei mir sieht beispielsweise in Oracle-Forms der Code auch genauso aus: Hol (interne) ID von Feld aus Maske und schau, ob diese eh nicht NULL ist … wenn nicht, dann mach mal weiter …

Du machst also ein untypischen regel fall mit dem predesign
einer tabelle. Was auch wirklich nicht brauchbar ist.

Hier geht’s nicht um (Pre-)Design oder sonst irgendwas einer Tabelle, eines Datenmodells, eines irgendwas … worin liegt der Sinn einer 0-Byte-Datei? (Die massenhaft auf den Systemen herumliegen)

Spezialfälle wie deinen muss man dann halt selber
programmieren

Ich HABE zum Glück diesen Spezialfall nicht …

Sondern überall schonmal eine 2 Funktion für nicht
parameter, nicht felder und jeweils logische ausgaben, NULL
verwirrt auch nur, weil NULL ist auch ein Wert und damit
totaler unsinn.

Ich dachte immer, NULL bedeutet „nicht ausgeprägt“, also KEIN Wert - und eigentlich hat mich NULL noch nie verwirrt und es war auch nur äußerst selten Unsinnig für ein Feld (das mir einprägendste Beispiel: Sterbedatum)

Mir gings alleine nur um die Tatsache, WARUM es nicht möglich ist, wo doch sonst jeder mögliche und unmögliche Unsinn technisch umsetzbar ist …

Grüße,
Tomh

Mir gings alleine nur um die Tatsache, WARUM es nicht möglich
ist, wo doch sonst jeder mögliche und unmögliche Unsinn
technisch umsetzbar ist …

Weil es keiner nutzt, weil es kein sin macht. Ergo nur du das willst und sonst niemand auf der welt.

Ich dachte immer, NULL bedeutet „nicht ausgeprägt“, also KEIN
Wert - und eigentlich hat mich NULL noch nie verwirrt und es
war auch nur äußerst selten Unsinnig für ein Feld (das mir
einprägendste Beispiel: Sterbedatum)

keine Ahnung vom Programmieren merkt man.
Sonst würdest du solche Fälle nicht so einfach unter den Tisch kehren.

Werte die es garnicht gibt zu Prüfen sind schon einige Exeptions Wert.

Das dein ORACLE schon einige ROUTINEN hat für FEHLENDE Werte ist schon ok, aber für Fehlende Struktur glaub ich kaum, das wäre ja Datenbank falsch Strukturiert und dafür erwartest du auch noch eine Funktion. LOL

Es wird auch öde. Du schnallst die Grundlagen nicht und agumentierst einfach aus dem blauen heraus. Machst eine Fehlerhafte Tabellenstrucktur zum Normalfall und das auch nix mit dem wert NULL für dich Laien zu tun.

Tabelle Tab1

Feld1 int auto_index
Feld2 varchar(255)

Select Feld1,Feld2,Feld3 FROM Tab1

ergibt dann bei dir

HIER aus dem Wiki thema NULL in SQL:

Since Null is not a member of any data domain, it is not considered a „value“, but rather a marker (or placeholder) indicating the absence of value. Because of this, comparisons with Null can never result in either True or False, but always in a third logical result, Unknown.[4] The logical result of the expression below, which compares the value 10 to Null, is Unknown:

ist also klar defeniert als abwesenheit von werten , und nicht als fehlende strukturen.

Feld1Wert,Feld2Wert,NULL

was für eine Aussage.

Hier geht’s nicht um (Pre-)Design oder sonst irgendwas einer
Tabelle, eines Datenmodells, eines irgendwas … worin liegt
der Sinn einer 0-Byte-Datei? (Die massenhaft auf den Systemen
herumliegen)

erklär dein Unsinn mal, ich hab nix verstanden, wo ist dein problem mit 0Byte Dateien ???.

Hi!

keine Ahnung vom Programmieren merkt man.

Yep, deswegen bin auch seit 15 Jahren einer …

Sonst würdest du solche Fälle nicht so einfach unter den Tisch
kehren.

Was für Fälle?

Werte die es garnicht gibt zu Prüfen sind schon einige
Exeptions Wert.

Dafür brauch ich doch keine Exception:

if x is null

Das dein ORACLE schon einige ROUTINEN hat für FEHLENDE Werte
ist schon ok

Wenn du aber gerne eine Funktion Programmieren willst die keine :stuck_out_tongue:arameter benötigt, kannst du das gerne machen :smile:

Was ist an einer

create function gib\_die\_session\_id() return number

ungewöhnlich?

Es wird auch öde. Du schnallst die Grundlagen nicht und
agumentierst einfach aus dem blauen heraus. Machst eine
Fehlerhafte Tabellenstrucktur zum Normalfall und das auch nix
mit dem wert NULL für dich Laien zu tun.

Ich - als Laie - glaube, über den Ausdruck „NULL“ solltest mal zum Nachlesen beginnen …

Tabelle Tab1

Feld1 int auto_index
Feld2 varchar(255)

Bist Du in Deiner Visual-Welt wirklich so eingeschränkt, daß Du die eigentlich FRAGE gar nicht mehr schnallst?

Es geht darum, warum ein

create table leere\_tabelle tablespace myspace pctused 40 pctfree 15 initrans 1 maxtrans 255 storage(initial 1M minextents 2 maxextents 125 buffer\_pool keep

auf einem Datenbanksystem nicht möglich ist …

Select Feld1,Feld2,Feld3 FROM Tab1

ergibt dann bei dir

einen _ungültigen_ Bezeichner, jedoch bei einem

select \* from tab1

reicht im SQL nun mal nur der Tabellenname, und falls ich hier in PL/SQL einen Rückgabewert benötige, den definiere ich mir vorher mittels ROWTYPE.

Since Null is not a member of any data domain, it is
not considered a „value“, but rather a marker (or placeholder)
indicating the absence of value
.

Nix anderes habe ich geschrieben (Zitat):

NULL bedeutet „nicht ausgeprägt“, also KEIN Wert

Because of this,
comparisons with Null can never result in either True or
False

Zum Glück gibt’s unter Oracle ein

is [NOT] null

und hier hab ich dann ein TRUE oder FALSE …

Aber das Ganze hat halt eigentlich gar nix mehr mit der ursprünglichen Frage zu tun.

ist also klar defeniert als abwesenheit von werten , und nicht
als fehlende strukturen.

Kommt drauf an: Wenn ich mir das Ganze aus der Sicht des Oracle-Repository’s ansehe, sind es _abwesende_ Werte in den System-Tabellen, worauf die logische Reaktion eines Selects auf so eine „Nicht“-Tabelle ein „NO DATA FOUND“ sein könnte.

Vielleicht bin ich ganz einfach auch nur zu tief in der Oracle-Welt drinnen, sodaß ich gewisse Sachen (wie die obige) nicht generell als vollkommenen Schwachsinn abstemple.

Trotzdem Grüße,
Tomh

Morgen!

User / wasweißich will dann wissen, warum Null kommt. Weil die
Tabelle leer ist? Oder weil sie nur als Dummy herumliegt?
Beides wäre möglich, darauf gibt die Datenbank, so sie denn
irgendeinem Standard entspricht, aber keine Antwort.

Uff, Danke! Wenigstens Du hast meine Frage verstanden …

Grüße,
Tomh