-
SQL Stored Procedure
Hallo zusammen,
ich suche gerade eine Möglichkeit einen Fehler
( eine Bedingung ) im SQL abzufangen.
PHP-Code:
Create procedure MK/prc_atest (
INOUT IO_CODE CHAR(5) ,
INOUT IO_MSG CHAR(132) ,
IN ADBACTION CHAR(3 )
)
LANGUAGE SQL
SPECIFIC MK/prc_atest
..
..
Begin
DECLARE ASQLMSG CHAR(32740) ;
DECLARE SQLCODE INTEGER ;
DECLARE SQLSTATE CHAR(5) ;
if ( aDbaction = 'GO') THEN
-- CALL QCMDEXC('dltf mk/stpsum', 000000015.00000);
--drop table mk/stpsum ;
--if ( SQLSTATE = '42704') then
-- set io_code = 'y999' ;
--End if;
create table mk/stpsum
as( select grp as GRPSUM,
dec( sum(QTY) , 10 , 0) as SumQty ,
dec( sum(AMT) , 10 , 2) as SumAMt
FROM mk/stp GROUP BY grp)
with data ;
set IO_Code='001' ;
return 0 ;
End if;
set io_code = 'xxxx' ;
set io_Msg = 'aDbAction code ' concat adbaction concat '=';
END ;
COMMENT ON SPECIFIC PROCEDURE MK/prc_atest
IS 'SQL Procedure MK/prc_atest ' ;
Mit dieser SQL Prozedur soll die Tabelle mk/stpsum ( später weitere Tabellen )
erstellt werden.
Ich muss die Tabellen vorher Löschen
Also eine Drop Table verwenden.
Der Drop Table läuft auf eine Exception wenn die Tabelle schon da ist.
Damit das Programm weiterläuft muss diese
Bedingung abgefangen werden.
Weiß jemand wie das geht ?
Gruß
Michael
-
Code:
Create procedure MK/prc_atest (
INOUT IO_CODE CHAR(5) ,
INOUT IO_MSG CHAR(132) ,
IN ADBACTION CHAR(3 )
)
LANGUAGE SQL
SPECIFIC MK/prc_atest
..
..
Begin
DECLARE CONTINUE HANDLER FOR 2
SQLSTATE '23505';
(Wobei 23505 für den zu ersetzenden Code steht)
oder
Code:
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 1
SET vsqlcode = SQLCODE;
lg Andreas
-
Ein Continue Handler ist der richtige Weg.
Es gibt allerdings auch die Quick und Dirty-Lösung, nämlich, dass man prüft ob die Tabelle in der Catalog View SYSTABLES vorhanden ist.
Ist sie vorhanden, dann Löschen ansonsten nicht.
Code:
Declare isFound Integer;
....
Set isFound = 0;
Select 1 into isFound
From SysTables
Where System_Table_Name = 'STPSUM'
and System_Table_Schema = 'MK';
If isFound = 1 Then Drop Table MK/STPSUM;
End If;
Birgitta
-
Hallo zusammen
so klappt es:
PHP-Code:
...
...
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
Begin
set IO_Code=SQLCODE ;
End;
...
..
drop table mk/stpsum ;
set IO_Code='001' ;
set io_Msg = 'table delete ' ;
create table mk/stpsum
as( select grp as GRPSUM,
dec( sum(QTY) , 10 , 0) as SumQty ,
dec( sum(AMT) , 10 , 2) as SumAMt
FROM mk/stp GROUP BY grp)
with data ;
set IO_Code='002' ;
set io_Msg = 'table erstellt ' ;
Dieses Forum und die fachliche Kompetenz ist einfach Spitze 
Vielen Dank
Similar Threads
-
By olbe in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 19-08-08, 13:35
-
By HDPSTANEKE in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 21-06-07, 14:33
-
By rebe in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 12-10-06, 11:22
-
By florian in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 17-05-06, 16:08
-
By Jenne in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 14-06-05, 14:00
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