[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2006
    Beiträge
    68

    Kein INSERT möglich

    Hallo!

    Gleiches Problem wie gestern:
    Sobald ich einen INSERT-Befehl machen will, kommt die Fehlermeldung

    SQL7008 30 15 Position 2 SQL1 in GEISLER für Operation ungültig.

    Quelltext lautet:
    1 CREATE TABLE GEISLER.SQL1 (
    2 KBB CHAR ( 30 ) NOT NULL DEFAULT,
    3 KMN DECIMAL( 3, 0) NOT NULL DEFAULT,
    4 KGP VARCHAR( 15 ) NOT NULL DEFAULT,
    5 KTIM TIME NOT NULL DEFAULT,
    6 KDAT DATE NOT NULL DEFAULT);
    7 LABEL ON COLUMN GEISLER.SQL1
    8 (
    9 KBB IS 'NAME',
    10 KMN IS 'ZAHL',
    11 KGP IS 'XYZ',
    12 KTIM IS 'ZEIT',
    13 KDAT IS 'DATUM');
    14
    15 INSERT INTO GEISLER.SQL1
    16 (KBB)
    17 VALUES ('SCHULZE');

    Das kann doch langsam nicht mehr wahr sein; warum macht das scheiß Teil das nicht? Auf dem SQL-Server gehts doch auch...HILFE :-(
    Ich nerve zwar, aber ich lerne!

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.879
    Das liegt daran, dass die Datei/Tabelle nicht im Journal aufgezeichnet wird.

    Ich nehme an, dass die Bibliothek GEISLER nicht über SQL (Create Schema), sondern über den CL-Befehl CRTLIB erstellt wurde. Beim Erstellen einer Bibliothek mit SQL werden automatisch Journal und Journal Receiver in dieser Bibliothek angelegt. Alle Dateien/Tabellen, die mit SQL erzeugt werden, werden automatisch im Journal registriert und aufgezeichnet.

    Wenn eine Aufzeichnung im Journal nicht erforderlich ist, dann kannst Du am Ende des Insert Statements WITH NC angeben.
    PHP-Code:
    INSERT INTO GEISLER.SQL1 
              
    (KBB
    VALUES ('SCHULZE')
    With NC
    Eine andere Möglichkeit, sofern Du das Skript mit RUNSQLSTM ausführst ist, die Option Commit Steuerung (COMMIT) auf *NONE zu setzen. Der Unterlassungs-Wert bei dieser Auswahl ist *CHG, was bedeutet, dass alle Inserts, Updates und Deletes im Journal aufgezeichnet werden müssen. Da funktioniert natürlich nur dann, wenn die Datei/Tabelle auch registriert ist.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Jan 2006
    Beiträge
    68
    Ja ich denke es wurde per CL-Command erstellt!

    Eine Aufzeichnung ins Journal ist wohl nicht notwenidig, denke ich. Allerdings hab ich mit Journalen noch nie was zu tun gehabt und kenn es bloß vom "Wort" her.

    Ich hab jetzt also folgendes gemacht:
    CREATE SCHEMA GEISLERSQL;

    Das hat ja auch geklappt, das ganze sieht dann so aus


    Ausw. Teildatei Art Text
    SCHEMA TABLE

    Aber was hab ich davon? Dachte, das ist dann sowas wie eine Datei (z.Bsp, DDS) wo die Teildateien (SQL1) drin sind.

    Mein SQL-Kram wandle ich dann erst mit RS und gucks mir dann im Query an (weil weiß nicht wie sonst).

    gut, also hab ich mal deinen Befehl benutzt und folgendes kam bei raus:
    RUNSQLSTM SRCFILE(GEISLER/QSQLDDLSRC) SRCMBR(SQL2) COMMIT(*NONE) NAMING(*S
    QL)
    Eigentumsrecht für Objekt SQL1 in GEISLER Art *FILE geändert.
    Tabelle SQL1 in GEISLER erstellt, Tabelle konnte jedoch nicht im Journal
    aufgezeichnet werden.

    PS: Vielen Dank für deine Hilfe
    Ich nerve zwar, aber ich lerne!

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.258
    Auf dem SQL-Server läuft da einiges anders, da dieser grundsätzlich mit Journalen arbeitet.

    Journale ermöglichen eben, an Datenbanken Änderungen zu bestätigen (Commit) bzw. zurückzunehmen (Rollback).

    Per Create Schema (Collection) wird automatisch ein Journal erstellt.
    Ein Create Table muss dann sogar per Commit bestätigt werden, sonst wird sie automatisch wieder entfernt !

    Der RUNSQLSTM erlaubt SQL-Scripte auszuführen, allerdings brechen diese beim 1. Fehler ab.

    Je nach OS-Version sind auch mehr als 1 Statement (mit Semikolon getrennt) erlaubt.

    Wenn du ein Schema GEISLERSQL erstellt hast, solltest du zum Testen auch GEISLERSQL statt GEISLER verwenden.

    Im Übrigen kannst du per STRSQL SQL-Befehle interaktiv ausführen, per F4 auch komfortabel prompten lassen.

    Per F13 kannst du dann alle eingetippten SQL-Befehle mit Auswahl 4 in eine SRCPF sichern.

    Ich denke, zum Üben ist dies besser geeignet als die dauernde testerei mit SQL-Scripts.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Jan 2006
    Beiträge
    68
    Danke... ihr seid echt super!

    Schön,wenn mal was klappt :-)
    Ich nerve zwar, aber ich lerne!

Similar Threads

  1. SQL Insert in schleife
    By Robi in forum IBM i Hauptforum
    Antworten: 20
    Letzter Beitrag: 16-03-09, 10:32
  2. SQL: Insert bei NULL
    By woki in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 31-10-06, 10:21
  3. nach Insert neu gen. Datensatz ermitteln
    By M.Kasper in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 25-08-06, 07:32
  4. SQL Insert: Zeichenbegrenzung???
    By Deficiency in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 13-01-06, 09:00
  5. SQL Insert
    By Deficiency in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 01-12-05, 11:22

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •