Code:
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
Und das sind noch mehr select..into mit dem gleichen Problem. Und das Group By in dem Select ist schon ein Schritt in die richtige Richtung, garantiert aber keinen Datensatzanzahl < 2.
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?