27. marts 2003 - 18:25Der er
2 kommentarer og 2 løsninger
Dynamisk PL/SQL
Hej
Tabelstruktur: Tabelnavn1 Tabel består af følgende felter: felt1(varchar2), felt2(varchar2), mon1(number), mon2(number) , mon3(number) , tue1(number), tue2(number), tue3...
(1 record pr. uge - 21 timeregistreringer)
Nuvel - jeg ønsker at opbygge noget dynamisk SQL som følger:
Kodeeksempel:
vFieldName varchar2(4); vCommand varchar2(100);
for i in 1 ..7 loop
if i = 1 then vFieldName := 'mon'; elsif vFieldName := 'tue'; . . . end if;
for j in 1 .. 3 loop vFieldName := vFieldName || to_char(j); end loop;
vCommand := 'insert into tabelnavn1(vFieldname) values(10) execute immidiate vCommand;
end loop;
Ovenstående resulterer i en fejl - formodentlig da vFieldName bliver opfattet som en varchar og derfor ej stemmer overens med datatypen i fx. tabelnavn1.mon1.
Er der nogen der kan være behjælpelige med en løsning på mit problem?
Du bør anvende "Bind variable" i denne forbindelse. F. eks.
VCommand := 'insert into tablenavn2(testfield) values (:1)'; Execute IMMEDIATE VCommand USING vFieldName;
Her vil :1 (eller hvad du vælger at kalde din bind variabel) blive erstattet med vFieldName, eller rettere værdien af vFieldName. Du kan kalde dine binds hvad du end lyster, og 1. bind variabel bliver erstattet med indholdet af 1. element efter using osv.
Jeg har nu fundet en anden løsning på mit problem, men jeg takker for inputs og spltter point mellem svarene.
Håber dette er OK med jer.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.