php oracle oci_bind_by_name (and more)
am 18.01.2005 16:13:31 von Ichierhi, bin neu in oracle
habe einen table mit trigger und sequence erstellt
funkioniert
möchte den rückgabewert der sequence in php haben
bekomme aber (var_dump) einen string "2", was (als zahl) die aktuelle länge
des zurückzugebenden integer ist
wo liegt der fehlerteufel?:
$query = "INSERT INTO ichier_user (name,utp,spt) VALUES ('php',3,'muh')
RETURNING ORA_AUTO_INC INTO :ORA_AUTO_INC";
$result = oci_parse($db_connect,$query);
oci_bind_by_name($result,":ORA_AUTO_INC",$autoinc);
oci_execute($result);
echo "
id=".$autoinc."
";
var_dump($autoinc);
FRAGE 2:
Des weiteren möchte ich die Rückgabe eigenltich atoatisieren, spich von der
db bestimen lassen, da die php-applikation nicht weiß ob jenes zu bindende
feld existiert
kann man also das RETURNING in den Trigger schreiben? wenn ja - wie?
und ist es weiterhin möglich diesen wert dann zu binden
und ist es letztendlich auch dann it der gleichen methode möglich wenn kein
trigger einen wert zurückgibt ohne daß es zu größeren phperrors kommt? - wie
gesagt das scripct weiß nicht ob es eine rückgabe gibt und würde immer
versuchen ora_auto_inc zu binden, im negativen fall false ausgeben
-> im prinzip alles nur eine emulation von mysql_insert_id()
FRAGE 3:
es sollen in die tables auch manuell daten eingefügt werden können, die
bereits einen wert haben, der sonst via sequence vergeben wid
ich habe versucht im trigger eine if bedingung einzubauen, die in dem fall
den wert der sequence erhöht, bekomme aber einen eror das alter nicht
erwarttet wurde aber alles mögliche andere
weiß allerdings nich genau wie die syntax für ifs etc in oracles plsql ist
habe oracle 9i
mein trigger wäre:
CREATE OR REPLACE TRIGGER ichier_user_ainctrig
before insert on ichier_user
for each row
begin
if :new.usr is null then
select ichier_user_aincseq.nextval into :new.usr from
sys.dual;
select ichier_user_aincseq.currval into :new.ora_auto_inc
from sys.dual;
else
SELECT ichier_pages_aincseq.currval into tmp FROM sys.dual;
if :new.usr >= tmp then
alter sequence ichier_user_aincseq increment by
(:new.usr-tmp);
end if;
end if;
end;
ok soweit - wär super wenn mir wer helfen könnte, der ganze oraclekram wird
mir nämlich allmählich zu mühsam