-
procedur in sql verwenden
Hi,
ich habe mit
Code:
CREATE PROCEDURE MyLib/ADD_1 (
OUT no1 decimal(9)) LANGUAGE SQL MODIFIES SQL
DATA BEGIN set no1 = (select count(*) from MyFile); end
eine Procedur erstellt
Hintergrund: Ich will mit SQL in die leere Datei MyFile Sätze hineinschreiben und habe als LFD-Zähler die anzahl Sätze in der Datei.
Der Aufruf über
insert into MyFile select f1, f2 ..., ADD_1(), Fx from ...
gibt mir ein
Code:
Nachrichten-ID . . . . : SQL0204 Bewertung . . . . . . : 30
Nachrichtenart . . . . : Diagnose
Sendedatum . . . . . . : 03.03.11 Sendezeit . . . . . . : 12:24:39
Nachricht . . . : ADD_1 der Art *N in *LIBL nicht gefunden.
Ursache . . . . : ADD_1 der Art *N in *LIBL wurde nicht gefunden. Ist der
Teildateiname *ALL, ist die Tabelle nicht partitioniert. Handelt es sich um
eine Anweisung ALTER TABLE und ist die Art *N, wurde eine
Integritätsbedingung oder Partitionierung nicht gefunden. Ist dies keine
Anweisung ALTER TABLE und ist die Art *N, wurde eine Funktion, eine
Prozedur, ein Auslöser oder ein Sequenzobjekt nicht gefunden.
Wurde eine Funktion nicht gefunden, ist ADD_1 das Serviceprogramm, das die
Funktion enthält. Die Funktion wird nur gefunden, wenn der externe Name und
der Verwendungsname exakt übereinstimmen. Im Jobprotokoll nach einer
Nachricht suchen, die weitere Einzelheiten über den gesuchten Funktionsnamen
und den nicht übereinstimmenden Namen enthält.
Da ich noch nie wirklich etwas mit Proceduren / funktionen gemacht habe, stehe ich etwas auf dem Schlauch.
Was ist der Fehler ?
(Liblist stimmt natürlich, die Procedur müßte gefunden werden)
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Hi Robi,
SQL Proceduren kannst du nur mit einer CALL Anweisung aufrufen. Das was du brauchst ist eine SQL Function:
Code:
CREATE FUNCTION MYLIB.FUNC1 ()
RETURNS INT
LANGUAGE SQL
RETURN (Select Count(*) From ...);
Diese kannst du dann wie in deinem Beispiel auch innerhalb anderer Anweisungen verwenden.
lg
Last edited by andreaspr@aon.at; 03-03-11 at 11:49.
Grund: Beim RETURN haben die Klammern gefehlt
-
Prima, das funktioniert, danke
Noch ne Frage,
wenn ich das etwas allgemeingültiger halten will, kann ich den Dateienamen als Parm weggeben ?
etwa so :
Code:
CREATE FUNCTION MYLIB.FUNC1 (Datei)
RETURNS INT
LANGUAGE SQL
RETURN (Select Count(*) From :datei);
SO geht es nicht, kann man das überhaubt ?
Danke
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Sch... ade, zu früh gefreut
Anscheinend bringt die Funktion immer den selben Wert zurück.
lt Joblog hab ich endlos doppelte Sätze versucht zu schreiben
Nur einer mit der lfdnr = 0 ist geschrieben worden.
noch ne idee ?
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Code:
Insert into MyFile select f1, f2 ..., ADD_1(), Fx from .
Die Frage ist, warum Du dafür überhaupt eine Funktion brauchst.
Wenn's nur um einen laufenden Zähler geht, geht das mit einer Sequence genauso.
1. Sequence erstellen
Code:
Create Sequence MySchema/MySeq As Decimal(9, 0);
2. Insert Statement:
Code:
Insert Into MyFile
Select F1, F2, F3, ...., Next Value for MySeq from ...
3. Sequence löschen
Code:
Drop sequence MySchema/MySeq
Oder noch einfacher mit der Funktion Row_Number:
Code:
Insert into MyFile
Select Row_Number() Over() as lfd, Fld1, Fld2, Fld3 .... From ...
Birgitta
-
@Birgitta
Das kannte ich nur 'vom hören sagen'
Ich hab im Hinterkopf das es erst ab V6R1 geht
Ich habs nun mit der sequence gemacht (V5R4) und es geht
!!
Danke
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
Similar Threads
-
By christian_lettner in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 16-11-06, 10:15
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By malzusrex in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 19-09-06, 11:04
-
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