![]() |
AW: Strukturänderung Ja/Nein-Felder in Firebird
Hallo,
hier beide komplett: GETALLDETAILS
Code:
GETCOMPDETAILS
SET TERM ^ ;
create or alter procedure GETALLDETAILS returns ( MYID integer, TABLE_NAME varchar(100) character set UTF8, COLUMN_NAME varchar(100) character set UTF8, COLUMN_VALUE char(100) character set UTF8) as 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^ SET TERM ; ^ GRANT SELECT ON COMP_AUS TO PROCEDURE GETALLDETAILS; GRANT EXECUTE ON PROCEDURE GETALLDETAILS TO MYDB;
Code:
Erste Proc allein liefert wie gewünscht.
SET TERM ^ ;
create or alter procedure GETCOMPDETAILS as declare variable DET_ID integer; declare variable BEZEICH varchar(100) character set UTF8; declare variable MYID integer; declare variable COLUMN_NAME varchar(50) character set UTF8; begin for select myID, column_name from GETALLDETAILS where UPPER(COLUMN_VALUE) = UPPER('j') into myid, column_name do begin if (column_name not CONTAINING 'xxx') then begin select Bezeichnung from dmchange where Field_Name = :column_name into :Bezeich; select AUS_DET_ID from comp_aus_detail where Bezeichnung = :Bezeich into :DET_ID; if (bezeich is null and det_id is null) then begin Insert into comp_aus_detail (bezeichnung) Values (:Bezeich) returning aus_det_id into :det_id;/*return gen_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;^ SET TERM ; ^ GRANT EXECUTE ON PROCEDURE GETALLDETAILS TO PROCEDURE GETCOMPDETAILS; GRANT SELECT ON DMCHANGE TO PROCEDURE GETCOMPDETAILS; GRANT SELECT,INSERT ON COMP_AUS_DETAIL TO PROCEDURE GETCOMPDETAILS; GRANT INSERT ON COMP_KAT_DETAILS TO PROCEDURE GETCOMPDETAILS; GRANT EXECUTE ON PROCEDURE GETCOMPDETAILS TO MYDB; Im Einzelschritt läüft GETCOMPDETAILS auch wie es soll. Wenn ich es durchlaufen lasse nicht mehr:? Ich dachte erst an Feldnamendoppellungen welche auch existieren, erklären kann ich es mir nicht. |
AW: Strukturänderung Ja/Nein-Felder in Firebird
Zitat:
Nur wenn die Felder Field_Name und Bezeichnung (die ja die einzige Einschränkung sind) unique sind und idealer Weise auch so deklariert sind, dann kann das select immer funktionieren. Wenn das Datenmodell an der Stelle keine Eindeutigkeit garantiert, brauchst Du weitere Felder zur Einschränkung, bis sichergestellt ist, dass immer 1 oder auch kein Datensatz als Ergebnis kommt. |
AW: Strukturänderung Ja/Nein-Felder in Firebird
Zitat:
|
AW: Strukturänderung Ja/Nein-Felder in Firebird
Stimmt!
Schien mir in dem Zusammenhang nicht sinnvoll, aber es behebt den Fehler. |
AW: Strukturänderung Ja/Nein-Felder in Firebird
Ob, es sinnvoll ist steht auf einem anderen Blatt.
|
AW: Strukturänderung Ja/Nein-Felder in Firebird
Zitat:
Aber auch mit eleminierten Feldnamendoppellungen (Eindeutigkeit in der Vergleichstabelle) laufe ich auf den Fehler. Ich gehe davon aus, das Ergebnis der ersten Proc als Resultset zu bekommen, welches ich in der zweiten abarbeiten kann. Im Debugmodus läuft es ja! Die Einschränkung des Resultsets über die Felder dessen Value 'j' ist erzeugt ein neues RS was mir dann scheinbar das Problem macht. Ansonsten müsste ich den Fehler doch schon beim ausführen der ersten Proc bekommen, oder irre ich mich da? |
AW: Strukturänderung Ja/Nein-Felder in Firebird
es hindert dich eigentlich auch niemand daran, statt der variablen die werte in rückgabe parameter zu packen und bei jedem vorgang einen supend einzuwerfen,mit dem du dann sehen kannst, wie weit der kommt. Es bringt aber nichts, auf Hilfe zu hoffen, wenn kein anderer deine Daten hat.
|
AW: Strukturänderung Ja/Nein-Felder in Firebird
Zitat:
Und IBExpert hat Recht mit seinen Hinweisen: 1. niemand hier hat Deine Daten und eine Struktur, die Eindeutigkeit sicherstellt gibt es ja so offenbar nicht. (Dafür sind Datenmodelle eigentlich da) Also folgt: alles ist möglich 2. Die Nutzung von SP ohne Parameter ist schon etwas fraglich. Also wenn schon "funktionale Programmierung" in SQL, wieso nicht gleich mit Eingangsparameter? Ich habe mir das "Innenleben" der SP noch nicht so wirklich angeschaut, aber woher soll in der SP Getalldetails die Dynamik kommen? Befüllst Du die Tabelle Comp_Aus vorher unterschiedlich? |
AW: Strukturänderung Ja/Nein-Felder in Firebird
Zitat:
Mit Ausgabeparameter und suspend hab ich es hinbekommen! Danke an alle! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz