Ich habe also eine PHP-Funktion, die einige Variablen an einen Aufruf einer gespeicherten Oracle-Prozedur übergibt. Sie können zum Senden mehr als eine Option auf dem Bildschirm auswählen, sodass Sie beispielsweise Option A, B und C auswählen und auf „Senden“ klicken und eine foreach-Schleife durch jede Option verwenden und die Daten an den Aufruf für den gespeicherten Prozess
übergeben können. Jetzt kommt der Teil, der mich verwirrt. Ich habe genau 500 Optionen. Wenn ich also 300 oder mehr wähle und Oracle absende, wird mir ein ORA-01000 angezeigt: Maximale Anzahl offener Cursor überschritten (ich weiß, dass mein Oracle-Cursor-Limit in diesem speziellen Fall 300 beträgt). Ich habe in der Prozedur einen Cursor verwendet, aber ich dachte, implizite Cursor würden sich von selbst schließen. Selbst wenn ich den Cursor aus der Prozedur entferne, wird mir immer noch der Fehler angezeigt.
Dies ist der PHP-Codeblock, der das Paket aufruft
Code: Select all
foreach($data['option'] as $val)
{
$query = "BEGIN FIRST_PKG.Add_CUST_OPTION'$USER_ID','1',$val,sysdate,'$CUST_ID','$STORE_id'); END;";
$this->db->query($query);
if($this->db->execute()) {
} else {
echo "insert fail";
}
}
Dies ist das Oracle-Paket
Code: Select all
PROCEDURE Add_CUST_OPTION(
V_USER_ID IN BUSTAR.USERS.USER_ID%TYPE,
V_STATUS_ID IN BUSTAR.USERS.STATUS_ID%TYPE,
V_OPTION_ID IN BUSTAR.USERS.OPTION_ID%TYPE,
V_CDATE IN BUSTAR.USERS.CDATE_ID%TYPE,
V_CUSTO_ID BUSTAR.USERS.CUSTOMER_ID%TYPE,
)
IS
BEGIN
UPDATE BUSTAR.USERS
SET
OPTION_ID= V_OPTION_ID,
STATUS_ID= V_STATUS_ID,
CDATE_ID= V_CDATE,
UPDATED_BY = V_USER_ID,
CUSTOMER_ID= CUSTOMER_ID
WHERE USER_ID= V_USER_ID ;
END Add_CUST_OPTION;
Ich weiß nicht viel über Cursor, also gehe ich davon aus, dass ich hier etwas übersehe?
Jede Hilfe ist willkommen!!