Einzelnen Beitrag anzeigen

Blackpit

Registriert seit: 27. Feb 2019
77 Beiträge
 
#19

AW: Strukturänderung Ja/Nein-Felder in Firebird

  Alt 9. Sep 2019, 15:07
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??

Geändert von Blackpit ( 9. Sep 2019 um 15:48 Uhr)
  Mit Zitat antworten Zitat