Autor Beitrag
BerndW
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 26.08.03 10:55 
Hallo,

ich hab ein kleines Problem. Ich möchte in meiner PL/SQL Procedure einen Tabellennamen und eine Spaltenwert dynamisch ersetzen.
Das mit dem Wert funktioniert. Bloß beim Ersetzen des Tabellennamen
macht der Compiler Probleme.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
CREATE or replace PROCEDURE Arbeit_INSERT 
(TABELLENNAME in VARCHAR2,
WERT in Varchar2)
is 
Begin

Insert into T_Arbeit
(runid,
lotlogid,
slot,
lfd_nr)
Select rd.runid,
rd.lotlogid,
rd.slotnumber,
s_pvd_end_4551_waferlogistic.nextval
from TABELLENNAME  rd,
and rd.batchid = WERT;

end;
/


Was ist an der Syntax falsch?
Ich hoffe ihr könnt mir helfen.

Gruß
Bernd
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Di 26.08.03 11:10 
Ist das Interbase? Dann funktioniert glaub ich schon mal "CREATE or replace" nicht, Du musst "ALTER PROCEDURE" schreiben. Und das "IS" muss "AS" heißen.
Die Felddeklarationen stimmen auch nicht, muss z.B.
wert VARCHAR(2) heißen.

Soweit so gut, welche Fehler bringt er denn genau?
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Di 26.08.03 11:38 
Hallo,

du musst auf jeden fall

...
from :Tabellenname rd
and rd.batchid = :Wert

schreiben. Man achte auf die Doppelpunkte. Wenn es interbase ist, kommt noch hinzu, daß du den Tabellennamen nicht variabel machen kannst.

Gruß
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
BerndW Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 26.08.03 11:58 
Also ich nutze Oracle PL/SQL. Also "CREATE or replace" funktioniert und IS und AS sind Synonyme. Auch die Doppelpunkte vor den Variablen dürfen nicht sein. Es funktioniert alles wunderbar wenn ich den Tabellennamen fest schreibe (Die Wert Variable aber noch besteht).
Ich muß den Namen jedoch übergeben.
Leider hab ich bloß SQL Plus wo er mir keine genauen Fehlermeldung bei den Proceduren ausgibt.
"Warnung: Prozedur wurde mit Kompilierungsfehlern erstellt."

Ich müßte dieses SQL Statement wohl erst als String zusammenbauen und dann irgendwie ausführen, da er sonst die Richtigkeit des SQL Statements überprüft und meine Variable als Tabellennamen ansieht.

Hab ihr vielleicht noch ne Idee?
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Di 26.08.03 12:02 
OK, dann ist das was anders. Aber ich hab dasselbe Problem unter IB mit variablen Feldern usw. Und musste feststellen, dass es von IB gar nicht vorgesehen ist. Firebird soll demnächst sowas unterstützen, bei Oracle weiß ich es gerade nicht... aber ich schau mal, vll. finde ich was raus.