ruby-oci8 1.0.7 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. data/ChangeLog +1254 -390
  2. data/Makefile +10 -13
  3. data/README +56 -385
  4. data/VERSION +1 -1
  5. data/dist-files +26 -27
  6. data/ext/oci8/.document +1 -0
  7. data/ext/oci8/MANIFEST +0 -4
  8. data/ext/oci8/apiwrap.c.tmpl +172 -0
  9. data/ext/oci8/apiwrap.h.tmpl +61 -0
  10. data/ext/oci8/apiwrap.rb +91 -0
  11. data/ext/oci8/apiwrap.yml +1243 -0
  12. data/ext/oci8/attr.c +124 -384
  13. data/ext/oci8/bind.c +472 -164
  14. data/ext/oci8/encoding.c +196 -0
  15. data/ext/oci8/env.c +84 -253
  16. data/ext/oci8/error.c +196 -127
  17. data/ext/oci8/extconf.rb +82 -59
  18. data/ext/oci8/lob.c +710 -370
  19. data/ext/oci8/metadata.c +359 -0
  20. data/ext/oci8/object.c +622 -0
  21. data/ext/oci8/oci8.c +577 -161
  22. data/ext/oci8/oci8.h +354 -258
  23. data/ext/oci8/oci8lib.c +493 -0
  24. data/ext/oci8/ocidatetime.c +473 -0
  25. data/ext/oci8/ocinumber.c +1123 -24
  26. data/ext/oci8/oraconf.rb +72 -106
  27. data/ext/oci8/oradate.c +511 -321
  28. data/ext/oci8/stmt.c +752 -572
  29. data/ext/oci8/win32.c +131 -0
  30. data/ext/oci8/xmldb.c +383 -0
  31. data/lib/.document +2 -0
  32. data/lib/dbd/OCI8.rb +2 -17
  33. data/lib/oci8.rb.in +41 -1622
  34. data/lib/oci8/.document +5 -0
  35. data/lib/oci8/compat.rb +108 -0
  36. data/lib/oci8/datetime.rb +489 -0
  37. data/lib/oci8/encoding-init.rb +40 -0
  38. data/lib/oci8/encoding.yml +537 -0
  39. data/lib/oci8/metadata.rb +2077 -0
  40. data/lib/oci8/object.rb +548 -0
  41. data/lib/oci8/oci8.rb +773 -0
  42. data/lib/oci8/oracle_version.rb +144 -0
  43. data/metaconfig +3 -3
  44. data/ruby-oci8.gemspec +5 -5
  45. data/setup.rb +4 -4
  46. data/test/config.rb +64 -84
  47. data/test/test_all.rb +14 -21
  48. data/test/test_array_dml.rb +317 -0
  49. data/test/test_bind_raw.rb +18 -25
  50. data/test/test_bind_time.rb +78 -91
  51. data/test/test_break.rb +37 -35
  52. data/test/test_clob.rb +33 -89
  53. data/test/test_connstr.rb +5 -4
  54. data/test/test_datetime.rb +469 -0
  55. data/test/test_dbi.rb +99 -60
  56. data/test/test_dbi_clob.rb +3 -8
  57. data/test/test_metadata.rb +65 -51
  58. data/test/test_oci8.rb +151 -55
  59. data/test/test_oracle_version.rb +70 -0
  60. data/test/test_oradate.rb +76 -83
  61. data/test/test_oranumber.rb +405 -71
  62. data/test/test_rowid.rb +6 -11
  63. metadata +31 -32
  64. data/NEWS +0 -420
  65. data/ext/oci8/const.c +0 -165
  66. data/ext/oci8/define.c +0 -53
  67. data/ext/oci8/describe.c +0 -81
  68. data/ext/oci8/descriptor.c +0 -39
  69. data/ext/oci8/handle.c +0 -273
  70. data/ext/oci8/oranumber.c +0 -445
  71. data/ext/oci8/param.c +0 -37
  72. data/ext/oci8/server.c +0 -182
  73. data/ext/oci8/session.c +0 -99
  74. data/ext/oci8/svcctx.c +0 -238
  75. data/ruby-oci8.spec +0 -62
  76. data/support/README +0 -4
  77. data/support/runit/assert.rb +0 -281
  78. data/support/runit/cui/testrunner.rb +0 -101
  79. data/support/runit/error.rb +0 -4
  80. data/support/runit/method_mappable.rb +0 -20
  81. data/support/runit/robserver.rb +0 -25
  82. data/support/runit/setuppable.rb +0 -15
  83. data/support/runit/teardownable.rb +0 -16
  84. data/support/runit/testcase.rb +0 -113
  85. data/support/runit/testfailure.rb +0 -25
  86. data/support/runit/testresult.rb +0 -121
  87. data/support/runit/testsuite.rb +0 -43
  88. data/support/runit/version.rb +0 -3
  89. data/test/test_describe.rb +0 -137
@@ -1,182 +0,0 @@
1
- /*
2
- server.c - part of ruby-oci8
3
-
4
- Copyright (C) 2002 KUBO Takehiro <kubo@jiubao.org>
5
-
6
- =begin
7
- == OCIServer
8
- If you use ((<OCIEnv#logon>)), you have no need to use this handle directly.
9
- Because ((<OCIEnv#logon>)) create this handle implicitly and set it to ((<OCISvcCtx>)).
10
-
11
- super class: ((<OCIHandle>))
12
-
13
- correspond native OCI datatype: ((|OCIServer|))
14
- =end
15
- */
16
- #include "oci8.h"
17
-
18
- /*
19
- =begin
20
- --- OCIServer#attach(dbname [, mode])
21
- attach to the database.
22
- :dbname
23
- the name of database.
24
- :mode
25
- ((|OCI_DEFAULT|)) or ((|OCI_CPOOL|))(Oracle 9i). Default value is ((|OCI_DEFAULT|)).
26
-
27
- This ruby module doesn't support the connection pooling provided by OCI,
28
- so ((|OCI_CPOOL|)) is invalid value for now.
29
-
30
- correspond native OCI function: ((|OCIServerAttach|))
31
- =end
32
- */
33
- static VALUE oci8_server_attach(int argc, VALUE *argv, VALUE self)
34
- {
35
- VALUE vdbname, vmode;
36
- oci8_handle_t *h;
37
- oci8_string_t d;
38
- ub4 mode;
39
- sword rv;
40
-
41
- rb_scan_args(argc, argv, "11", &vdbname, &vmode);
42
- Get_Handle(self, h); /* 0 */
43
- Get_String(vdbname, d); /* 1 */
44
- Get_Int_With_Default(argc, 2, vmode, mode, OCI_DEFAULT); /* 2 */
45
-
46
- rv = OCIServerAttach(h->hp, h->errhp, d.ptr, d.len, mode);
47
- if (rv != OCI_SUCCESS)
48
- oci8_raise(h->errhp, rv, NULL);
49
- return self;
50
- }
51
-
52
- /*
53
- =begin
54
- --- OCIServer#detach([mode])
55
- detach from the database.
56
-
57
- :mode
58
- ((|OCI_DEFAULT|)) only valid. Default value is ((|OCI_DEFAULT|)).
59
-
60
- correspond native OCI function: ((|OCIServerDetach|))
61
- =end
62
- */
63
- static VALUE oci8_server_detach(int argc, VALUE *argv, VALUE self)
64
- {
65
- VALUE vmode;
66
- oci8_handle_t *h;
67
- ub4 mode;
68
- sword rv;
69
-
70
-
71
- rb_scan_args(argc, argv, "01", &vmode);
72
- Get_Handle(self, h); /* 0 */
73
- Get_Int_With_Default(argc, 1, vmode, mode, OCI_DEFAULT); /* 1 */
74
-
75
- rv = OCIServerDetach(h->hp, h->errhp, mode);
76
- if (rv != OCI_SUCCESS)
77
- oci8_raise(h->errhp, rv, NULL);
78
- return self;
79
- }
80
-
81
-
82
-
83
- void Init_oci8_server(void)
84
- {
85
- rb_define_method(cOCIServer, "attach", oci8_server_attach, -1);
86
- rb_define_method(cOCIServer, "detach", oci8_server_detach, -1);
87
- rb_define_method(cOCIServer, "version", oci8_server_version, 0);
88
- #ifdef HAVE_OCISERVERRELEASE
89
- rb_define_method(cOCIServer, "release", oci8_server_release, 0);
90
- #endif
91
- rb_define_method(cOCIServer, "break", oci8_break, 0);
92
- #ifdef HAVE_OCIRESET
93
- rb_define_method(cOCIServer, "reset", oci8_reset, 0);
94
- #endif
95
- }
96
-
97
- /*
98
- =begin
99
- --- OCIServer#version()
100
- get server version.
101
-
102
- :return value
103
- string of server version. For example
104
- Oracle8 Release 8.0.5.0.0 - Production
105
- PL/SQL Release 8.0.5.0.0 - Production
106
-
107
- correspond native OCI function: ((|OCIServerVersion|))
108
- =end
109
- */
110
- VALUE oci8_server_version(VALUE self)
111
- {
112
- oci8_handle_t *h;
113
- OraText buf[1024];
114
- sword rv;
115
-
116
- Get_Handle(self, h); /* 0 */
117
- rv = OCIServerVersion(h->hp, h->errhp, buf, sizeof(buf), h->type);
118
- if (rv != OCI_SUCCESS)
119
- oci8_raise(h->errhp, rv, NULL);
120
- return rb_str_new2(TO_CHARPTR(buf));
121
- }
122
-
123
- /*
124
- =begin
125
- --- OCIServer#release()
126
- get server version number and string
127
-
128
- :return value
129
- array of number and string. For example
130
-
131
- version_number, version_str = srv.release()
132
- version_number is 0x8005000.
133
- version_str is
134
- Oracle8 Release 8.0.5.0.0 - Production
135
- PL/SQL Release 8.0.5.0.0 - Production
136
-
137
- correspond native OCI function: ((|OCIServerVersion|))
138
-
139
- Oracle 9i or later?
140
- =end
141
- */
142
- #ifdef HAVE_OCISERVERRELEASE
143
- VALUE oci8_server_release(VALUE self)
144
- {
145
- oci8_handle_t *h;
146
- OraText buf[1024];
147
- ub4 version = 0;
148
- sword rv;
149
-
150
- Get_Handle(self, h); /* 0 */
151
- rv = OCIServerRelease(h->hp, h->errhp, buf, sizeof(buf), h->type, &version);
152
- if (rv != OCI_SUCCESS)
153
- oci8_raise(h->errhp, rv, NULL);
154
- return rb_ary_new3(2, INT2FIX(version), rb_str_new2(buf));
155
- }
156
- #endif
157
-
158
- VALUE oci8_break(VALUE self)
159
- {
160
- oci8_handle_t *h;
161
- sword rv;
162
-
163
- Get_Handle(self, h); /* 0 */
164
- rv = OCIBreak(h->hp, h->errhp);
165
- if (rv != OCI_SUCCESS)
166
- oci8_raise(h->errhp, rv, NULL);
167
- return self;
168
- }
169
-
170
- #ifdef HAVE_OCIRESET
171
- VALUE oci8_reset(VALUE self)
172
- {
173
- oci8_handle_t *h;
174
- sword rv;
175
-
176
- Get_Handle(self, h); /* 0 */
177
- rv = OCIReset(h->hp, h->errhp);
178
- if (rv != OCI_SUCCESS)
179
- oci8_raise(h->errhp, rv, NULL);
180
- return self;
181
- }
182
- #endif
@@ -1,99 +0,0 @@
1
- /*
2
- session.c - part of ruby-oci8
3
-
4
- Copyright (C) 2002 KUBO Takehiro <kubo@jiubao.org>
5
-
6
- =begin
7
- == OCISession
8
- If you use ((<OCIEnv#logon>)), you have no need to use this handle directly.
9
- Because ((<OCIEnv#logon>)) create this handle implicitly and set it to ((<OCISvcCtx>)).
10
-
11
- super class: ((<OCIHandle>))
12
-
13
- correspond native OCI datatype: ((|OCISession|))
14
- =end
15
- */
16
- #include "oci8.h"
17
-
18
- /*
19
- =begin
20
- --- OCISession#begin(svc [, credt [, mode]])
21
- start user session under the specified server context.
22
- :svc
23
- ((<OCISvcCtx>)).
24
- :credt
25
- ((|OCI_CRED_RDBMS|)) or ((|OCI_CRED_EXT|)).
26
- Default value is ((|OCI_CRED_RDBMS|)).
27
-
28
- If you use ((|OCI_CRED_RDBMS|)), set ((<OCI_ATTR_USERNAME>))
29
- and ((<OCI_ATTR_PASSWORD>)) in advance.
30
-
31
- :mode
32
- ((|OCI_DEFAULT|)), ((|OCI_MIGRATE|)), ((|OCI_SYSDBA|)), ((|OCI_SYSOPER|)),
33
- (((|OCI_SYSDBA|)) | ((|OCI_PRELIM_AUTH|))), or (((|OCI_SYSOPER|)) | ((|OCI_PRELIM_AUTH|))).
34
- Default value is ((|OCI_DEFAULT|)).
35
-
36
- If you need SYSDBA or SYSOPER privilege, use
37
- ((|OCI_SYSDBA|)) or ((|OCI_SYSOPER|)) respectively.
38
-
39
- correspond native OCI function: ((|OCISessionBegin|))
40
- =end
41
- */
42
- static VALUE oci8_session_begin(int argc, VALUE *argv, VALUE self)
43
- {
44
- VALUE vsvc, vcredt, vmode;
45
- oci8_handle_t *h;
46
- oci8_handle_t *svch;
47
- ub4 credt;
48
- ub4 mode;
49
- sword rv;
50
-
51
- rb_scan_args(argc, argv, "12", &vsvc, &vcredt, &vmode);
52
- Get_Handle(self, h); /* 0 */
53
- Check_Handle(vsvc, OCISvcCtx, svch); /* 1 */
54
- Get_Int_With_Default(argc, 2, vcredt, credt, OCI_NTV_SYNTAX); /* 2 */
55
- Get_Int_With_Default(argc, 3, vmode, mode, OCI_DEFAULT); /* 3 */
56
-
57
- rv = OCISessionBegin(svch->hp, h->errhp, h->hp, credt, mode);
58
- if (rv != OCI_SUCCESS)
59
- oci8_raise(h->errhp, rv, NULL);
60
- return self;
61
- }
62
-
63
- /*
64
- =begin
65
- --- OCISession#end(svc [, vmode])
66
- terminate user Authentication Context
67
-
68
- :svc
69
- ((<OCISvcCtx>)).
70
- :mode
71
- ((|OCI_DEFAULT|)) only valid. Defalt value is ((|OCI_DEFAULT|)).
72
-
73
- correspond native OCI function: ((|OCISessionEnd|))
74
- =end
75
- */
76
- static VALUE oci8_session_end(int argc, VALUE *argv, VALUE self)
77
- {
78
- VALUE vsvc, vmode;
79
- oci8_handle_t *h;
80
- oci8_handle_t *svch;
81
- ub4 mode;
82
- sword rv;
83
-
84
- rb_scan_args(argc, argv, "11", &vsvc, &vmode);
85
- Get_Handle(self, h); /* 0 */
86
- Check_Handle(vsvc, OCISvcCtx, svch); /* 1 */
87
- Get_Int_With_Default(argc, 2, vmode, mode, OCI_DEFAULT); /* 2 */
88
-
89
- rv = OCISessionEnd(svch->hp, h->errhp, h->hp, mode);
90
- if (rv != OCI_SUCCESS)
91
- oci8_raise(h->errhp, rv, NULL);
92
- return self;
93
- }
94
-
95
- void Init_oci8_session(void)
96
- {
97
- rb_define_method(cOCISession, "begin", oci8_session_begin, -1);
98
- rb_define_method(cOCISession, "end", oci8_session_end, -1);
99
- }
@@ -1,238 +0,0 @@
1
- /*
2
- svcctx.c - part of ruby-oci8
3
-
4
- Copyright (C) 2002 KUBO Takehiro <kubo@jiubao.org>
5
-
6
- =begin
7
- == OCISvcCtx
8
- The service context handle is correspond to `session' compared
9
- with other general database interfaces although OCI constains OCISession.
10
-
11
- This handle cooperates with a ((<server handle|OCIServer>)), a
12
- ((<user session handle|OCISession>)), and a transaction handle.
13
- But these three handles work at the back of it. So you don't have to use
14
- them except when you have special purpose.
15
-
16
- super class: ((<OCIHandle>))
17
-
18
- correspond native OCI datatype: ((|OCISvcCtx|))
19
- =end
20
- */
21
- #include "oci8.h"
22
-
23
- /*
24
- =begin
25
- --- OCISvcCtx#logoff()
26
- disconnect from Oracle.
27
-
28
- If you use ((<OCIServer#attach>)) and ((<OCISession#begin>)) to logon,
29
- use ((<OCIServer#detach>)) and ((<OCISession#end>)) instead.
30
- See also ((<Simplified Logon>)) and ((<Explicit Attach and Begin Session>)).
31
-
32
- correspond native OCI function: ((|OCILogoff|))
33
- =end
34
- */
35
- static VALUE oci8_svcctx_logoff(VALUE self)
36
- {
37
- oci8_handle_t *h;
38
- sword rv;
39
-
40
- Get_Handle(self, h); /* 0 */
41
-
42
- rv = OCILogoff(h->hp, h->errhp);
43
- if (rv != OCI_SUCCESS)
44
- oci8_raise(h->errhp, rv, NULL);
45
- return self;
46
- }
47
-
48
- /*
49
- =begin
50
- --- OCISvcCtx#passwordChange(username, old_password, new_password [, mode])
51
- :username
52
- the username.
53
- :old_password
54
- old password of the user.
55
- :new_password
56
- new password of the user.
57
- :mode
58
- ((|OCI_DEFAULT|)) or ((|OCI_AUTH|)). Default value is ((|OCI_DEFAULT|)).
59
-
60
- For most cases, use default value. If you want to know detail,
61
- see "Oracle Call Interface Programmer's Guide".
62
-
63
- correspond native OCI function: ((|OCIPasswordChange|))
64
- =end
65
- */
66
- static VALUE oci8_password_change(int argc, VALUE *argv, VALUE self)
67
- {
68
- VALUE vusername, vopasswd, vnpasswd, vmode;
69
- oci8_handle_t *h;
70
- oci8_string_t username, opasswd, npasswd;
71
- ub4 mode;
72
- sword rv;
73
-
74
- rb_scan_args(argc, argv, "31", &vusername, &vopasswd, &vnpasswd, &vmode);
75
- Get_Handle(self, h); /* 0 */
76
- Get_String(vusername, username); /* 1 */
77
- Get_String(vopasswd, opasswd); /* 2 */
78
- Get_String(vnpasswd, npasswd); /* 3 */
79
- Get_Int_With_Default(argc, 4, vmode, mode, OCI_DEFAULT); /* 4 */
80
-
81
- rv = OCIPasswordChange(h->hp, h->errhp, username.ptr, username.len,
82
- opasswd.ptr, opasswd.len, npasswd.ptr, npasswd.len, mode);
83
- if (rv != OCI_SUCCESS) {
84
- oci8_raise(h->errhp, rv, NULL);
85
- }
86
- return self;
87
- }
88
-
89
- /*
90
- =begin
91
- --- OCISvcCtx#commit([flags])
92
- commit the transaction.
93
-
94
- :flags
95
- ((|OCI_DEFAULT|)) or ((|OCI_TRANS_TWOPHASE|)).
96
- Default value is ((|OCI_DEFAULT|)).
97
-
98
- correspond native OCI function: ((|OCITransCommit|))
99
- =end
100
- */
101
- static VALUE oci8_trans_commit(int argc, VALUE *argv, VALUE self)
102
- {
103
- VALUE vflags;
104
- oci8_handle_t *h;
105
- ub4 flags;
106
- sword rv;
107
-
108
- rb_scan_args(argc, argv, "01", &vflags);
109
- Get_Handle(self, h); /* 0 */
110
- Get_Int_With_Default(argc, 1, vflags, flags, OCI_DEFAULT); /* 1 */
111
-
112
- rv = OCITransCommit(h->hp, h->errhp, flags);
113
- if (rv != OCI_SUCCESS) {
114
- oci8_raise(h->errhp, rv, NULL);
115
- }
116
- return self;
117
- }
118
-
119
- /*
120
- =begin
121
-
122
- --- OCISvcCtx#rollback([flags])
123
- rollback the transaction.
124
-
125
- :flags
126
- ((|OCI_DEFAULT|)) only valid. Default value is ((|OCI_DEFAULT|)).
127
-
128
- correspond native OCI function: ((|OCITransRollback|))
129
- =end
130
- */
131
- static VALUE oci8_trans_rollback(int argc, VALUE *argv, VALUE self)
132
- {
133
- VALUE vflags;
134
- oci8_handle_t *h;
135
- ub4 flags;
136
- sword rv;
137
-
138
- rb_scan_args(argc, argv, "01", &vflags);
139
- Get_Handle(self, h); /* 0 */
140
- Get_Int_With_Default(argc, 1, vflags, flags, OCI_DEFAULT); /* 1 */
141
-
142
- rv = OCITransRollback(h->hp, h->errhp, flags);
143
- if (rv != OCI_SUCCESS) {
144
- oci8_raise(h->errhp, rv, NULL);
145
- }
146
- return self;
147
- }
148
-
149
- /* THIS WILL BE DELETED IN FUTURE RELEASE. */
150
- static VALUE oci8_describe_any(VALUE self, VALUE vdsc, VALUE vname, VALUE vtype)
151
- {
152
- oci8_handle_t *h;
153
- oci8_handle_t *dsch;
154
- oci8_string_t name;
155
- ub1 type;
156
- sword rv;
157
-
158
- Get_Handle(self, h); /* 0 */
159
- Check_Handle(vdsc, OCIDescribe, dsch); /* 1 */
160
- Get_String(vname, name); /* 2 */
161
- type = FIX2INT(vtype); /* 3 */
162
-
163
- rv = OCIDescribeAny(h->hp, h->errhp, name.ptr, name.len, OCI_OTYPE_NAME, OCI_DEFAULT, type, dsch->hp);
164
- if (rv != OCI_SUCCESS) {
165
- oci8_raise(h->errhp, rv, NULL);
166
- }
167
- return self;
168
- }
169
-
170
- static VALUE oci8_close_all_files(VALUE self)
171
- {
172
- oci8_handle_t *h;
173
- sword rv;
174
-
175
- Get_Handle(self, h); /* 0 */
176
- rv = OCILobFileCloseAll(h->hp, h->errhp);
177
- if (rv != OCI_SUCCESS) {
178
- oci8_raise(h->errhp, rv, NULL);
179
- }
180
- return self;
181
- }
182
-
183
- static VALUE oci8_pid(VALUE self)
184
- {
185
- oci8_handle_t *h;
186
-
187
- Get_Handle(self, h); /* 0 */
188
- return INT2FIX(h->u.svcctx.pid);
189
- }
190
-
191
- void Init_oci8_svcctx(void)
192
- {
193
- rb_define_method(cOCISvcCtx, "logoff", oci8_svcctx_logoff, 0);
194
- rb_define_method(cOCISvcCtx, "passwordChange", oci8_password_change, -1);
195
- rb_define_method(cOCISvcCtx, "commit", oci8_trans_commit, -1);
196
- rb_define_method(cOCISvcCtx, "rollback", oci8_trans_rollback, -1);
197
- rb_define_method(cOCISvcCtx, "describeAny", oci8_describe_any, 3); /* delete later. */
198
- rb_define_method(cOCISvcCtx, "version", oci8_server_version, 0);
199
- #ifdef HAVE_OCISERVERRELEASE
200
- rb_define_method(cOCISvcCtx, "release", oci8_server_release, 0);
201
- #endif
202
- rb_define_method(cOCISvcCtx, "break", oci8_break, 0);
203
- #ifdef HAVE_OCIRESET
204
- rb_define_method(cOCISvcCtx, "reset", oci8_reset, 0);
205
- #endif
206
- rb_define_method(cOCISvcCtx, "close_all_files", oci8_close_all_files, 0);
207
- rb_define_method(cOCISvcCtx, "pid", oci8_pid, 0);
208
- }
209
-
210
- /*
211
- =begin
212
- --- OCISvcCtx#version()
213
- get server version.
214
-
215
- :return value
216
- string of server version. For example
217
- Oracle8 Release 8.0.5.0.0 - Production
218
- PL/SQL Release 8.0.5.0.0 - Production
219
-
220
- correspond native OCI function: ((|OCIServerVersion|))
221
-
222
- --- OCISvcCtx#release()
223
- get server version number and string
224
-
225
- :return value
226
- array of number and string. For example
227
-
228
- version_number, version_str = svc.release()
229
- version_number is 0x8005000.
230
- version_str is
231
- Oracle8 Release 8.0.5.0.0 - Production
232
- PL/SQL Release 8.0.5.0.0 - Production
233
-
234
- correspond native OCI function: ((|OCIServerVersion|))
235
-
236
- Oracle 9i or later?
237
- =end
238
- */