Hallo,
muss mich leider nochmal melden.
Vergleichstabelle erstellt und Prozedur im Einzelschrittmodus getestet.
Läuft wie programmiert, sobald ich sie jedoch fertig laufen lasse bekomme ich
Zitat:
multiple rows in singleton select.
At procedure 'GETALLDETAILS' line: 24, col: 7.
Die Prozedur hat aber nur 22 Zeilen
Proc GETALLDETAILS wir in Proc GETCOMPDETAILS gerufen.
GETALLDETAILS
Code:
begin
for select COMP_ID
from COMP_AUS
group by COMP_ID
into :MYID
do
begin
for select F.RDB$RELATION_NAME, F.RDB$FIELD_NAME
from RDB$RELATION_FIELDS F
join RDB$RELATIONS R on F.RDB$RELATION_NAME = R.RDB$RELATION_NAME and R.RDB$VIEW_BLR is null and (R.RDB$SYSTEM_FLAG is null or R.RDB$SYSTEM_FLAG = 0)
where (upper(F.RDB$RELATION_NAME) starting with upper('COMP_AUS')) and
(upper(F.RDB$FIELD_NAME) containing upper('_JN'))
order by 1, F.RDB$FIELD_POSITION
into :TABLE_NAME, :COLUMN_NAME
do
begin
execute statement 'select cast(' || COLUMN_NAME || ' as varchar(100)) from ' || TABLE_NAME || ' where COMP_ID =' || MYID
into :COLUMN_VALUE;
suspend;
end
end
end
GETCOMPDETAILS
Code:
create or alter procedure GETCOMPDETAILS (
MYID integer,
COLUMN_NAME varchar(100) character set UTF8,
COLUMN_VALUE varchar(100) character set UTF8)
as
declare variable DET_ID integer;
declare variable BEZEICH varchar(100) character set UTF8;
begin
for select first 1 myID, column_name, column_value /*<--- multiple rows fehler beseitigt */
from GETALLDETAILS
where UPPER(COLUMN_VALUE) = UPPER('j')
into myid, column_name, column_value
do
begin
select Bezeichnung from dmchange where Field_Name = :column_name into :Bezeich;
if (column_name not CONTAINING 'xxx') then
begin
select AUS_DET_ID from comp_aus_detail where Bezeichnung = :Bezeich into :DET_ID;
if (bezeich <> '' and det_id is null) then
begin
Insert into comp_aus_detail (bezeichnung) Values (:Bezeich) returning aus_det_id into :det_id;
suspend;
end
if (det_id is not null) then
insert into comp_kat_details (KAT_ID,DET_ID,KID_ID) values (1,:DET_ID,:myid);
end
end
end;
GETALLDETAILS läuft alleine durch und liefert die gewünschten Daten ohne Fehlermeldung.
Woran kann das liegen?
Nachtrag: Den Fehler habe ich mit "First 1" im Select wegbekommen (Datenlage), aber scheibar wird nicht commitet, Tabelle wird nicht gefüllt??