| |||
![]() Alguien sabe a que se debe este error me aparece cuando intento extraer la clave de una base de datos despues de un insert, lo que debe extraer es una cve asignada automaticamente dentro de la misma tabla |
| ||||
Y como estas haciendo ese proceso? Poné el código así podemos ver como lo haces... PD: Lo pregunto por que es un proceso que no debe consumir absolutamente nada.
__________________ Mi punto de partida es Que Bueno Lo Nuevo |
| |||
Cita: //llamada a funcion insertar en maestro
Iniciado por nicolaspar Y como estas haciendo ese proceso? Poné el código así podemos ver como lo haces... PD: Lo pregunto por que es un proceso que no debe consumir absolutamente nada. inserta_maestro($dbh2,$num_requisicion,$nuevafecha ,$adscripcion); //llamada a funcion extrae clave $cve_requisicion=extrae_cve($dbh2, $num_requisicion); //llamada a funcion inserta detalle inserta_detalle($dbh2,$cve_requisicion,partida1,$d escripcion1,$cantidad1,$unidad1); inserta_detalle($dbh2,$cve_requisicion,partida2,$d escripcion2,$cantidad2,$unidad2); //funcion Inserta maestro function inserta_maestro($dbh,$i_nreq, $i_fecha, $i_adscripcion){ $sql = "INSERT into BS_REQUISICION (num_req,fecha_elab, cve_area) values(:val1, :val2, :val3)"; $stmt = OCIParse($dbh, $sql); if (!$stmt) { require("inserta2.htm"); } else { oci_bind_by_name($stmt, ':val1', $i_nreq); oci_bind_by_name($stmt, ':val2', $i_fecha); oci_bind_by_name($stmt, ':val3', $i_adscripcion); OCIExecute($stmt); } } //funcion inserta detalle function inserta_detalle($dbh1,$v2_1, $v2_2, $v2_3,$v2_4,$v2_5){ $sql2 = 'INSERT into BS_REQ_DET (CVE_REQ, NUM_PARTIDA, DESCRIPCION, CANTIDAD, UNIDAD)values(:val2_1, :val2_2, :val2_3,:val2_4,:val2_5)'; $stmt2 = OCIParse($dbh1, $sql2); if (!$stmt2) { require ("inserta2.htm"); } else { oci_bind_by_name($stmt2, ':val2_1', $v2_1); oci_bind_by_name($stmt2, ':val2_2', $v2_2); oci_bind_by_name($stmt2, ':val2_3', $v2_3); oci_bind_by_name($stmt2, ':val2_4', $v2_4); oci_bind_by_name($stmt2, ':val2_5', $v2_5); OCIExecute($stmt2); } } el error es marcado en la siguiente función en oi execute //funcion extrae clave function extrae_cve($dbh3,$n_reqs){ while($valor==NULL){ $sql3 = 'SELECT CVE_REQ FROM BS_REQUISICION WHERE NUM_REQ=:N_REQ'; $stmt3 = OCIParse($dbh3, $sql3); oci_bind_by_name($stmt3, ':N_REQ', $n_reqs); OCIExecute($stmt3); while ($row = oci_fetch_array ($stmt3, OCI_NUM)) { $valor=$row[0]; } } return $valor; } |
| ||||
Es un código muy cerrado y confuso, tendrías que debuguear la classe oci....que espero estes entendiendo. Te comento por si te ayuda, no si si lo sabes, para sacar un id insertado en mysql haces: Código PHP:
__________________ Mi punto de partida es Que Bueno Lo Nuevo |
| |||
el problema es que el id que requiero recuperar es uno que es asignado automaticamente por el triger despues de haber hecho el insert en la tabla maestro si este me regresa un nulo no puede ser insertado el registro en la tabla detalle y es lo que me obligo a poner el while externo en la funcion extrae_cve sin ese ciclo la aplicacion no marca error en algunos equipos pero en otros tantos manda un error de oracle en el que dice que no se puede insertar un "null" en cierto campo de la tabla |
| ||||
No llego a comprender bien tu problema, aparte que hace mil que no uso oci_xxx. Fijate en php.net si tenes alguna función que te simplifique las cosas.
__________________ Mi punto de partida es Que Bueno Lo Nuevo |