-
Sqlfehler 304 SQLSTT = '01515'
Hallo *all,
ich zerbreche mir den Kopf, warum eigentlich SQL Statement:
Code:
exec sql
SELECT SUM(ZTEV + ZTAV)
INTO :SOLLZ :MyIndikator
FROM (
SELECT SUM(DISTINCT
CASE WHEN ZTAV = 0 THEN ZTEV ELSE 0 END) AS ZTEV,
SUM(DISTINCT
CASE WHEN ZTAV <> 0 THEN ZTAV ELSE 0 END) AS ZTAV
FROM WORKF
WHERE PENR = :PENR AND AUF# = :AUF#
GROUP BY ABT, KST, LAG, AUF#)
AS X;
den Fehler:
Code:
Sqlcod 304 SQLSTT = '01515'
Explanation: Conversion error in assignment to host variable &2
liefert.
Wenn ich das Sql direkt absetze bekomme ich folgende Werte:
Die 2 Variablen sind mit 6, 0 definiert, daher ist mir der Error nicht verständlich da das Ergebnis
5, 0 ist.
In der Programmstruktur hätte ich MyIndikator wie immer wie folgt definiert:
Was hats den da?
Dank im Voraus
Tarki
-
Das Problem liegt wohl darin, dass Du die Summen nicht explizit auf einen bestimmten Datentyp und länge gecastest hast. Damit kann es vorkommen, dass die automatisch ermittelte Länge größer ist, als das ErgebnisFeld.
Versuchs so:
Code:
SELECT Cast(SUM(ZTEV + ZTAV) as Dec(6, 0))
INTO :SOLLZ :MyIndikator
...
Birgitta
-
Morgen Birgitta,
habe es vorher schon versucht die summen im inneren Select mit Decimal 6, 0 anzugeben, aber leider ohne erwünschten Erfolg.
Leider hat das mit dem Cast auch nicht funktioniert.
Der MyIndikator ist bei dem Fehler auf -2.
Kann ich da irgendetwas rauslesen?
Danke
Tarki
-
Mach mal einen "create table test as (select ...)" um den Typ des Zielfeldes festzustellen.
Wer weiß schon wie SQL genau Ergebnisfelder definiert um den maximal möglichen Ergebniswert aufzunehmen selbst wenn das tatsächliche Ergebnis durchaus kleiner sein kann.
-2 bedeutet nur "Wert zu groß für Zielfeld".
-
Die Ergebnisfelder sind 31 Decimal.
Ich hätte es so versucht, aber bekomme immer noch den Fehler.
Wie definiere ich ZTEV, ZTAV?
Code:
SELECT Cast(SUM(ZTEV + ZTAV) as Dec(6, 0))
INTO :SOLLZ :MyIndikator
...
Decimal( SUM(DISTINCT
CASE WHEN ZTAV = 0 THEN ZTEV ELSE 0 END), 6, 0) AS ZTEV,
...
Danke vielmals
Tarki
-
Und warum definierst Du dann Deine Ausgabe-Felder nicht 31P 0?
Anstatt mit Gewalt in SQL auf 6, 0 konvertieren.
Indikator -2 deutet allerdings auch darauf hin, dass mindesten eines der Felder ungültige numerische Wert beinhaltet (irgend einen krummen Hex-Wert).
Birgitta
-
 Zitat von tarkusch
Die Ergebnisfelder sind 31 Decimal.
Ich hätte es so versucht, aber bekomme immer noch den Fehler.
Wie definiere ich ZTEV, ZTAV?
Code:
SELECT Cast(SUM(ZTEV + ZTAV) as Dec(6, 0))
INTO :SOLLZ :MyIndikator
...
Decimal( SUM(DISTINCT
CASE WHEN ZTAV = 0 THEN ZTEV ELSE 0 END), 6, 0) AS ZTEV,
...
Danke vielmals
Tarki
was haben denn ZTEV und ZTAV in der Tabelle für eine Datenart?
Ein spezifische Eigenart von interaktivem SQL ist das Übergehen von Daten Umsetzungsfehlern (die ominösen Pluszeichen in der Anzeige). Das kann zu Deinem Resultat beitragen, wenn in Daten, die in der Where Klausel wegfallen, aber bei der Berechnung der Ergebnismenge ausgwertet werden, nicht umsetzbare Daten sind.
D*B
Similar Threads
-
By Zupfl50 in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 06-10-04, 21:04
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks