1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-25 16:02:13 +01:00
Files
archived-doc-es/reference/oci8/examples.xml
Pedro Antonio Gil Rodríguez 46006e7eff Actualización a la últma versión
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@333755 c90b9560-bf6c-de11-be94-00142212c4b1
2014-06-11 11:40:58 +00:00

368 lines
8.9 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: a48bfbee2a121bdf25ceee2946aa27728e611365 Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="oci8.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
&reftitle.examples;
<para>
En estos ejemplos se realiza la conexión con el usuario <literal>HR</literal>, que es
el esquema de ejemplo &quot;Human Resources&quot; proporcionado con la
base de datos Oracle. Podría ser necesario desbloquear la cuenta y
reiniciar la contraseña antes de poder usarla.
</para>
<para>
Los ejemplos se conectan a la base de datos <literal>XE</literal> de su
máquina. Cambie la cadena de conexión a su base de datos antes de ejecutar
los ejemplos.
</para>
<example>
<title>Consulta básica</title>
<para>
Este ejemplo muestra la realización de consultas y la visualización de resultados. Las sentencias
en OCI8 usan la secuencia de pasos 'preparación-ejecución-obtención'.
</para>
<programlisting role="php">
<![CDATA[
<?php
$conexión = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conexión) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// Preparar la sentencia
$stid = oci_parse($conexión, 'SELECT * FROM departments');
if (!$stid) {
$e = oci_error($conexión);
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// Realizar la lógica de la consulta
$r = oci_execute($stid);
if (!$r) {
$e = oci_error($stid);
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// Obtener los resultados de la consulta
print "<table border='1'>\n";
while ($fila = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
print "<tr>\n";
foreach ($fila as $elemento) {
print " <td>" . ($elemento !== null ? htmlentities($elemento, ENT_QUOTES) : "") . "</td>\n";
}
print "</tr>\n";
}
print "</table>\n";
oci_free_statement($stid);
oci_close($conexión);
?>
]]>
</programlisting>
</example>
<example>
<title>Inserción con variables vinculadas</title>
<para>
Las variables vinculadas mejoran el rendimiento permitiendo la reutilización de contextos
ejecutados y cachés. Las variables vinculadas mejoran la seguridad previniendo
algunos tipos de problemas de Inyecciones SQL.
</para>
<programlisting role="php">
<![CDATA[
<?php
// Antes de ejecutarlo, cree la tabla:
// CREATE TABLE MYTABLE (mid NUMBER, myd VARCHAR2(20));
$conexión = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conexión) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$stid = oci_parse($conexión, 'INSERT INTO MYTABLE (mid, myd) VALUES(:myid, :mydata)');
$id = 60;
$datos = 'Algunos datos';
oci_bind_by_name($stid, ':myid', $id);
oci_bind_by_name($stid, ':mydata', $datos);
$r = oci_execute($stid); // ejecuta y consigna
if ($r) {
print "Una fila insertada";
}
oci_free_statement($stid);
oci_close($conexión);
?>
]]>
</programlisting>
</example>
<example>
<title>Vincular la cláusula WHERE a una consulta</title>
<para>
Lo siguiente muestra una vinculación escalar única.
</para>
<programlisting role="php">
<![CDATA[
<?php
$conn = oci_connect("hr", "hrpwd", "localhost/XE");
if (!$conn) {
$m = oci_error();
trigger_error(htmlentities($m['message']), E_USER_ERROR);
}
$sql = 'SELECT last_name FROM employees WHERE department_id = :didbv ORDER BY last_name';
$stid = oci_parse($conn, $sql);
$didbv = 60;
oci_bind_by_name($stid, ':didbv', $didbv);
oci_execute($stid);
while (($row = oci_fetch_array($stid, OCI_ASSOC)) != false) {
echo $row['LAST_NAME'] ."<br>\n";
}
// La salida es
// Austin
// Ernst
// Hunold
// Lorentz
// Pataballa
oci_free_statement($stid);
oci_close($conn);
?>
]]>
</programlisting>
</example>
<example>
<title>Insertar datos en una columna CLOB</title>
<para>
Para datos grandes use los tipos objeto grande binario (BLOB) u objeto
grande de caracteres (CLOB). Este ejemplo usa CLOB.
</para>
<programlisting role="php">
<![CDATA[
<?php
// Antes de ejecutarlo, cree la tabla:
// CREATE TABLE MYTABLE (mykey NUMBER, myclob CLOB);
$conexión = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conexión) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$mykey = 12343; // clave arbitraria para este ejemplo;
$sql = "INSERT INTO mytable (mykey, myclob)
VALUES (:mykey, EMPTY_CLOB())
RETURNING myclob INTO :myclob";
$stid = oci_parse($conexión, $sql);
$clob = oci_new_descriptor($conexión, OCI_D_LOB);
oci_bind_by_name($stid, ":mykey", $mykey, 5);
oci_bind_by_name($stid, ":myclob", $clob, -1, OCI_B_CLOB);
oci_execute($stid, OCI_NO_AUTO_COMMIT); // utilice OCI_DEFAULT para PHP <= 5.3.1
$clob->save("Una cadena muy grande");
oci_commit($conexión);
// Obtener los datos CLOB
$consulta = 'SELECT myclob FROM mytable WHERE mykey = :mykey';
$stid = oci_parse ($conexión, $consulta);
oci_bind_by_name($stid, ":mykey", $mykey, 5);
oci_execute($stid);
print '<table border="1">';
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_LOBS)) {
print '<tr><td>'.$row['MYCLOB'].'</td></tr>';
// En un bucle, liberar la variable grande antes de la 2ª obtención reduce el uso de memoria de picos de PHP
unset($row);
}
print '</table>';
?>
]]>
</programlisting>
</example>
<example>
<title>Usar una función almacenada de PL/SQL</title>
<para>
Se debe vincular una variable para el valor de retorno y, opcionalmente, para
cualquier argumento de la función de PL/SQL.
</para>
<programlisting role="php">
<![CDATA[
<?php
/*
Antes de ejecutar el programa de PHP, cree una función almacenada en
SQL*Plus o SQL Developer:
CREATE OR REPLACE FUNCTION myfunc(p IN NUMBER) RETURN NUMBER AS
BEGIN
RETURN p * 3;
END;
*/
$conexión = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conexión) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$p = 8;
$stid = oci_parse($conexión, 'begin :r := myfunc(:p); end;');
oci_bind_by_name($stid, ':p', $p);
oci_bind_by_name($stid, ':r', $r, 40);
oci_execute($stid);
print "$r\n"; // imprime 24
oci_free_statement($stid);
oci_close($conexión);
?>
]]>
</programlisting>
</example>
<example>
<title>Utilizar un procedimiento almacenado de PL/SQL</title>
<para>
Con los procedimientos almacenados se deberían vincular variables para cualquier argumento.
</para>
<programlisting role="php">
<![CDATA[
<?php
/*
Antes de ejecutar el programa de PHP, cree un procedimiento almacenado en
SQL*Plus or SQL Developer:
CREATE OR REPLACE PROCEDURE myproc(p1 IN NUMBER, p2 OUT NUMBER) AS
BEGIN
p2 := p1 * 2;
END;
*/
$conexión = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conexión) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$p1 = 8;
$stid = oci_parse($conexión, 'begin myproc(:p1, :p2); end;');
oci_bind_by_name($stid, ':p1', $p1);
oci_bind_by_name($stid, ':p2', $p2, 40);
oci_execute($stid);
print "$p2\n"; // imprime 16
oci_free_statement($stid);
oci_close($conexión);
?>
]]>
</programlisting>
</example>
<example>
<title>Llamar a una función de PL/SQL que devuelve un <literal>REF CURSOR</literal></title>
<para>
Cada valor devuelto por la consulta es un <literal>REF
CURSOR</literal> desde el que se pueden obtener datos.
</para>
<programlisting role="php">
<![CDATA[
<?php
/*
Cree una función almacenada de PL/SQL como:
CREATE OR REPLACE FUNCTION myfunc(p1 IN NUMBER) RETURN SYS_REFCURSOR AS
rc SYS_REFCURSOR;
BEGIN
OPEN rc FOR SELECT city FROM locations WHERE ROWNUM < p1;
RETURN rc;
END;
*/
$conexión = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conexión, 'SELECT myfunc(5) AS mfrc FROM dual');
oci_execute($stid);
echo "<table border='1'>\n";
while (($fila = oci_fetch_array($stid, OCI_ASSOC))) {
echo "<tr>\n";
$rc = $fila['MFRC'];
oci_execute($rc); // el valor de la columna devuelta por la consulta es un ref cursor
while (($fila_rc = oci_fetch_array($rc, OCI_ASSOC))) {
echo " <td>" . $fila_rc['CITY'] . "</td>\n";
}
oci_free_statement($rc);
echo "</tr>\n";
}
echo "</table>\n";
// La salida es:
// Beijing
// Bern
// Bombay
// Geneva
oci_free_statement($stid);
oci_close($conexión);
?>
]]>
</programlisting>
</example>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->