home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _11cdf10fceb0e4f178a17b2e513632a7 < prev    next >
Text File  |  2000-03-23  |  27KB  |  592 lines

  1.  
  2. <HTML>
  3. <HEAD>
  4. <TITLE>Oraperl - Perl access to Oracle databases for old oraperl scripts</TITLE>
  5. <LINK REL="stylesheet" HREF="../../Active.css" TYPE="text/css">
  6. <LINK REV="made" HREF="mailto:">
  7. </HEAD>
  8.  
  9. <BODY>
  10. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  11. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  12. <STRONG><P CLASS=block> Oraperl - Perl access to Oracle databases for old oraperl scripts</P></STRONG>
  13. </TD></TR>
  14. </TABLE>
  15.  
  16. <A NAME="__index__"></A>
  17. <!-- INDEX BEGIN -->
  18.  
  19. <UL>
  20.  
  21.     <LI><A HREF="#name">NAME</A></LI><LI><A HREF="#supportedplatforms">SUPPORTED PLATFORMS</A></LI>
  22.  
  23.     <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
  24.     <LI><A HREF="#description">DESCRIPTION</A></LI>
  25.     <UL>
  26.  
  27.         <LI><A HREF="#principal functions">Principal Functions</A></LI>
  28.         <LI><A HREF="#ancillary functions">Ancillary Functions</A></LI>
  29.     </UL>
  30.  
  31.     <LI><A HREF="#variables">VARIABLES</A></LI>
  32.     <UL>
  33.  
  34.         <LI><A HREF="#customisation variables">Customisation Variables</A></LI>
  35.         <LI><A HREF="#status variables">Status Variables</A></LI>
  36.     </UL>
  37.  
  38.     <LI><A HREF="#substitution variables">SUBSTITUTION VARIABLES</A></LI>
  39.     <LI><A HREF="#debugging">DEBUGGING</A></LI>
  40.     <LI><A HREF="#example">EXAMPLE</A></LI>
  41.     <LI><A HREF="#notes">NOTES</A></LI>
  42.     <LI><A HREF="#warnings">WARNINGS</A></LI>
  43.     <LI><A HREF="#see also">SEE ALSO</A></LI>
  44.     <LI><A HREF="#authors">AUTHORS</A></LI>
  45. </UL>
  46. <!-- INDEX END -->
  47.  
  48. <HR>
  49. <P>
  50. <H1><A NAME="name">NAME</A></H1>
  51. <P>Oraperl - Perl access to Oracle databases for old oraperl scripts</P>
  52. <P>
  53. <HR>
  54. <H1><A NAME="supportedplatforms">SUPPORTED PLATFORMS</A></H1>
  55. <UL>
  56. <LI>Windows</LI>
  57. </UL>
  58. <HR>
  59. <H1><A NAME="synopsis">SYNOPSIS</A></H1>
  60. <PRE>
  61.   eval 'use Oraperl; 1' || die $@ if $] >= 5;  # ADD THIS LINE TO OLD SCRIPTS</PRE>
  62. <PRE>
  63.   $lda = &ora_login($system_id, $name, $password)
  64.   $csr = &ora_open($lda, $stmt [, $cache])
  65.   &ora_bind($csr, $var, ...)
  66.   &ora_fetch($csr [, $trunc])
  67.   &ora_close($csr)
  68.   &ora_logoff($lda)</PRE>
  69. <PRE>
  70.   &ora_do($lda, $stmt)</PRE>
  71. <PRE>
  72.   &ora_titles($csr)
  73.   &ora_lengths($csr)
  74.   &ora_types($csr)
  75.   &ora_commit($lda)
  76.   &ora_rollback($lda)
  77.   &ora_autocommit($lda, $on_off)
  78.   &ora_version()</PRE>
  79. <PRE>
  80.   $ora_cache
  81.   $ora_long
  82.   $ora_trunc
  83.   $ora_errno
  84.   $ora_errstr
  85.   $ora_verno</PRE>
  86. <PRE>
  87.   $ora_debug</PRE>
  88. <P>
  89. <HR>
  90. <H1><A NAME="description">DESCRIPTION</A></H1>
  91. <P>Oraperl is an extension to Perl which allows access to Oracle databases.</P>
  92. <P>The functions which make up this extension are described in the
  93. following sections. All functions return a false or undefined (in the
  94. Perl sense) value to indicate failure.  You do not need to understand
  95. the references to OCI in these descriptions. They are here to help
  96. those who wish to extend the routines or to port them to new machines.</P>
  97. <P>The text in this document is largely unchanged from the original Perl4
  98. oraperl manual written by Kevin Stock <<A HREF="mailto:kstock@auspex.fr">kstock@auspex.fr</A>>. Any comments
  99. specific to the DBD::Oracle Oraperl emulation are prefixed by <STRONG>DBD:</STRONG>.
  100. See the DBD::Oracle and DBI manuals for more information.</P>
  101. <P><STRONG>DBD:</STRONG> In order to make the oraperl function definitions available in
  102. perl5 you need to arrange to 'use' the Oraperl.pm module in each file
  103. or package which uses them. You can do this by simply adding <CODE>use
  104. Oraperl;</CODE> in each file or package. If you need to make the scripts work
  105. with both the perl4 oraperl and perl5 you should add add the following
  106. text instead:</P>
  107. <PRE>
  108.   eval 'use Oraperl; 1' || die $@ if $] >= 5;</PRE>
  109. <P>
  110. <H2><A NAME="principal functions">Principal Functions</A></H2>
  111. <P>The main functions for database access are &ora_login(), &ora_open(),
  112. &ora_bind(), &ora_fetch(), &ora_close(), &ora_do() and &ora_logoff().</P>
  113. <UL>
  114. <LI><STRONG><A NAME="item_ora_login">ora_login</A></STRONG><BR>
  115.  
  116. <PRE>
  117.   $lda = &ora_login($system_id, $username, $password)</PRE>
  118. <P>In order to access information held within an Oracle database, a
  119. program must first log in to it by calling the &ora_login() function.
  120. This function is called with three parameters, the system ID (see
  121. below) of the Oracle database to be used, and the Oracle username and
  122. password. The value returned is a login identifier (actually an Oracle
  123. Login Data Area) referred to below as $lda.</P>
  124. <P>Multiple logins may be active simultaneously. This allows a simple
  125. mechanism for correlating or transferring data between databases.</P>
  126. <P>Most Oracle programs (for example, SQL*Plus or SQL*Forms) examine the
  127. environment variable ORACLE_SID or TWO_TASK to determine which database
  128. to connect to. In an environment which uses several different
  129. databases, it is easy to make a mistake, and attempt to run a program
  130. on the wrong one.  Also, it is cumbersome to create a program which
  131. works with more than one database simultaneously. Therefore, Oraperl
  132. requires the system ID to be passed as a parameter. However, if the
  133. system ID parameter is an empty string then oracle will use the
  134. existing value of ORACLE_SID or TWO_TASK in the usual manner.</P>
  135. <P>Example:</P>
  136. <PRE>
  137.   $lda = &ora_login('personnel', 'scott', 'tiger') || die $ora_errstr;</PRE>
  138. <P>This function is equivalent to the OCI olon and orlon functions.</P>
  139. <P><STRONG>DBD:</STRONG> note that a name is assumed to be a TNS alias if it does not
  140. appear as the name of a SID in /etc/oratab or /var/opt/oracle/oratab.
  141. See the code in Oracle.pm for the full logic of database name handling.</P>
  142. <P><STRONG>DBD:</STRONG> Since the returned $lda is a Perl5 reference the database login
  143. identifier is now automatically released if $lda is overwritten or goes
  144. out of scope.</P>
  145. <LI><STRONG><A NAME="item_ora_open">ora_open</A></STRONG><BR>
  146.  
  147. <PRE>
  148.   $csr = &ora_open($lda, $statement [, $cache])</PRE>
  149. <P>To specify an SQL statement to be executed, the program must call the
  150. &ora_open() function. This function takes at least two parameters: a
  151. login identifier (obtained from &ora_login()) and the SQL statement to
  152. be executed. An optional third parameter specifies the size of the row
  153. cache to be used for a SELECT statement. The value returned from
  154. &ora_open() is a statement identifier (actually an ORACLE Cursor)
  155. referred to below as $csr.</P>
  156. <P>If the row cache size is not specified, a default size is
  157. used. As distributed, the default is five rows, but this
  158. may have been changed at your installation (see the
  159. &ora_version() function and $ora_cache variable below).</P>
  160. <P>Examples:</P>
  161. <PRE>
  162.  $csr = &ora_open($lda, 'select ename, sal from emp order by ename', 10);</PRE>
  163. <PRE>
  164.  $csr = &ora_open($lda, 'insert into dept values(:1, :2, :3)');</PRE>
  165. <P>This function is equivalent to the OCI oopen and oparse functions. For
  166. statements which do not contain substitution variables (see the section
  167. Substitution Variables below), it also uses of the oexec function. For
  168. SELECT statements, it also makes use of the odescr and odefin functions
  169. to allocate memory for the values to be returned from the database.</P>
  170. <LI><STRONG><A NAME="item_ora_bind">ora_bind</A></STRONG><BR>
  171.  
  172. <PRE>
  173.   &ora_bind($csr, $var, ...)</PRE>
  174. <P>If an SQL statement contains substitution variables (see the section
  175. Substitution Variables below), &ora_bind() is used to assign actual
  176. values to them. This function takes a statement identifier (obtained
  177. from &ora_open()) as its first parameter, followed by as many
  178. parameters as are required by the statement.</P>
  179. <P>Example:</P>
  180. <PRE>
  181.  &ora_bind($csr, 50, 'management', 'Paris');</PRE>
  182. <P>This function is equivalent to the OCI obndrn and oexec statements.</P>
  183. <P>The OCI obndrn function does not allow empty strings to be bound. As
  184. distributed, $ora_bind therefore replaces empty strings with a single
  185. space. However, a compilation option allows this substitution to be
  186. suppressed, causing &ora_bind() to fail. The output from the
  187. &ora_version() function specifies which is the case at your installation.</P>
  188. <LI><STRONG><A NAME="item_ora_fetch">ora_fetch</A></STRONG><BR>
  189.  
  190. <PRE>
  191.  $nfields = &ora_fetch($csr)</PRE>
  192. <PRE>
  193.  @data = &ora_fetch($csr [, $trunc])</PRE>
  194. <P>The &ora_fetch() function is used in conjunction with a SQL SELECT
  195. statement to retrieve information from a database.  This function takes
  196. one mandatory parameter, a statement identifier (obtained from
  197. &ora_open()).</P>
  198. <P>Used in a scalar context, the function returns the number of fields
  199. returned by the query but no data is actually fetched. This may be
  200. useful in a program which allows a user to enter a statement interactively.</P>
  201. <P>Example:</P>
  202. <PRE>
  203.  $nfields = &ora_fetch($csr);</PRE>
  204. <P>Used in an array context, the value returned is an array containing the
  205. data, one element per field. Note that this will not work as expected:</P>
  206. <PRE>
  207.  @data = &ora_fetch($csr) || die "...";    # WRONG</PRE>
  208. <P>The || forces a scalar context so ora_fetch returns the number of fields.</P>
  209. <P>An optional second parameter may be supplied to indicate whether the
  210. truncation of a LONG or LONG RAW field is to be permitted (non-zero) or
  211. considered an error (zero). If this parameter is not specified, the
  212. value of the global variable $ora_trunc is used instead. Truncation of
  213. other datatypes is always considered a error.</P>
  214. <P><STRONG>DBD:</STRONG> The optional second parameter to ora_fetch is not supported.
  215. A DBI usage error will be generated if a second parameter is supplied.
  216. Use the global variable $ora_trunc instead. Also note that the
  217. experimental DBI blob_read method can be used to retrieve a long:</P>
  218. <PRE>
  219.   $csr->blob_read($field, $offset, $len [, \$dest, $destoffset]);</PRE>
  220. <P>If truncation occurs, $ora_errno will be set to 1406.  &ora_fetch()
  221. will complete successfully if truncation is permitted, otherwise it
  222. will fail.</P>
  223. <P>&ora_fetch() will fail at the end of the data or if an error occurs. It
  224. is possible to distinguish between these cases by testing the value of
  225. the variable $ora_errno. This will be zero for end of data, non-zero if
  226. an error has occurred.</P>
  227. <P>Example:</P>
  228. <PRE>
  229.  while (($deptno, $dname, $loc) = &ora_fetch($csr))
  230.  {
  231.    warn "Truncated!!!" if $ora_errno == 1406;
  232.    # do something with the data
  233.  }
  234.  warn $ora_errstr if $ora_errno;</PRE>
  235. <P>This function is equivalent to the OCI ofetch function.</P>
  236. <LI><STRONG><A NAME="item_ora_close">ora_close</A></STRONG><BR>
  237.  
  238. <PRE>
  239.  &ora_close($csr)</PRE>
  240. <P>If an SQL statement is no longer required (for example, all the data
  241. selected has been processed, or no more rows are to be inserted) then
  242. the statement identifier should be released. This is done by calling
  243. the &ora_close() function with the statement identifier as its only
  244. parameter.</P>
  245. <P>This function is equivalent to the OCI oclose function.</P>
  246. <P><STRONG>DBD:</STRONG> Since $csr is a Perl5 reference the statement/cursor is now
  247. automatically closed if $csr is overwritten or goes out of scope.</P>
  248. <LI><STRONG><A NAME="item_ora_do">ora_do</A></STRONG><BR>
  249.  
  250. <PRE>
  251.   &ora_do($lda, $statement)</PRE>
  252. <P>Not all SQL statements return data or contain substitution
  253. variables. In these cases the &ora_do() function may be
  254. used as an alternative to &ora_open() and &ora_close().
  255. This function takes two parameters, a login identifier and
  256. the statement to be executed.</P>
  257. <P>Example:</P>
  258. <PRE>
  259.  &ora_do($lda, 'drop table employee');</PRE>
  260. <P>This function is roughly equivalent to</P>
  261. <PRE>
  262.  &ora_close( &ora_open($lda, $statement) )</PRE>
  263. <P><STRONG>DBD:</STRONG> oraperl v2 used to return the string 'OK' to indicate
  264. success with a zero numeric value. The Oraperl emulation now
  265. uses the string '0E0' to achieve the same effect since it does
  266. not cause any <CODE>-w</CODE> warnings when used in a numeric context.</P>
  267. <LI><STRONG><A NAME="item_ora_logoff">ora_logoff</A></STRONG><BR>
  268.  
  269. <PRE>
  270.   &ora_logoff($lda)</PRE>
  271. <P>When the program no longer needs to access a given database, the login
  272. identifier should be released using the &ora_logoff() function.</P>
  273. <P>This function is equivalent to the OCI ologoff function.</P>
  274. <P><STRONG>DBD:</STRONG> Since $lda is a Perl5 reference the database login identifier
  275. is now automatically released if $lda is overwritten or goes out of scope.</P>
  276. </UL>
  277. <P>
  278. <H2><A NAME="ancillary functions">Ancillary Functions</A></H2>
  279. <P>Additional functions available are: &ora_titles(),
  280. &ora_lengths(), &ora_types(), &ora_autocommit(),
  281. &ora_commit(), &ora_rollback() and &ora_version().</P>
  282. <P>The first three are of most use within a program which
  283. allows statements to be entered interactively. See, for
  284. example, the sample program sql which is supplied with
  285. Oraperl and may have been installed at your site.</P>
  286. <UL>
  287. <LI><STRONG><A NAME="item_ora_titles">ora_titles</A></STRONG><BR>
  288.  
  289. <PRE>
  290.   @titles = &ora_titles($csr)</PRE>
  291. <P>A program may determine the field titles of an executed
  292. query by calling &ora_titles(). This function takes a
  293. single parameter, a statement identifier (obtained from
  294. &ora_open()) indicating the query for which the titles are
  295. required. The titles are returned as an array of strings,
  296. one for each column.</P>
  297. <P>Titles are truncated to the length of the field, as reported
  298. by the &ora_lengths() function.</P>
  299. <P><STRONG>DBD:</STRONG> oraperl v2.2 actually changed the behaviour such that the
  300. titles were not truncated unless an optional second parameter was
  301. true.  This was not reflected in the oraperl manual.  The Oraperl
  302. emulation adopts the non truncating behaviour and doesn't support the
  303. truncate parameter.</P>
  304. <LI><STRONG><A NAME="item_ora_lengths">ora_lengths</A></STRONG><BR>
  305.  
  306. <PRE>
  307.   @lengths = &ora_lengths($csr)</PRE>
  308. <P>A program may determine the length of each of the fields
  309. returned by a query by calling the &ora_lengths() function.
  310. This function takes a single parameter, a statement
  311. identifier (obtained from &ora_open()) indicating the query
  312. for which the lengths are required. The lengths are
  313. returned as an array of integers, one for each column.</P>
  314. <LI><STRONG><A NAME="item_ora_types">ora_types</A></STRONG><BR>
  315.  
  316. <PRE>
  317.   @types = &ora_types($csr)</PRE>
  318. <P>A program may determine the type of each of the fields returned by a
  319. query by calling the &ora_types() function.  This function takes a
  320. single parameter, a statement identifier (obtained from &ora_open())
  321. indicating the query for which the lengths are required. The types are
  322. returned as an array of integers, one for each field.</P>
  323. <P>These types are defined in your OCI documentation. The correct
  324. interpretation for Oracle v6 is given in the file oraperl.ph.</P>
  325. <LI><STRONG><A NAME="item_ora_autocommit">ora_autocommit</A></STRONG><BR>
  326.  
  327. <PRE>
  328.   &ora_autocommit($lda, $on_or_off)</PRE>
  329. <P>Autocommit mode (in which each transaction is committed immediately,
  330. without waiting for an explicit commit) may be enabled or disabled
  331. using &ora_autocommit(). This function takes two parameters, a login
  332. identifier (obtained from &ora_login()) and a true/false value
  333. indicating whether autocommit is to be enabled (non-zero) or disabled
  334. (zero).  By default, autocommit is off.</P>
  335. <P>Note that autocommit can only be set per login, not per statement. If
  336. you need to control autocommit by statement (for example, to allow
  337. deletions to be rolled back, but insertions to be committed
  338. immediately) you should make multiple calls to &ora_login() and use a
  339. separate login identifier for each statement.</P>
  340. <LI><STRONG><A NAME="item_ora_commit%2C_ora_rollback">ora_commit, ora_rollback</A></STRONG><BR>
  341.  
  342. <PRE>
  343.   &ora_commit($lda)
  344.   &ora_rollback($lda)</PRE>
  345. <P>Modifications to a database may be committed or rolled back using the
  346. &ora_commit() and &ora_rollback() functions.  These functions take a
  347. single parameter, a login identifier obtained from &ora_login().</P>
  348. <P>Transactions which have been committed (either explicitly by a call to
  349. &ora_commit() or implicitly through the use of &ora_autocommit())
  350. cannot be subsequently rolled back.</P>
  351. <P>Note that commit and rollback can only be used per login, not per
  352. statement. If you need to commit or rollback by statement you should
  353. make multiple calls to &ora_login() and use a separate login identifier
  354. for each statement.</P>
  355. <LI><STRONG><A NAME="item_ora_version">ora_version</A></STRONG><BR>
  356.  
  357. <PRE>
  358.   &ora_version()</PRE>
  359. <P>The &ora_version() function prints the version number and
  360. copyright information concerning Oraperl. It also prints
  361. the values of various compilation time options. It does not
  362. return any value, and should not normally be used in a
  363. program.</P>
  364. <P>Example:</P>
  365. <PRE>
  366.   perl -MOraperl -e 'ora_version()'</PRE>
  367. <PRE>
  368.   This is Oraperl, version 2, patch level 0.</PRE>
  369. <PRE>
  370.   Debugging is available, including the -D flag.
  371.   Default fetch row cache size is 5.
  372.   Empty bind values are replaced by a space.</PRE>
  373. <PRE>
  374.   Perl is copyright by Larry Wall; type oraperl -v for details.
  375.   Additions for oraperl: Copyright 1991, 1992, Kevin Stock.</PRE>
  376. <PRE>
  377.   Oraperl may be distributed under the same conditions as Perl.</PRE>
  378. <P>This function is the equivalent of Perl's <CODE>-v</CODE> flag.</P>
  379. <P><STRONG>DBD:</STRONG> The Oraperl emulation printout is similar but not identical.</P>
  380. </UL>
  381. <P>
  382. <HR>
  383. <H1><A NAME="variables">VARIABLES</A></H1>
  384. <P>Six special variables are provided, $ora_cache, $ora_long,
  385. $ora_trunc, $ora_errno, $ora_errstr and $ora_verno.</P>
  386. <P>
  387. <H2><A NAME="customisation variables">Customisation Variables</A></H2>
  388. <P>These variables are used to dictate the behaviour of Oraperl
  389. under certain conditions.</P>
  390. <UL>
  391. <LI><STRONG><A NAME="item_%24ora_cache">$ora_cache</A></STRONG><BR>
  392.  
  393. The $ora_cache variable determines the default cache size used by the
  394. &ora_open() function for SELECT statements if an explicit cache size is
  395. not given.
  396. <P>It is initialised to the default value reported by &ora_version() but
  397. may be set within a program to apply to all subsequent calls to
  398. &ora_open(). Cursors which are already open are not affected. As
  399. distributed, the default value is five, but may have been altered at
  400. your installation.</P>
  401. <P>As a special case, assigning zero to $ora_cache resets it to the
  402. default value. Attempting to set $ora_cache to a negative value results
  403. in a warning.</P>
  404. <P></P>
  405. <LI><STRONG><A NAME="item_%24ora_long">$ora_long</A></STRONG><BR>
  406.  
  407. Normally, Oraperl interrogates the database to determine the length of
  408. each field and allocates buffer space accordingly.  This is not
  409. possible for fields of type LONG or LONGRAW. To allocate space
  410. according to the maximum possible length (65535 bytes) would obviously
  411. be extremely wasteful of memory.
  412. <P>Therefore, when &ora_open() determines that a field is a LONG type, it
  413. allocates the amount of space indicated by the $ora_long variable. This
  414. is initially set to 80 (for compatibility with Oracle products) but may
  415. be set within a program to whatever size is required.</P>
  416. <P>$ora_long is only used when fetching data, not when inserting it.</P>
  417. <P></P>
  418. <LI><STRONG><A NAME="item_%24ora_trunc">$ora_trunc</A></STRONG><BR>
  419.  
  420. Since Oraperl cannot determine exactly the maximum length of a LONG
  421. field, it is possible that the length indicated by $ora_long is not
  422. sufficient to store the data fetched. In such a case, the optional
  423. second parameter to &ora_fetch() indicates whether the truncation
  424. should be allowed or should provoke an error.
  425. <P>If this second parameter is not specified, the value of $ora_trunc is
  426. used as a default. This only applies to LONG and LONGRAW data types.
  427. Truncation of a field of any other type is always considered an error
  428. (principally because it indicates a bug in Oraperl).</P>
  429. <P></P></UL>
  430. <P>
  431. <H2><A NAME="status variables">Status Variables</A></H2>
  432. <P>These variables report information about error conditions or about
  433. Oraperl itself. They may only be read; a fatal error occurs if a
  434. program attempts to change them.</P>
  435. <UL>
  436. <LI><STRONG><A NAME="item_%24ora_errno">$ora_errno</A></STRONG><BR>
  437.  
  438. $ora_errno contains the Oracle error code provoked by the last function
  439. call.
  440. <P>There are two cases of particular interest concerning &ora_fetch(). If
  441. a LONG or LONGRAW field is truncated (and truncation is allowed) then
  442. &ora_fetch() will complete successfully but $ora_errno will be set to
  443. 1406 to indicate the truncation. When &ora_fetch() fails, $ora_errno
  444. will be set to zero if this was due to the end of data or an error code
  445. if it was due to an actual error.</P>
  446. <P></P>
  447. <LI><STRONG><A NAME="item_%24ora_errstr">$ora_errstr</A></STRONG><BR>
  448.  
  449. The $ora_errstr variable contains the Oracle error message
  450. corresponding to the current value of $ora_errno.
  451. <P></P>
  452. <LI><STRONG><A NAME="item_%24ora_verno">$ora_verno</A></STRONG><BR>
  453.  
  454. The $ora_verno variable contains the version number of Oraperl in the
  455. form v.ppp where v is the major version number and ppp is the
  456. patchlevel. For example, in Oraperl version 3, patch level 142,
  457. $ora_verno would contain the value 3.142 (more or less, allowing for
  458. floating point error).
  459. <P></P></UL>
  460. <P>
  461. <HR>
  462. <H1><A NAME="substitution variables">SUBSTITUTION VARIABLES</A></H1>
  463. <P>Oraperl allows an SQL statement to contain substitution variables.
  464. These consist of a colon followed by a number.  For example, a program
  465. which added records to a telephone list might use the following call to
  466. &ora_open():</P>
  467. <PRE>
  468.   $csr = &ora_open($csr, "insert into telno values(:1, :2)");</PRE>
  469. <P>The two names :1 and :2 are called substitution variables.  The
  470. function &ora_bind() is used to assign values to these variables. For
  471. example, the following statements would add two new people to the
  472. list:</P>
  473. <PRE>
  474.   &ora_bind($csr, "Annette", "472-8836");
  475.   &ora_bind($csr, "Brian", "937-1823");</PRE>
  476. <P>Note that the substitution variables must be assigned consecutively
  477. beginning from 1 for each SQL statement, as &ora_bind() assigns its
  478. parameters in this order. Named substitution variables (for example,
  479. :NAME, :TELNO) are not permitted.</P>
  480. <P><STRONG>DBD:</STRONG> Substitution variables are now bound as type 1 (VARCHAR2)
  481. and not type 5 (STRING) by default. This can alter the behaviour of
  482. SQL code which compares a char field with a substitution variable.
  483. See the String Comparison section in the Datatypes chapter of the
  484. Oracle OCI manual for more details.</P>
  485. <P>You can work around this by using DBD::Oracle's ability to specify
  486. the Oracle type to be used on a per field basis:</P>
  487. <PRE>
  488.   $char_attrib = { ora_type => 5 }; # 5 = STRING (ala oraperl2.4)
  489.   $csr = ora_open($dbh, "select foo from bar where x=:1 and y=:2");
  490.   $csr->bind_param(1, $value_x, $char_attrib);
  491.   $csr->bind_param(2, $value_y, $char_attrib);
  492.   ora_bind($csr);  # bind with no parameters since we've done bind_param()'s</PRE>
  493. <P>
  494. <HR>
  495. <H1><A NAME="debugging">DEBUGGING</A></H1>
  496. <P><STRONG>DBD:</STRONG> The Oraperl $ora_debug variable is not supported. However
  497. detailed debugging can be enabled at any time by executing</P>
  498. <PRE>
  499.   $h->debug(2);</PRE>
  500. <P>where $h is either a $lda or a $csr. If debugging is enabled on an
  501. $lda then it is automatically passed on to any cursors returned by
  502. &ora_open().</P>
  503. <P>
  504. <HR>
  505. <H1><A NAME="example">EXAMPLE</A></H1>
  506. <PRE>
  507.   format STDOUT_TOP =
  508.   Name Phone
  509.   ==== =====
  510.   .</PRE>
  511. <PRE>
  512.   format STDOUT =
  513.   @<<<<<<<<<< @>>>>>>>>>>
  514.   $name, $phone
  515.   .</PRE>
  516. <PRE>
  517.   die "You should use oraperl, not perl\n" unless defined &ora_login;
  518.   $ora_debug = shift if $ARGV[0] =~ /^\-#/;</PRE>
  519. <PRE>
  520.   $lda = &ora_login('t', 'kstock', 'kstock')
  521.             || die $ora_errstr;
  522.   $csr = &ora_open($lda, 'select * from telno order by name')
  523.             || die $ora_errstr;</PRE>
  524. <PRE>
  525.   $nfields = &ora_fetch($csr);
  526.   print "Query will return $nfields fields\n\n";</PRE>
  527. <PRE>
  528.   while (($name, $phone) = &ora_fetch($csr)) { write; }
  529.   warn $ora_errstr if $ora_errno;</PRE>
  530. <PRE>
  531.   die "fetch error: $ora_errstr" if $ora_errno;</PRE>
  532. <PRE>
  533.   do ora_close($csr) || die "can't close cursor";
  534.   do ora_logoff($lda) || die "can't log off Oracle";</PRE>
  535. <P>
  536. <HR>
  537. <H1><A NAME="notes">NOTES</A></H1>
  538. <P>In keeping with the philosophy of Perl, there is no pre-defined limit
  539. to the number of simultaneous logins or SQL statements which may be
  540. active, nor to the number of data fields which may be returned by a
  541. query. The only limits are those imposed by the amount of memory
  542. available, or by Oracle.</P>
  543. <P>
  544. <HR>
  545. <H1><A NAME="warnings">WARNINGS</A></H1>
  546. <P>The Oraperl emulation software shares no code with the original
  547. oraperl. It is built on top of the new Perl5 DBI and DBD::Oracle
  548. modules.  These modules are still evolving. (One of the goals of
  549. the Oraperl emulation software is to allow useful work to be done
  550. with the DBI and DBD::Oracle modules whilst insulating users from
  551. the ongoing changes in their interfaces.)</P>
  552. <P>It is quite possible, indeed probable, that some differences in
  553. behaviour will exist. These are probably confined to error handling.</P>
  554. <P><STRONG>All</STRONG> differences in behaviour which are not documented here should be
  555. reported to <A HREF="mailto:Tim.Bunce@ig.co.uk">Tim.Bunce@ig.co.uk</A> <STRONG>and</STRONG> CC'd to <A HREF="mailto:dbi-users@fugue.com.">dbi-users@fugue.com.</A></P>
  556. <P>
  557. <HR>
  558. <H1><A NAME="see also">SEE ALSO</A></H1>
  559. <DL>
  560. <DT><STRONG><A NAME="item_Oracle_Documentation">Oracle Documentation</A></STRONG><BR>
  561. <DD>
  562. SQL Language Reference Manual.
  563. Programmer's Guide to the Oracle Call Interfaces.
  564. <P></P>
  565. <DT><STRONG><A NAME="item_Books">Books</A></STRONG><BR>
  566. <DD>
  567. Programming Perl by Larry Wall and Randal Schwartz.
  568. Learning Perl by Randal Schwartz.
  569. <P></P>
  570. <DT><STRONG><A NAME="item_Manual_Pages">Manual Pages</A></STRONG><BR>
  571. <DD>
  572. <CODE>perl(1)</CODE>
  573. <P></P></DL>
  574. <P>
  575. <HR>
  576. <H1><A NAME="authors">AUTHORS</A></H1>
  577. <P>Perl by Larry Wall <<A HREF="mailto:lwall@netlabs.com">lwall@netlabs.com</A>>.</P>
  578. <P>ORACLE by Oracle Corporation, California.</P>
  579. <P>Original Oraperl 2.4 code and documentation
  580. by Kevin Stock <<A HREF="mailto:kstock@auspex.fr">kstock@auspex.fr</A>>.</P>
  581. <P>DBI and Oraperl emulation using DBD::Oracle
  582. by <<A HREF="mailto:Tim.Bunce@ig.co.uk">Tim.Bunce@ig.co.uk</A>></P>
  583. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  584. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  585. <STRONG><P CLASS=block> Oraperl - Perl access to Oracle databases for old oraperl scripts</P></STRONG>
  586. </TD></TR>
  587. </TABLE>
  588.  
  589. </BODY>
  590.  
  591. </HTML>
  592.