-
SQL-Trigger und Mixed CCSID's
Über i Access SQL-Scrips ausführen:
update V820QPRMF.CMF
set CFID = 'CF'
where CFPROD = 'ZPA04A01AAA105'
;
Ergebnis: SQL-Status: 09000 Anbietercode: -723 Nachricht: [SQL0723] SQL-Auslöser DECMF0002U in V820QPRMF ist mit SQLCODE -330 SQLSTATE 22021 fehlgeschlagen. Ursache . . . . : In einer ausgelösten SQL-Anweisung in Auslöser DECMF0002U in Schema V820QPRMF ist ein Fehler aufgetreten. Der SQLCODE ist -330, der SQLSTATE ist 22021 und die Nachricht ist Zeichenumsetzung kann nicht ausgeführt werden.. Fehlerbeseitigung: Das Jobprotokoll enthält weitere Informationen über den erkannten Fehler. Die Fehler berichtigen und die Anforderung wiederholen. Fehlgeschlagene Anweisungen: 1
Mit STRSQL in der 5250 EMU
update V820QPRMF.CMF
set CFID = 'CF'
where CFPROD = 'ZPA04A01AAA105'
Ergebnis: 72 Zeilen in CMF in V820QPRMF aktualisiert.
Definition:
Die Tabelle CMF ist eine mit DDS erstellte Standardtabelle, von der Ich den Quellcode nicht habe, aber die Erstellung des SQL-Codes bringt folgendes:
CREATE TABLE V820EPRMF.CMF(CFID CHAR(2) CCSID 37 NOT NULL DEFAULT '' ,
CFPROD CHAR(35) CCSID 937 NOT NULL DEFAULT '' ,
CFFAC CHAR(3) CCSID 37 NOT NULL DEFAULT '' ,
CFCSET DECIMAL(2, 0) NOT NULL DEFAULT 0 ,
CFCBKT DECIMAL(3, 0) NOT NULL DEFAULT 0 ,
CFTLVL DECIMAL(15, 5) NOT NULL DEFAULT 0 ,
CFPLVL DECIMAL(15, 5) NOT NULL DEFAULT 0 )
RCDFMT IPC100MF ;
-- SQL150D 10 EDTCDE in Spalte CFPLVL ignoriert.
LABEL ON TABLE V820EPRMF.CMF
IS 'Cost Master File' ;
LABEL ON COLUMN V820EPRMF.CMF
( CFID IS 'Rec Id' ,
CFPROD IS 'Item Number' ,
CFFAC IS 'Fac' ,
CFCSET IS 'Cost Set' ,
CFCBKT IS 'Dist Flg' ,
CFTLVL IS 'Std Cst/ Unt-Glbl' ,
CFPLVL IS 'Std Cst/ Unt-Glbl' ) ;
LABEL ON COLUMN V820EPRMF.CMF
( CFID TEXT IS 'Record ID; CF/CZ' ,
CFPROD TEXT IS 'Item Number' ,
CFFAC TEXT IS 'Facility' ,
CFCSET TEXT IS 'Cost Set' ,
CFCBKT TEXT IS 'Cost Bucket' ,
CFTLVL TEXT IS 'Cost This Level' ,
CFPLVL TEXT IS 'Cost Previous Level' ) ;
GRANT DELETE , INSERT , SELECT , UPDATE
ON V820EPRMF.CMF TO PUBLIC ;
GRANT ALTER , DELETE , INDEX , INSERT , REFERENCES , SELECT , UPDATE
ON V820EPRMF.CMF TO SSA WITH GRANT OPTION ;
Hat jemand eine Idee wie ich den Trigger bauen kann, damit er in beiden Fällen funktioniert?
Definitionen in SQL:
create table history_template for system name BBHST0000T(action_timestamp timestamp not null,
action_name varchar(6) not null,
system_user_id varchar(10) not null,
client_applname varchar(255) not null,
client_programid varchar(255) not null,
client_wrkstnname varchar(255) not null);
label on table history_template is 'Template For History';
create table cost_master_id_0 for system name DECMF0000T(cost_master_ID for column PO_ID bigint generated by default as identity primary key,
item_number for column CFPROD char(35) CCSID 937 not null default '',
facility for column CFFAC char(3) CCSID 37 not null default '',
cost_set for column CFCSET decimal(2, 0) not null default 0,
cost_bucket for column CFCBKT decimal(3, 0) not null default 0)
rcdfmt DECMF0000R;
label on table cost_master_id_0 is 'cost_master_id_0';
grant delete, insert, select, update on cost_master_id_0 to public;
grant delete, insert, select, update, alter, index, references on cost_master_id_0 to QPGMR with grant option;
create table cost_master_history_0 for system name DECMF0000H(cost_master_history_ID for column CFHID bigint generated by default as identity primary key,
like history_template,
cost_master_ID for column CF_ID bigint, -- from cost_master_id_0
like CMF);
label on table cost_master_history_0 is 'Table: cost_master_history_0';
insert into cost_master_id_0(item_number,
facility,
cost_set,
cost_bucket)
select CFPROD,
CFFAC,
CFCSET,
CFCBKT
from CMF;
insert into cost_master_history_0 (action_timestamp,
action_name,
system_user_id,
client_applname,
client_programid,
client_wrkstnname,
cost_master_ID,
CFID,
CFPROD,
CFFAC,
CFCSET,
CFCBKT,
CFTLVL,
CFPLVL)
select current_timestamp,
'init',
user,
current client_applname,
current client_programid,
current client_wrkstnname,
(select cost_master_ID from cost_master_id_0 where item_number = CMF.CFPROD and facility = CMF.CFFAC and cost_set = CMF.CFCSET and cost_bucket = CMF.CFCBKT),
CMF.CFID,
CMF.CFPROD,
CMF.CFFAC,
CMF.CFCSET,
CMF.CFCBKT,
CMF.CFTLVL,
CMF.CFPLVL
from CMF as CMF;
create view cost_master for system name DECMF0001V as (select CMI.cost_master_ID,
CMF.*
from cost_master_id_0 as CMI
left join CMF as CMF
on CMI.item_number = CMF.CFPROD
and CMI.facility = CMF.CFFAC
and CMI.cost_set = CMF.CFCSET
and CMI.cost_bucket = CMF.CFCBKT);
label on table cost_master is 'View: cost_master';
create trigger DECMF0000U after insert on CMF referencing new as nnn for each row mode db2sql
insert into cost_master_id_0 values(default,
nnn.CFPROD,
nnn.CFFAC,
nnn.CFCSET,
nnn.CFCBKT);
label on trigger DECMF0000U is 'TRIGGER: cost_master_id_0 insert';
create trigger DECMF0001U after insert on CMF referencing new as nnn for each row mode db2sql
insert into cost_master_history_0 values(default,
current_timestamp,
'update',
user,
current client_applname,
current client_programid,
current client_wrkstnname,
(select cost_master_ID from cost_master_id_0 where item_number = nnn.CFPROD and facility = nnn.CFFAC and cost_set = nnn.CFCSET and cost_bucket = nnn.CFCBKT),
nnn.CFID,
nnn.CFPROD,
nnn.CFFAC,
nnn.CFCSET,
nnn.CFCBKT,
nnn.CFTLVL,
nnn.CFPLVL);
label on trigger DECMF0001U is 'TRIGGER: CMF insert';
create trigger DECMF0002U after update on CMF referencing new as nnn old as ooo for each row mode db2sql
insert into cost_master_history_0 values(default,
current_timestamp,
'update',
user,
current client_applname,
current client_programid,
current client_wrkstnname,
(select cost_master_ID from cost_master_id_0 where item_number = nnn.CFPROD and facility = nnn.CFFAC and cost_set = nnn.CFCSET and cost_bucket = nnn.CFCBKT),
nnn.CFID,
nnn.CFPROD,
nnn.CFFAC,
nnn.CFCSET,
nnn.CFCBKT,
nnn.CFTLVL,
nnn.CFPLVL);
label on trigger DECMF0002U is 'TRIGGER: CMF update';
create trigger DECMF0003U after delete on CMF referencing old as ooo for each row mode db2sql
insert into cost_master_history_0 values(default,
current_timestamp,
'delete',
user,
current client_applname,
current client_programid,
current client_wrkstnname,
(select cost_master_ID from cost_master_id_0 where item_number = ooo.CFPROD and facility = ooo.CFFAC and cost_set = ooo.CFCSET and cost_bucket = ooo.CFCBKT),
ooo.CFID,
ooo.CFPROD,
ooo.CFFAC,
ooo.CFCSET,
ooo.CFCBKT,
ooo.CFTLVL,
ooo.CFPLVL);
label on trigger DECMF0003U is 'TRIGGER: CMF delete';
create trigger DECMF0004U after delete on CMF referencing old as ooo for each row mode db2sql
delete cost_master_id_0 where item_number = ooo.CFPROD and facility = ooo.CFFAC and cost_set = ooo.CFCSET and cost_bucket = ooo.CFCBKT;
label on trigger DECMF0004U is 'TRIGGER: CMF delete';
-
Ach ja, die JDBC-Konfiguration sieht für die Umsetzung so aus:
-
Hast Du mal versucht in ACS die Job-Umgebung zu setzen?
Code:
CL:CHGJOB LANGID(ENU) CNTRYID(US) CCSID(37);
Birgitta
-
Das passiert häufig dann wenn das System z.B. auf CCSID 65535 steht. Dann versucht SQL den QZDAJOB auf eine CCSID von der Sprachid des Systems abzuleiten, da SQL per ODBC/JDBC grundsätzlich eine CCSID hat.
Schau dir im Joblog auf jeden Fall die weiteren Fehler an:
WRKOBJLCK USERNAME *USRPRF => QZDASOINIT-Job.
-
Das ist die einzige Meldung die im Joblog zu finden ist:
SQL-Auslöser DECMF0002U in V820QPRMF ist mit SQLCODE -330 SQLSTATE 22021 fehlgeschlagen.
Zeichenumsetzung kann nicht ausgeführt werden.
QCCSID steht auf:
Systemwert anzeigen
Systemwert . . . . . . : QCCSID
Beschreibung . . . . . : ID des codierten Zeichensatzes
ID des codierten
Zeichensatzes (CCSID): 65535 1-65535
QCHRID ist wie folgt eingestellt:
Systemwert anzeigen
Systemwert . . . . . . : QCHRID
Beschreibung . . . . . : Grafikzeichensatz und Codepage
Zeichensatz-ID . . . . : 697 1-32767
Codepage . . . . . . . : 273 1-32767
Wir sind ein Unternehmen, dass mit der Amerikanischen Zentrale kommuniziert.
Ich habe auch das Phämomen, das die Umlaute in der Anwendung (altes BPCS) richtig angezeigt wird und im SQL-Ergebnis in iAccess sind die Umlaute wie folgt:
'{','ä'
'¢','Ä'
'¦','ö'
'\','Ö'
'}','ü'
'!','Ü'
'~','ß'
-
Hallo Birgitta,
nein, hab ich noch nicht, danke für den Hinweiß.
Kann ich das auch permanent für den QZDASOINIT setzten?
Ich werde es heute im laufe des Tages mal ausprobieren.
-
Da du was von alter Anwendung sagst, dann prüfe bitte die CCSID der Dateien/Tabellen.
Dein Problem ist die System-CCSID 65535 die auch für deine normalen Jobs übernommen wird.
Da erfolgt dann keine Codewandlung, deshalb klappts auch per STRSQL oder embedded SQL.
Per ODBC wird die Job-CCSID
a) aus dem Systemwert QCCSID genommen,
b) wenn 65535 dann passend aus QLANGID übernommen.
Welche CCSID hat nun der Job QZDASOINIT?
Welche CCSID haben die Datein/Tabellen?
Dein Problem ist die CCSID 937!
Ist das u.U. ein Tippfehler?
Du kannst in einem Job nicht 2 inkompatible CCSID's gleichzeitig verarbeiten, da die Tabellen-CCSID in die Job-CCSID umgewandelt werden muss.
Dein Dialog-Job mit CCSID 65535 macht keine Umwandlung (was meist Schrott bedeutet), der SQL-Job macht immer eine Umwandlung.
-
CCSID 937! ist kein Tippfehler
Alle kurzen (aber nicht einheitlich z.B. 5 Byte) haben CCSID 37 und länger CCSID 937
Das ist von BPCS so erstellt, warum auch immer.
-
Wenn du das Joblog des QZDASOINIT ansiehst (während die Verbindung noch steht), muss es noch weitere Meldungen geben, welche CCSID nicht umgesetzt werden kann.
Similar Threads
-
By Juergen in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 08-08-19, 11:57
-
By mk in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 24-04-18, 15:34
-
By Sebastian85 in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 11-03-15, 07:26
-
By lorenzen in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 11-01-02, 13:49
-
By Frank Pusch in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 17-05-01, 09:34
Tags for this Thread
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