1--TEST--
2Bind with SQLT_NUM
3--EXTENSIONS--
4oci8
5--SKIPIF--
6<?php
7preg_match('/^[[:digit:]]+/', oci_client_version(), $matches);
8if (!(isset($matches[0]) && $matches[0] <= 11)) {
9    die("skip works only with Oracle 11 or earlier version of Oracle client libraries");
10}
11?>
12--FILE--
13<?php
14
15require(__DIR__.'/connect.inc');
16
17// Initialization
18
19$stmtarray = array(
20    "drop table bind_sqltnum_tab",
21
22    "create table bind_sqltnum_tab (
23        id                number,
24        varchar2_t10      varchar2(10),
25        number_t          number,
26        number_t92        number(9,2))"
27);
28
29oci8_test_sql_execute($c, $stmtarray);
30
31function check_col($c, $colname, $id)
32{
33    $s = oci_parse($c, "select $colname from bind_sqltnum_tab where id = :id");
34    oci_bind_by_name($s, ":id", $id);
35    oci_execute($s);
36    oci_fetch_all($s, $r);
37    var_dump($r);
38}
39
40
41// Run Test
42
43echo "Test 1 - baseline test\n";
44
45$s = oci_parse($c, "INSERT INTO bind_sqltnum_tab (id, varchar2_t10) VALUES (100, :c2)");
46$c2 = "Hood";
47$r = oci_bind_by_name($s, ":c2", $c2, -1);
48if (!$r) {
49    $e = oci_error($s);
50    var_dump($e);
51}
52$r = oci_execute($s, OCI_DEFAULT);
53if (!$r) {
54    $e = oci_error($s);
55    var_dump($e);
56}
57
58$s = oci_parse($c, "select id, varchar2_t10 from bind_sqltnum_tab");
59oci_execute($s);
60oci_fetch_all($s, $data);
61var_dump($data);
62
63echo "Test 2 - SQLT_NUM to a VARCHAR2 column\n";
64
65$s = oci_parse($c, "INSERT INTO bind_sqltnum_tab (id, varchar2_t10) VALUES (100, :c2)");
66$c2 = "Hood";
67$r = oci_bind_by_name($s, ":c2", $c2, -1, SQLT_NUM);
68if (!$r) {
69    $e = oci_error($s);
70    var_dump($e['message']);
71}
72$r = oci_execute($s, OCI_DEFAULT);
73if (!$r) {
74    $e = oci_error($s);
75    var_dump($e['message']);
76}
77
78echo "\nTEST41 wrong bind type SQLT_NUM\n";
79
80$c2 = "Hood41";
81$s = oci_parse($c, "INSERT INTO bind_sqltnum_tab (id, varchar2_t10) VALUES (41, :c2)");
82oci_bind_by_name($s, ":c2", $c2, -1, SQLT_NUM);
83oci_execute($s);
84
85echo "\nTEST42 insert numbers SQLT_NUM\n";
86
87$s = oci_parse($c, "INSERT INTO bind_sqltnum_tab (id, number_t) VALUES (42, :n1)");
88$n1 = 42;
89oci_bind_by_name($s, ":n1", $n1, -1, SQLT_NUM);
90oci_execute($s);
91
92check_col($c, 'number_t', 42);
93
94echo "\nTEST43 insert numbers SQLT_NUM\n";
95
96$s = oci_parse($c, "INSERT INTO bind_sqltnum_tab (id, number_t) VALUES (43, :n1)");
97$n1 = 42.69;
98oci_bind_by_name($s, ":n1", $n1, -1, SQLT_NUM);
99oci_execute($s);
100
101check_col($c, 'number_t', 43);
102
103echo "\nTEST44\n";
104
105$s = oci_parse($c, "INSERT INTO bind_sqltnum_tab (id, number_t) VALUES (44, :n1)");
106$n1 = 0;
107oci_bind_by_name($s, ":n1", $n1, -1, SQLT_NUM);
108oci_execute($s);
109
110check_col($c, 'number_t', 44);
111
112echo "\nTEST45\n";
113
114$s = oci_parse($c, "INSERT INTO bind_sqltnum_tab (id, number_t) VALUES (45, :n1)");
115$n1 = -23;
116oci_bind_by_name($s, ":n1", $n1, -1, SQLT_NUM);
117oci_execute($s);
118
119check_col($c, 'number_t', 45);
120
121echo "\nTEST46 insert numbers\n";
122
123$s = oci_parse($c, "INSERT INTO bind_sqltnum_tab (id, number_t) VALUES (46, :n1)");
124$n1 = "-23";
125oci_bind_by_name($s, ":n1", $n1, -1, SQLT_NUM);
126oci_execute($s);
127
128check_col($c, 'number_t', 46);
129
130echo "\nTEST47\n";
131
132$s = oci_parse($c, "INSERT INTO bind_sqltnum_tab (id, number_t) VALUES (47, :n1)");
133$n1 = "23";
134oci_bind_by_name($s, ":n1", $n1, -1, SQLT_NUM);
135oci_execute($s);
136
137check_col($c, 'number_t', 47);
138
139echo "\nTEST48\n";
140
141$s = oci_parse($c, "INSERT INTO bind_sqltnum_tab (id, number_t92) VALUES (48, :n1)");
142$n1 = 123.56;
143oci_bind_by_name($s, ":n1", $n1, -1, SQLT_NUM);
144oci_execute($s);
145
146check_col($c, 'number_t92', 48);
147
148echo "\nTEST49\n";
149
150$s = oci_parse($c, "INSERT INTO bind_sqltnum_tab (id, number_t92) VALUES (49, :n1)");
151$n1 = "123.56";
152oci_bind_by_name($s, ":n1", $n1, -1, SQLT_NUM);
153oci_execute($s);
154
155check_col($c, 'number_t92', 49);
156
157echo "\nTEST50\n";
158
159$s = oci_parse($c, "INSERT INTO bind_sqltnum_tab (id, number_t92) VALUES (50, :n1)");
160$n1 = "";
161oci_bind_by_name($s, ":n1", $n1, -1, SQLT_NUM);
162oci_execute($s);
163
164check_col($c, 'number_t92', 50);
165
166// Clean up
167
168$stmtarray = array(
169    "drop table bind_sqltnum_tab"
170);
171
172oci8_test_sql_execute($c, $stmtarray);
173
174?>
175--EXPECTF--
176Test 1 - baseline test
177array(2) {
178  ["ID"]=>
179  array(1) {
180    [0]=>
181    string(3) "100"
182  }
183  ["VARCHAR2_T10"]=>
184  array(1) {
185    [0]=>
186    string(4) "Hood"
187  }
188}
189Test 2 - SQLT_NUM to a VARCHAR2 column
190
191Warning: oci_execute(): ORA-12899: %s (%s: 40, %s: 10) in %sbind_sqltnum_11g.php on line %d
192string(%d) "ORA-12899: %s"
193
194TEST41 wrong bind type SQLT_NUM
195
196Warning: oci_execute(): ORA-12899: %s "%s"."BIND_SQLTNUM_TAB"."VARCHAR2_T10" (%s: 40, %s: 10) in %sbind_sqltnum_11g.php on line %d
197
198TEST42 insert numbers SQLT_NUM
199array(1) {
200  ["NUMBER_T"]=>
201  array(1) {
202    [0]=>
203    NULL
204  }
205}
206
207TEST43 insert numbers SQLT_NUM
208array(1) {
209  ["NUMBER_T"]=>
210  array(1) {
211    [0]=>
212    NULL
213  }
214}
215
216TEST44
217array(1) {
218  ["NUMBER_T"]=>
219  array(1) {
220    [0]=>
221    string(127) "-000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
222  }
223}
224
225TEST45
226array(1) {
227  ["NUMBER_T"]=>
228  array(1) {
229    [0]=>
230    NULL
231  }
232}
233
234TEST46 insert numbers
235array(1) {
236  ["NUMBER_T"]=>
237  array(1) {
238    [0]=>
239    NULL
240  }
241}
242
243TEST47
244array(1) {
245  ["NUMBER_T"]=>
246  array(1) {
247    [0]=>
248    NULL
249  }
250}
251
252TEST48
253array(1) {
254  ["NUMBER_T92"]=>
255  array(1) {
256    [0]=>
257    string(1) "0"
258  }
259}
260
261TEST49
262array(1) {
263  ["NUMBER_T92"]=>
264  array(1) {
265    [0]=>
266    string(1) "0"
267  }
268}
269
270TEST50
271
272Warning: oci_execute(): ORA-01438: %s in %sbind_sqltnum_11g.php on line %d
273array(1) {
274  ["NUMBER_T92"]=>
275  array(0) {
276  }
277}
278