-
Notifications
You must be signed in to change notification settings - Fork 50
/
oci-commit.xml
160 lines (145 loc) · 4.77 KB
/
oci-commit.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: ae5ececd1763fea7c2b3f47d913c7236ff6e4467 Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.oci-commit" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>oci_commit</refname>
<refpurpose>Consigna la transacción pendiente de la base de datos</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>oci_commit</methodname>
<methodparam><type>resource</type><parameter>connection</parameter></methodparam>
</methodsynopsis>
<para>
Consigna la transacción pendiente de la conexión de
Oracle dada por <parameter>connection</parameter>. Una consignación finaliza la
transacción actual y hace permanente todos los cambios. Libera todos
los bloqueos que hubiera.
</para>
<para>
Una transacción comienza cuando la primera sentencia SQL que modifica datos
es ejecutada con <function>oci_execute</function> usando
la bandera <constant>OCI_NO_AUTO_COMMIT</constant>. Las modificaciones posteriores
de datos realizados por otra sentencia serán parte de la misma
transacción. Las modificaciones hechas en una transacción son temporales
hasta que sea consignada o revertida. Los demás usuarios de
la base de datos no verán dichos cambios hasta que sean consignados.
</para>
<para>
Cuando se insertan datos, se recomienda usar transacciones para
mantener la consistencia de datos relacionales y por motivos de rendimiento.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>connection</parameter></term>
<listitem>
<para>
Un identificador de conexión de Oracle, devuelto por
<function>oci_connect</function>, <function>oci_pconnect</function>, o <function>oci_new_connect</function>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.success;
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Ejemplo de <function>oci_commit</function></title>
<programlisting role="php">
<![CDATA[
<?php
// Insertar en varias tablas, y revertir los cambios si ocurrió un error
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, "INSERT INTO mysalary (id, name) VALUES (1, 'Chris')");
// La bandera OCI_NO_AUTO_COMMIT indica a Oracle que no consigne el INSERT inmediatamente
// Use OCI_DEFAULT como bandera para PHP <= 5.3.1. Las dos banderas son equivalentes
$r = oci_execute($stid, OCI_NO_AUTO_COMMIT);
if (!$r) {
$e = oci_error($stid);
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
$stid = oci_parse($conn, 'INSERT INTO myschedule (startday) VALUES (12)');
$r = oci_execute($stid, OCI_NO_AUTO_COMMIT);
if (!$r) {
$e = oci_error($stid);
oci_rollback($conn); // revertir los cambios en ambas tablas
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
// Consignar los cambios de ambas tablas
$r = oci_commit($conn);
if (!$r) {
$e = oci_error($conn);
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Las transacciones son revertidas automáticamente cuando se cierra la
conexión, o cuando el script finaliza, lo que suceda antes. Es
necesario llamar a <function>oci_commit</function> para consignar
la transacción.
</para>
<para>
Cualquier llamada a <function>oci_execute</function> que utilice el modo
<constant>OCI_COMMIT_ON_SUCCESS</constant>, de forma explícita o por omisión,
consignará cualquier transacción no consignada previamente.
</para>
<para>
Cualquier sentencia DDL de Oracle, como <literal>CREATE</literal>
o <literal>DROP</literal>, consignará automáticamente cualquier
transacción no consignada.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>oci_execute</function></member>
<member><function>oci_rollback</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- 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
-->