Het bericht error occurred at recursive SQL level 1
suggereert mij dat de fout zich voordoet binnen een trigger. Ik vermoed dat er een AFTER LOGON ON SCHEMA
. is of DATABASE
trigger, en om de een of andere reden veroorzaakt het een fout wanneer uw webserverproces verbinding probeert te maken.
Hier is een voorbeeld van hoe u de fout kunt genereren die u krijgt. Ik heb een tabel genaamd TINY
, met een enkele kolom die alleen waarden tot 99 kan aannemen:
SQL> desc tiny; Name Null? Type ----------------------------------------- -------- ---------------------------- N NUMBER(2)
Laten we nu een gebruikersaccount maken en controleren of ze verbinding kunnen maken:
SQL> create user fred identified by fred account unlock; User created. SQL> grant connect to fred; Grant succeeded. SQL> connect fred/fred Connected.
Goed - laten we opnieuw inloggen als ik en een trigger maken die een fout veroorzaakt als FRED
probeert verbinding te maken:
SQL> connect luke/password Connected. SQL> create or replace trigger after_logon_error_if_fred 2 after logon on database 3 begin 4 if user = 'FRED' then 5 insert into tiny (n) values (100); 6 end if; 7 end; 8 / Trigger created.
Bedenk dat onze TINY
tabel kan alleen waarden tot 99 opslaan. Dus, wat gebeurt er als FRED
probeert verbinding te maken?
SQL> connect fred/fred ERROR: ORA-00604: error occurred at recursive SQL level 1 ORA-01438: value larger than specified precision allowed for this column ORA-06512: at line 3
Afgezien van het regelnummer en de bit die PHP heeft toegevoegd, is dat precies de boodschap die je kreeg.
Als u wilt zien of er AFTER LOGON
triggers in uw database, probeer de query uit te voeren
SELECT trigger_name, owner FROM all_triggers
WHERE TRIM(triggering_event) = 'LOGON';
Op mijn database (Oracle 11g XE beta) krijg ik de volgende output:
TRIGGER_NAME OWNER ------------------------------ ------------------------------ AFTER_LOGON_ERROR_IF_FRED LUKE
Ik geloof niet dat Oracle out-of-the-box logt, en het zou me verbazen als PHP's oci_connect
doet ook niet.
Ik kan alleen maar speculeren waarom de fout zich alleen voordoet voor uw webserver en niet wanneer u PHP uitvoert vanuit een bash-script. Misschien zoekt de trigger V$SESSION
en probeert u erachter te komen welk gebruikersaccount verbinding probeert te maken met de database?