-
SQL-Fehler free-rpg
Hallo zusammen,
folgende Fehlermeldung habe ich:
Nachricht . . . : Anzeigervariable erforderlich.
Ursache . . . . : Eine Anweisung FETCH, eine eingebettete Anweisung SELECT,
eine Anweisung CALL, GET DESCRIPTOR, SET oder VALUES INTO hatte einen
Nullwert zur Folge, für Host-Variable AMOUNT wurde jedoch keine
Anzeigervariable angegeben. Die relative Position der Host-Variablen in der
Klausel INTO oder der Parameterliste ist 2. Ist der Name der Host-Variablen
*N, wurde ein Deskriptorbereich angegeben.
Tritt dieser Fehler bei einer Anweisung GET DESCRIPTOR auf, wird der
Nullwert zurückgegeben, aber das Element INDICATOR wurde bei der Anweisung
GET DESCRIPTOR nicht angegeben.
Fehlerbeseitigung: Eine Anzeigervariable angeben und das Programm erneut
vorkompilieren.
Im Programm habe ich folgendes codiert :
/free
exec sql select sum(Wert1 - Wert2) into :AMOUNT
from DateiX
sum(Wert1 - Wert2) kann = 0 sein
D AMOUNT s 14 2
Hat jemand eine Lösung zu diesen Problem?
-
So wie es aussieht kann Dein SQL-Statement einen NULL-Wert (hat nichts zu tun mit dem deutschen Wort Null = 0) zurückbringen. (NULL-Wert = Nix, Kein Ergebnis)
Um auf NULL-Wert prüfen zu können, wird eine Indikator/Anzeiger-Variable erwartet.
Eine Indikator-Variable wird in RPG mit 5I 0 definiert und im SQL-Statement unmittelbar (nur durch ein Blank getrennt) nach der Variablen angegeben, die geprüft werden soll. Wurde für die Variable ein NULL-Wert ausgegeben, so geht die Indikator-Variable auf -1 anderenfalls wird 0 zurückgegeben. Bei einem NULL-Wert wird die Host-Variable nicht initialisiert. Also am besten vor dem SQL-Statement clearen oder die Indikator-Variable abfragen und dann clearen.
Code:
D MyInd S 5I 0
/Free
Clear Amount;
Exec SQL Select sum(Wert1 - Wert2) into :AMOUNT :MyInd
from DateiX;
If MyInd < *Zeros;
Clear Amount;
Endif;
/End-Free
Birgitta
-
Vielen Dank!
Hat nun funktioniert!!!
-
Hallo,
mit der Funktion COALESCE kannst du NULL in einen Defaultwert umwandeln:
Code:
exec sql select COALESCE(sum(Wert1 - Wert2), 0) into :AMOUNT
from DateiX
ab 6.1 geht auch:
Code:
exec sql select IFNULL(sum(Wert1 - Wert2), 0) into :AMOUNT
from DateiX
-
Wobei der Anzeiger insoweit hilfreich ist festzustellen, dass keine Daten für die Summe vorhanden sind.
-
... alles Murks!
es muss heißen:
select sum(coalesce (Wert1, 0) - coalesce (Wert2, 0))
from ...
alles andere liefert nicht erwartete Ergebnisse.
"null" versteht man am Besten, wenn man es mit "unbestimmt" übersetzt.
null - irgendwas = null !!!
sum(irgendwas) = null, falls mindestens ein Wert null ist
D*B
Zitat von Fuerchau
Wobei der Anzeiger insoweit hilfreich ist festzustellen, dass keine Daten für die Summe vorhanden sind.
Similar Threads
-
By Fucasdreh in forum NEWSboard Server Job
Antworten: 0
Letzter Beitrag: 10-01-07, 13:12
-
By jakarto in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-07-06, 13:41
-
By GraueEminenz in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 10-07-06, 11:58
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 28-06-06, 14:11
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
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