Ungültige SQL Anweisung

gamma_matrices

Cadet 4th Year
Registriert
Sep. 2018
Beiträge
121
Hallo zusammen,

ich verasuche herauszufinden, warum bei dem folgenden Query ich bei WHERE den im Titel angegebenen Fehler ("Ungültige SQL Anweisung") bekomme?

SQL:
SELECT
    CONST.NAME AS CONSTRAINT_NAME,
    RCONST.NAME AS REF_CONSTRAINT_NAME,

    OBJ.NAME AS TABLE_NAME,
    COALESCE(ACOL.NAME, COL.NAME) AS COLUMN_NAME,
    CCOL.POS# AS POSITION,

    ROBJ.NAME AS REF_TABLE_NAME,
    COALESCE(RACOL.NAME, RCOL.NAME) AS REF_COLUMN_NAME,
    RCCOL.POS# AS REF_POSITION
FROM SYS.CON$ CONST
INNER JOIN SYS.CDEF$ CDEF ON CDEF.CON# = CONST.CON#
INNER JOIN SYS.CCOL$ CCOL ON CCOL.CON# = CONST.CON#
INNER JOIN SYS.COL$ COL  ON (CCOL.OBJ# = COL.OBJ#) AND (CCOL.INTCOL# = COL.INTCOL#)
INNER JOIN SYS.OBJ$ OBJ ON CCOL.OBJ# = OBJ.OBJ#
LEFT JOIN SYS.ATTRCOL$ ACOL ON (CCOL.OBJ# = ACOL.OBJ#) AND (CCOL.INTCOL# = ACOL.INTCOL#)

INNER JOIN SYS.CON$ RCONST ON RCONST.CON# = CDEF.RCON#
INNER JOIN SYS.CCOL$ RCCOL ON RCCOL.CON# = RCONST.CON#
INNER JOIN SYS.COL$ RCOL  ON (RCCOL.OBJ# = RCOL.OBJ#) AND (RCCOL.INTCOL# = RCOL.INTCOL#)
INNER JOIN SYS.OBJ$ ROBJ ON RCCOL.OBJ# = ROBJ.OBJ#
LEFT JOIN SYS.ATTRCOL$ RACOL  ON (RCCOL.OBJ# = RACOL.OBJ#) AND (RCCOL.INTCOL# = RACOL.INTCOL#)

WHERE CONST.OWNER# = userenv('SCHEMAID')
  AND RCONST.OWNER# = userenv('SCHEMAID')
  AND CDEF.TYPE# = 4  /* 'R' Referential/Foreign Key */;

Vielen Dank im Voraus!
 
Was sollen die # da drin eigentlich darstellen?
Welche DB ist das überhaupt?
 
#: Referenz auf temporäre Tabellen, die zur Laufzeit existieren
DBMS: Oracle SQl Dev.
Mein Ziel ist es mir eine Übersicht bzgl. aller FK-Beziehungen anzuegen zu lassen (Parents with Childs)
 
und wie sieht das schema so aus?

hinweise auf der verlinkten website befolgt?

Ok, die IDE hast du uns gesagt. Welche Datenbank nutzt du?


Ist das eine Hausaufgabe? Es wirkt, als ob du zum 1. Mal was mit DBs machst, da du die rueckfragen irgendwie nicht verstehst und auch nicht so recht im Guefuehl hast, was man u.u zum debuggen bei einer DB nutzt. Oracle tools sind im Aussterben, kommen aber an Bildungseinrichtungen noch verdammt viel vor
 
Zuletzt bearbeitet:
gamma_matrices schrieb:
#: Referenz auf temporäre Tabellen, die zur Laufzeit existieren
Hab diese Syntax noch nie gesehen. Was genau soll die Raute machen? gibts dazu irgend eine Doku?
Für mich sieht das eher so aus, als würde man damit was auskommentieren, was dahinter kommt.

gamma_matrices schrieb:
DBMS: Oracle SQl Dev.
Das ist ein Tool und sagt nichts über die DB und deren Version aus
Ergänzung ()

Aus einer älteren Oracle Doc (du sagst ja nicht welcher Version du nutzt):
Nonquoted identifiers can contain only alphanumeric characters from your database character set and the underscore (_), dollar sign ($), and pound sign (#). Database links can also contain periods (.) and "at" signs (@). Oracle strongly discourages you from using $ and # in nonquoted identifiers.
Ergänzung ()

madmax2010 schrieb:
Oracle tools sind im Aussterben, kommen aber an Bildungseinrichtungen noch verdammt viel vor
ziemlicher Quatsch, Wie kommst du auf sowas?
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: madmax2010
Es ist keine Hausuafgabe und die Query ist aus stackoverflow.
Ich habe auf EverSQL zwar uasgeführt, werde aber von der Fehlermeldung nicht schlau!
Hier die Fehlermeldung:
"You have an error in your SQL syntax; it seems the error is around: '.NAME AS REF_TABLE_NAME, COALESCE(RACOL.NAME, RCOL.NAME) AS REF_COLUMN_NAME, ' at line 7"
 
rg88 schrieb:
ziemlicher Bullshit. Wie kommst du auf so nen Quatsch?
Daher, dass ich in den letzten 10 jahren immer Mehr konzerne zu Postgres migrieren sah. Auch auf Oracle Konferenzen rücken Oracle Tools immer weiter in den Hintergrund. Zu gunsten anderer IDEs, DBMS &Co

Viele die in die Cloud gehen, entscheiden sich an der Stelle auch sehr gern fuer die hosted DB Angebote von Amazon, MS und Google anstatt in die Oracle Cloud zu gehen

gamma_matrices schrieb:
Ich habe auf EverSQL zwar uasgeführt, werde aber von der Fehlermeldung nicht schlau!
Das ist eine Query Optimierungssoftware. Cool Story, aber irgendwie nutzlos in dem Kontext, oder?
Du hast doch einen Debugger. Nutze ihn.
Und probier mal die Teile einzeln zu bauen ;)
gamma_matrices schrieb:
"You have an error in your SQL syntax; it seems the error is around: '.NAME AS REF_TABLE_NAME, COALESCE(RACOL.NAME, RCOL.NAME) AS REF_COLUMN_NAME, ' at line 7"
Joa, aber die kennst du ja schon, nachdem du die obigen Hinweise beachtet hast?
 
Zuletzt bearbeitet:
@madmax2010 Viele Unternehmen gehen nicht in die Cloud, vorallem wenn es um Business-Software geht, die dort überhaupt keinen Nutzen bringt.
Ich bin mir nicht ganz sicher, was du eigentlich mit "Oracle Tools" jetzt meinst? Du vermischt gerade irgendwie IDE und DB kommt mir vor?

(obig zitierten Satz hab ich übrigens kurz darauf editiert, weil er nicht so scharf gemeint war ;) )
 
Debugge das Problem.
Vereinfache die SQL-Abfrage indem du die joins reduzierst. Fange mit einem Join an, lass die Abfrage laufen u. erhöhe danach die joins. Bis es zum Fehler kommt.

Es könnte sein, dass du in den joins unterschiedliche Datentypen verbindest. Das kann nur jemand beurteilen, der die Tabellenstrukturen kennt.
 
Zuletzt bearbeitet:
gamma_matrices schrieb:
Ich habe auf EverSQL zwar uasgeführt, werde aber von der Fehlermeldung nicht schlau!
na, da steht doch, dass es ab dem .NAME keinen Sinn mehr ergibt das Statement.
Und genau deshalb denke ich, dass deine Rauten hier zu Problemen führen, weil das als Kommentar erkannt wird vermute ich jetzt mal blind.
Eine DB Version hast du ja immer noch nicht genannt -.- (wie kann denn so eine Basis-Info so schwierig sein?)

Du hast also temp. Tabellen angelegt wo du die Spalten warum auch immer mit ABCD# benannt hast, oder?
Dann setz das mal in Anführungszeichen und schau, was dann dabei rauskommt. Solche Sonderzeichen nutzt man eigentlich nie
 
Oracle version 18 nutze ich. Wenn ich die Query direkt in SQL Dev. ausführe und nicht in einem universellen Tool (zB. DBeaver), dann bekomme ich dei Fehlermeldung: "Tabelle oder View nicht vorhanden" und zwar an der folgenden Stelle im Script: "...INNER JOIN SYS.CDEF$..."

Edit: Ich werde das gesamte Script verwerfen und ein anderes bzw. neues versuchen!
Ergänzung ()

Vielen Dank für eure Mühe und Zeit!
 
Zuletzt bearbeitet:
gamma_matrices schrieb:
Oracle version 18 nutze ich. Wenn ich die Query direkt ich SQL Dev. ausführe und nicht in einem universellen Tool (zB. DBeaver), dann bekomme ich dei Fehlermeldung: "Tabelle oder View nicht vorhanden" und zwar an der folgenden Stelle im Script: "...INNER JOIN SYS.CDEF$..."
Nun, dann mach doch mal ein "Select * from SYS.CDEF" in deiner Konsole. Wenn es fehlschlägt, gibt es die Tabelle in deiner Oracle-Version nicht, o. du hast nicht die Berechtigungen auf dieses Objekt zuzugreifen ...
oder ...
oder ...
oder ...

Ich habe keine Ahnung von Oracle.

Stelle sicher, dass du jede der von dir in der Abfrage verlinkten Tabellen/Views auch ansprechen kannst!
 
Zuletzt bearbeitet:
ist eigentlich irrelevant. Anderes Tool, anderer Compiler. Der versucht halt einen anderen Weg die Query zu optimieren und stolpert an einer anderen Stelle über die kaputte Syntax. Ich glaube nicht, dass hier nur ein Fehler drin ist.
Ist sehr schwierig zu sagen, ohne die DB zu kennen
gamma_matrices schrieb:
Edit: Ich werde das gesamte Script verwerfen und ein anderes bzw. neues versuchen!
Warum beantwortest du die Vermutungen nicht einfach?
Bzw. probierst es mit Anführungszeichen?
 
Ich glaube das Script ist suboptimal.
@rg88: Ich habe jetzt ein anderes Script und werde ein neues Thread eröffnen!
 
Ich glaube, dass das Script nicht wirklich zielführend für mich ist, weil ich mich im nur im Kreis drehe. Deshalb habe ich mich dazu entschieden eher ein (pflegeleichteres) und ausführbares Script zu nehmen.
 
Zurück
Oben