[ruby-oci8-commit] [292] web: * doc_root/*: add document root of hiki pages.

nobody at rubyforge.org nobody at rubyforge.org
Sat Oct 18 03:17:35 EDT 2008


Revision: 292
Author:   kubo
Date:     2008-10-18 03:17:34 -0400 (Sat, 18 Oct 2008)

Log Message:
-----------
* doc_root/*: add document root of hiki pages.
* hiki_data/*: add data directories of hiki pages.
* hiki_src/hiki.cgi: change $KCODE from 'e'(EUC-JP) to 'u'(UTF-8).
* hiki_src/hiki/storage.rb: check the timestamp of page files
    and cache files.

Modified Paths:
--------------
    web/hiki_src/hiki/storage.rb
    web/hiki_src/hiki.cgi

Added Paths:
-----------
    web/ChangeLog
    web/doc_root/
    web/doc_root/css/
    web/doc_root/css/ruby-oci8.css
    web/doc_root/en/
    web/doc_root/en/.htaccess
    web/doc_root/en/hiki.cgi
    web/doc_root/en/hikiconf.rb
    web/doc_root/hiki_base.css
    web/doc_root/index.html
    web/doc_root/ja/
    web/doc_root/ja/.htaccess
    web/doc_root/ja/hiki.cgi
    web/doc_root/ja/hikiconf.rb
    web/hiki_data/
    web/hiki_data/en/
    web/hiki_data/en/backup/
    web/hiki_data/en/cache/
    web/hiki_data/en/cache/parser/
    web/hiki_data/en/hiki.conf
    web/hiki_data/en/info.db
    web/hiki_data/en/session/
    web/hiki_data/en/text/
    web/hiki_data/en/text/APIReference
    web/hiki_data/en/text/FAQ
    web/hiki_data/en/text/FAQ_long_or_long_raw
    web/hiki_data/en/text/FAQ_plsql_out_param
    web/hiki_data/en/text/FAQ_uninstall
    web/hiki_data/en/text/FrontPage
    web/hiki_data/en/text/HowToInstall
    web/hiki_data/en/text/InstallBinaryPackage
    web/hiki_data/en/text/InstallForFullClient
    web/hiki_data/en/text/InstallForInstantClient
    web/hiki_data/en/text/InterWikiName
    web/hiki_data/en/text/PlatformSpecificIssue
    web/hiki_data/en/text/ReportInstallProblem
    web/hiki_data/en/text/SideMenu
    web/hiki_data/en/text/api
    web/hiki_data/en/text/api_OCI8
    web/hiki_data/en/text/api_OCI8BFILE
    web/hiki_data/en/text/api_OCI8BLOB
    web/hiki_data/en/text/api_OCI8CLOB
    web/hiki_data/en/text/api_OCI8Cursor
    web/hiki_data/en/text/api_OCI8MetadataColumn
    web/hiki_data/en/text/api_OCI8MetadataTable
    web/hiki_data/en/text/api_OCI8MetadataView
    web/hiki_data/en/text/dbd_oci8
    web/hiki_data/en/text/dev_APIWrap
    web/hiki_data/en/text/dev_CodingStyle
    web/hiki_data/en/text/dev_SourceCode
    web/hiki_data/ja/
    web/hiki_data/ja/backup/
    web/hiki_data/ja/cache/
    web/hiki_data/ja/cache/parser/
    web/hiki_data/ja/hiki.conf
    web/hiki_data/ja/info.db
    web/hiki_data/ja/session/
    web/hiki_data/ja/text/
    web/hiki_data/ja/text/APIReference
    web/hiki_data/ja/text/FAQ
    web/hiki_data/ja/text/FAQ_long_or_long_raw
    web/hiki_data/ja/text/FAQ_plsql_out_param
    web/hiki_data/ja/text/FAQ_uninstall
    web/hiki_data/ja/text/FrontPage
    web/hiki_data/ja/text/HowToInstall
    web/hiki_data/ja/text/InstallBinaryPackage
    web/hiki_data/ja/text/InstallForFullClient
    web/hiki_data/ja/text/InstallForInstantClient
    web/hiki_data/ja/text/InterWikiName
    web/hiki_data/ja/text/PlatformSpecificIssue
    web/hiki_data/ja/text/ReportInstallProblem
    web/hiki_data/ja/text/SideMenu
    web/hiki_data/ja/text/api
    web/hiki_data/ja/text/api_OCI8
    web/hiki_data/ja/text/api_OCI8BFILE
    web/hiki_data/ja/text/api_OCI8BLOB
    web/hiki_data/ja/text/api_OCI8CLOB
    web/hiki_data/ja/text/api_OCI8Cursor
    web/hiki_data/ja/text/api_OCI8MetadataColumn
    web/hiki_data/ja/text/api_OCI8MetadataTable
    web/hiki_data/ja/text/api_OCI8MetadataView
    web/hiki_data/ja/text/dbd_oci8

Added: web/ChangeLog
===================================================================
--- web/ChangeLog	                        (rev 0)
+++ web/ChangeLog	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,26 @@
+2008-10-18  KUBO Takehiro  <kubo at jiubao.org>
+	* doc_root/*: add document root of hiki pages.
+	* hiki_data/*: add data directories of hiki pages.
+	* hiki_src/hiki.cgi: change $KCODE from 'e'(EUC-JP) to 'u'(UTF-8).
+	* hiki_src/hiki/storage.rb: check the timestamp of page files
+	    and cache files.
+
+2008-10-17  KUBO Takehiro  <kubo at jiubao.org>
+	* hiki_src/*: add customization as follows to hiki 0.8.7.
+	    1. It makes links for static pages when it is accessed
+	       by wget.
+	    2. If a heading title looks like a function call, it
+	       add an anchor by the function name.
+	        e.g.
+	          !! logoff()
+	         -->
+	          <h2><a name="logoff">logoff()</a><h2>
+	    3. If a wiki link has '#', it assumes the the left side
+	       is a wiki name and the right side is an anchor.
+	        e.g.
+	          [[OCI8#logoff]]
+	         -->
+	          <a href="api_OCI8.html#logoff">OCI8#logoff</a>
+
+2008-10-16  KUBO Takehiro  <kubo at jiubao.org>
+	* hiki_src/*: Hiki 0.8.7, a wiki clone written by ruby, is added.

Added: web/doc_root/css/ruby-oci8.css
===================================================================
--- web/doc_root/css/ruby-oci8.css	                        (rev 0)
+++ web/doc_root/css/ruby-oci8.css	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,666 @@
+/*
+Title: Hiki
+$Revision: 1.10 $
+Author: TAKEUCHI Hitoshi
+Access: hitoshi at namaraii.com
+License: GPL
+Comment: Hiki default theme
+
+based on tDiary's clover theme.
+Thanks to original theme authors TADA Tadashi and NT.
+
+Copyright 2002 (C) by TADA Tadashi <sho at spc.gr.jp>
+Copyright 2002 (C) by NT <nt at 24i.net>
+Copyright 2004 (C) by TAKEUCHI Hitoshi <hitoshi at namaraii.com>
+validated by W3C.
+*/
+/* ChangeLog
+2004-01-23 TAKEUCHI Hitoshi <hitoshi at namaraii.com>
+	* modified for Hiki
+
+2002-09-14 NT <nt at 24i.net>
+        * convert for 1.5 series.
+
+2002-05-07 TADA Tadashi <sho at spc.gr.jp>
+	* remove overflow from pre.
+	* line-height of body upto 150%.
+
+2002-03-28 TADA Tadashi <sho at spc.gr.jp>
+	* image color down to 7bit.
+	* no underline for links.
+
+2002-03-28 TADA Tadashi <sho at spc.gr.jp>
+	* support new amazon plugin.
+
+2002-03-27 TADA Tadashi <sho at spc.gr.jp>
+	* fix textarea biyo--n problem.
+*/
+
+body {
+	background-color: #fff;
+	color: #000;
+	font-family: Arial,Verdana,Helvetica,'MS UI Gothic',sans-serif;
+	margin: 0;
+	padding: 0.5em;
+	padding-right: 1em;
+}
+
+a{
+  text-decoration: none;
+}
+
+a:link {
+  color: #22a;
+}
+
+a:visited {
+  color: #561464;
+}
+
+a:hover {
+        text-decoration: underline;
+}
+
+div.adminmenu {
+	text-align: right;
+	margin-top: 0px;
+	padding: 0.2em 0.5em 0.5em 0.5em;
+	padding-right: 0;
+	font-size: 75%;
+        line-height: 2.5em;
+}
+
+span.adminmenu {
+	background-color: #f0f0ff;
+	color: #ffffff;
+	border-color: #aaa;
+	border-style: solid;
+	border-width: 0px 1px 1px 0px;
+	padding: 2px;
+        white-space: nowrap;
+}
+
+h1 {
+	height: 64px;
+	line-height: 64px;
+	text-align: right;
+	padding-bottom: 5px;
+}
+
+h2 {
+	font-size: 160%;
+	border-style: solid;
+	border-color: #48c;
+	border-width: 0px 0px 1px 0px;
+}
+
+div.day h2 {
+	font-size: 160%;
+	border-style: solid;
+	border-color: #48c;
+	border-width: 0px 0px 2px 0px;
+	margin-left: 0.5em;
+	padding-left: 0.5em;
+	padding-bottom: 4px;
+}
+
+div.body {
+	margin-left: 1.8em;
+	line-height: 120%;
+}
+
+div.body h3 {
+	font-size: 140%;
+	border-style: dashed;
+	border-color: #48c;
+	border-width: 0px 0px 2px 0px;
+	margin-top: 1.5em;
+	margin-bottom: 0.5em;
+	padding: 0 0 0.4em 0;
+}
+
+div.body h4 h5 h6 {
+	margin-top: 1.5em;
+	margin-bottom: 0.5em;
+	padding: 4px;
+}
+
+div.body h4 {
+	font-size: 140%;
+	border-left: solid 3px #48c;
+	padding: 0.2em 0.3em;
+}
+div.body h5 {
+	font-size: 140%;
+}
+div.body h6 {
+	font-size: 110%;
+}
+
+div.body p {
+	margin-top: 0px;
+	margin-bottom: 0.5em;
+	color: #000;
+	background-color: transparent;
+	line-height: 150%;
+}
+
+div.body pre {
+	color: #000;
+	background-color: #f0f0ff;
+	border-style: solid;
+	border-width: 1px 1px 1px 6px;
+	border-color: #cccccc;
+	padding: 8px;
+	margin-left: 2em;
+}
+
+blockquote {
+	color: #000;
+	background-color: #f0f0ff;
+	border-style: solid;
+	border-color: #cccccc;
+	border-width: 2px 0px 2px 0px;
+	padding: 4px;
+	margin-left: 3em;
+	margin-right: 3em;
+}
+
+div.body blockquote p {
+	margin-left: 0em;
+}
+
+div.body li {
+	margin-left: 0.5em;
+}
+
+div.body dl {
+	margin-left: 0.5em;
+}
+
+div.body dt {
+	border-style: solid;
+	border-color: #eef;
+	border-width: 0px 0px 1px 0px;
+	margin-top: 0.7em;
+}
+
+div.body dd {
+	margin-top: 0.3em;
+	margin-bottom: 0.5em;
+	margin-left: 2em;
+}
+
+div.comment {
+	border-style: solid;
+	border-color: #ccc;
+	border-width: 1px;
+	color: #000;
+	background-color: #eef;
+	margin-top: 1em;
+	margin-bottom: 0.5em;
+	margin-left: 1em;
+	padding: 4px;
+	font-size: 90%;
+}
+
+div.form div.comment {
+	margin-right: 1em;
+	color: #000;
+	background-color: #fff;
+}
+
+div.comment p {
+	margin-top: 0px;
+	margin-bottom: 0.5em;
+}
+
+div.comment p.commenttitle {
+	border-style: dashed;
+	border-color: #ccc;
+	border-width: 0px 0px 1px 0px;
+}
+
+
+div.form {
+	border-style: solid;
+	border-color: #c0c0c0;
+	border-width: 1px;
+	color: #000;
+	background-color: #f0f0ff;
+}
+
+div.day div.form {
+	margin-top: 0px;
+	margin-bottom: 0.5em;
+	margin-left: 2em;
+}
+
+div.form form {
+	margin: 0;
+	padding: 4px 4px 4px 4px;
+	width: 100%;
+}
+
+div.form p {
+	margin-top: 0px;
+	margin-bottom: 0.5em;
+	padding-left: 4px;
+}
+
+div.form textarea {
+	margin-left: 2em;
+}
+
+div.referer {
+	text-align: right;
+	font-size: x-small;
+	margin-top: 0px;
+}
+
+div.refererlist {
+	border-style: solid;
+	color: #000;
+	border-color: #c0c0c0;
+	border-width: 1px;
+	background-color: #f0f0ff;
+	margin-top: 0px;
+	margin-left: 2em;
+	margin-bottom: 0.5em;
+	font-size: small;
+}
+
+div.refererlist ul {
+	margin-left: 2em;
+}
+
+div.form div.refererlist {
+	margin-right: 1em;
+	color: #000;
+	background-color: #fff;
+}
+
+div.refererlist p, div.refererlist ul {
+	margin-top: 0px;
+	margin-bottom: 0em;
+	padding: 4px 4px 4px 4px;
+}
+
+hr {
+	margin-top: 0.5em;
+	border-style: solid;
+	border-width: 2px 0px 0px 0px;
+	border-color: #ccc;
+}
+
+hr.sep {
+	display: none;
+}
+
+div.footer {
+	text-align: right;
+	font-size: 80%;
+	color: #444;
+}
+
+form div.body {
+	border-style: solid;
+	border-color: #c0c0c0;
+	border-width: 1px;
+	color: #000;
+	background-color: #f0f0ff;
+	padding: 0px 4px 4px 4px;
+}
+
+table {
+	border-color: #ccc;
+	border-width: 1px;
+	padding: 0px;
+	border-collapse: collapse;
+}
+th, tr, td {
+	border-style: solid;
+	border-color: #ccc;
+	border-width: 1px;
+	padding-top: 4px;
+	padding-left: 4px;
+}
+
+/*
+ for plugins
+ */
+
+/* calendar */
+div.calendar {
+	font-size: x-small;
+}
+
+/* calendar2 */
+table.calendar {
+	font-size: x-small;
+	line-height: 100%;
+	border-width: 0px;
+}
+
+table.calendar td {
+	margin: 0px;
+	text-align: right;
+	padding: 0px;
+	margin: 0px;
+}
+
+table.calendar td.calendar-prev-month, table.calendar td.calendar-current-month, table.calendar td.calendar-next-month {
+	text-align: center;
+}
+
+/* recent_list */
+p.recentitem {
+	font-size: small;
+	margin-top: 0px;
+	margin-bottom: 0px;
+}
+
+div.recentsubtitles {
+	font-size: x-small;
+	margin-top: 0px;
+	margin-bottom: 1em;
+	margin-left: 1em;
+}
+
+/* footnote */
+div.body span.footnote {
+	vertical-align: super;
+	font-size: 80%;
+}
+
+div.footnote {
+	border-style: solid;
+	border-color: #c0c0c0;
+	border-width: 1px 0px 0px 0px;
+	margin-left: 3em;
+	font-size: small;
+}
+
+/* amazon plugin */
+img.left {
+	border-width: 1px;
+	border-color: #000080;
+	float: left;
+}
+
+img.right {
+	border-width: 1px;
+	border-color: #000080;
+	float: right;
+}
+
+/* similarity Plugin */
+.bulkfeedsSimilarity {
+  width: 500px;
+}
+
+.bulkfeedsSimilarityHeader {
+  font-weight: bold;
+  background: #ccc;
+  padding: 0.2em;
+  margin-bottom: 0.2em;
+}
+
+.bulkfeedsSimilarityHeader a {
+  font-weight: bold;
+  color: #000;
+}
+
+.bulkfeedsSimilarityHeader a:visited {
+  color: #000;
+}
+
+.bulkfeedsSimilarityItems {
+  margin: 0;
+  padding-left: 1em;
+  list-style: none;
+}
+
+.bulkfeedsSimilarityFooter {
+  text-align: center;
+  margin-top: 0.5em;
+}
+
+.bulkfeedsSimilarityFooter a {
+  color: #000;
+}
+
+.bulkfeedsSimilarityFooter a:visited {
+  color: #000;
+}
+
+.comments-head {
+  padding: 0.4em;
+  background: #ccc;
+}
+
+.comments-head a {
+  font-weight: bold;
+  color: #000;
+}
+
+.comments-head a:visited {
+  font-weight: bold;
+  color: #000;
+}
+
+.comments-body {
+  padding: 0.5em;
+}
+
+.comments-body p {
+  margin: 0.2em;
+}
+
+.hilight {
+    color: black;
+    background: #ff6666;
+}
+
+div.section {
+	clear: both;
+}
+
+div.main {
+	margin-left: 20%;
+}
+
+div.sidebar {
+	position: absolute;
+	top: 0px;
+	left: 0px;
+	width: 20%;
+	font-size: 75%;
+	padding: 2px 2px 100% 2px;
+	border-style: solid;
+	border-color: #c0c0c0;
+	border-width: 1px;
+	color: #000;
+	background-color: #f0f0ff;
+}
+
+div.sidebar ul {
+	margin: 20px;
+	padding: 0px;
+}
+
+div.sidebar form {
+	margin: 0em 0em 0.5em 0em;
+	padding: 0px;
+}
+
+
+/*
+short tsukkomi body
+*/
+div.commentshort {
+        font-size: 0.9em;
+        margin-left: 0.5em;
+}
+
+span.commentator {
+        font-weight: bold;
+}
+
+div.commentshort p {
+        margin-top: 0.5em;
+        margin-bottom: 0.2em;
+        line-height: 1.2em;
+}
+
+/*
+tsukkomi body
+*/
+div.commentbody {
+        font-size: 0.9em;
+        margin: 0.5em;
+        line-height: 1.2em;
+}
+
+/*
+tsukkomi commentator
+*/
+div.commentator {
+        line-height: 1.5em;
+}
+
+/*
+tsukkomi body
+*/
+div.commentbody p {
+        margin: 0.5em;
+        margin-left: 2em;
+}
+
+/*
+form setting
+*/
+div.form form {
+        margin: 0em 0em 0em 2em;
+}
+
+div.form div.caption {
+        font-size: 0.9em;
+        margin: 0.5em;
+}
+
+div.form form.comment {
+        font-size: 0.9em;
+}
+
+div.field {
+        display: inline;
+        margin-right: 2em;
+}
+
+form.comment input {
+        margin-left: 1em;
+}
+
+div.textarea {
+        display: block;
+        vertical-align: top;
+}
+
+form.comment textarea {
+        display: block;
+        margin-left: 3em;
+        width: 30em;
+        height: 5em;
+}
+
+div.button {
+        display: block;
+        margin-left: 3em;
+}
+
+/*
+update form
+*/
+form.update {
+        padding-top: 0.5em;
+        padding-bottom: 0.5em;
+}
+
+form.update input, form.update textarea, form.commentstat input {
+}
+
+form.update span.field {
+        display: inline;
+        margin-left: 0em;
+        margin-right: 0.5em;
+}
+
+form.update div.field.title {
+        display: block;
+        margin-top: 1em;
+}
+
+form.update div.field.title input {
+        margin-left: 0.5em;
+}
+
+form.update div.textarea {
+        display: block;
+        margin-top: 1em;
+}
+
+form.update textarea {
+        display: block;
+        margin-left: 3em;
+        margin-bottom: 1em;
+        width: 80%;
+        height: 15em;
+}
+
+form.update span.checkbox.hidediary {
+        margin-left: 1em;
+}
+
+/*
+tsukkomi change-status form
+*/
+div.comment form {
+        margin-top: 0em;
+}
+
+ at media print {
+	div.main { margin-left: 0%;}
+	div.adminmenu { display: none; }
+	div.sidebar { display: none; }
+	div.comment   { display: none; }
+	div.footer    { display: none; }
+	div.referer   { display: none; }
+}
+
+ at media screen {
+	div.main { margin-left: 20%;}
+	div.adminmenu { display: block;	}
+	div.sidebar { display: block; }
+	div.comment { display: block; }
+	div.footer { display: block; }
+	div.footer div { display: block; }
+	div.referer { display: block;}
+}
+
+div.hello {
+	text-align: right;
+	font-size: 80%;
+	margin-top: 0px;
+}
+
+/*
+  added by kubo for ruby-oci8.
+ */
+div.sidebar a.logo {
+  text-indent: 2em;
+  text-align: center;
+  color: red;
+  font-family: Impact,Chicago;
+  font-size: 350%;
+}

Added: web/doc_root/en/.htaccess
===================================================================
--- web/doc_root/en/.htaccess	                        (rev 0)
+++ web/doc_root/en/.htaccess	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,11 @@
+Options +ExecCGI
+
+AddHandler cgi-script .cgi
+DirectoryIndex hiki.cgi
+
+<Files "hikiconf.rb">
+	deny from all
+</Files>
+
+RewriteEngine on
+RewriteRule ^(.+)\.html hiki.cgi?$1 [L]

Added: web/doc_root/en/hiki.cgi
===================================================================
--- web/doc_root/en/hiki.cgi	                        (rev 0)
+++ web/doc_root/en/hiki.cgi	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,5 @@
+#! /usr/bin/env ruby
+hiki_dir = File.expand_path(File.dirname(__FILE__)) + '/../../hiki_src'
+
+$LOAD_PATH << hiki_dir
+load hiki_dir + '/hiki.cgi'


Property changes on: web/doc_root/en/hiki.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: web/doc_root/en/hikiconf.rb
===================================================================
--- web/doc_root/en/hikiconf.rb	                        (rev 0)
+++ web/doc_root/en/hikiconf.rb	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,126 @@
+# $Id: hikiconf.rb.sample.en,v 1.10 2006/07/03 01:19:13 fdiary Exp $
+# Copyright (C) 2002-2003 TAKEUCHI Hitoshi <hitoshi at namaraii.com>
+
+#=================================
+#  Items which must be changed.
+#=================================
+
+lang = 'en'
+
+# Directory where data is stored (Necessary)
+#   The directory where page contents or update time etc is stored.
+#   It is recommended to specify where one can't access via WWW.
+#   All of files and directories in this directory must be writable by WWW server.
+ at data_path = File.dirname(__FILE__) + "/../../hiki_data/#{lang}"
+
+# Mail server (Optional)
+#   Specify name of the mail server. This may take effect when @mail_on_update is true.
+ at smtp_server     = 'localhost'
+
+# Whether to use plugins (Optional)
+ at use_plugin      = true
+
+#====================================================================
+#  Settings which is modifiable from the administration menu.
+#  Modify if necessary.
+#  If you once change them from the administration menu, 
+#  editing this file takes no effect.
+#====================================================================
+# Site name
+#   Your side name. This is displayed in page title etc.
+ at site_name       = 'hoge hoge'
+
+# Site administrator's name
+#   Site administrator's name. This is displayed in footer.
+ at author_name     = 'anonymous'
+
+# Whether to mail on update
+#   If you set this true, the server @smtp_server sends mail to the address @mail
+#   when a page is updated.
+ at mail_on_update  = false
+
+# Mail address where update information to be sent.
+# Multiple addresses are available.
+ at mail            = ['hoge at example.net']
+
+# Theme
+#   Theme name.
+ at theme           = 'hiki'
+#   URL of the theme.
+ at theme_url       = 'theme'
+#   Path of the theme.
+ at theme_path      = 'theme'
+
+# Sidebar
+#   Set this false when you use a theme which does not support sidebar.
+ at use_sidebar     = true
+
+# CSS class name of the main area.
+ at main_class      = 'main'
+
+# CSS class name of the sidebar.
+ at sidebar_class   = 'sidebar'
+
+# Auto link
+#   Set this true if you'd like to link to existing pages automatically.
+ at auto_link       = false
+
+# Whether to make WikiName link (Optional)
+ at use_wikiname    = true
+
+# XML-RPC
+#   Whether to enable XML-RPC interfaces.
+ at xmlrpc_enabled  = true
+
+#=========================================
+#  Items that can be changed.
+#=========================================
+
+# The filename of CGI that is included in URI (Optional)
+ at cgi_name        = 'hiki.cgi'
+
+# The base URL (Optional)
+#    The URL excepting the CGI name from the Hiki's one.
+#    (eg. If the hiki is placed on http://example.com/hiki/hiki.cgi,
+#    @base_url should be `http://example.com/hiki/'.)
+#
+#    This is set automatically in most cases, but you should specify it
+#    when it works wrong (for example, in case of a reverse proxy.)
+ at base_url  = "http://#{ENV['SERVER_NAME']}:#{ENV['SERVER_PORT']}/#{lang}/"
+
+# The cache directory (Optional)
+#    Specify the directory for cache used by plugins.
+#@cache_path      = "#{@data_path}/cache"
+
+# The template directory (Optional)
+#    Specify the directory where template files are in.
+#@template_path   = 'template'
+
+# Formatting Style (Optional)
+#   Specify style name if you'd like to use the style other than default.
+#   'default' or 'rd+' is available now.
+#@style           = 'default'
+
+# `From' address of the update notification mail. (Optional)
+#@mail_from      = 'from at mail.address.hoge'
+
+# Keyword highlight (Optional)
+#@hilight_keys    = true
+
+# The charset of output (Optional)
+ at charset         = 'utf-8'
+
+# Timeout second (Optional)
+#@timeout         = 30
+
+# set this true when you debug plugins.
+#@plugin_debug    = false
+
+ at options         = {}                    # DO NOT MODIFY THIS LINE!!
+
+# Describe options passed to plugins. (Optional)
+#   Some plugins' behavior changes when options are passed.
+#   See the document of the plugin for details.
+#
+# Example:
+# @options['amazon.aid'] = 'amazon-01' 

Added: web/doc_root/hiki_base.css
===================================================================
--- web/doc_root/hiki_base.css	                        (rev 0)
+++ web/doc_root/hiki_base.css	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,35 @@
+ins.added {
+	font-weight: bold;
+}
+
+del.deleted {
+	text-decoration: line-through;
+}
+
+form.update textarea.keyword {
+        width: 15em;
+        height: 3em;
+}
+
+/* 02help */
+div.helptlbr {
+	font-size: small;
+	padding: 1px;
+}
+
+span.helpbttn {
+	border-style: solid;
+	border-width: 0px 0px 1px 0px;
+}
+
+ at media print{
+  div.adminmenu{
+    display: none;
+  }
+  div.main{
+    margin-left: 0;
+  }
+  div.sidebar{
+    display: none;
+  }
+}

Added: web/doc_root/index.html
===================================================================
--- web/doc_root/index.html	                        (rev 0)
+++ web/doc_root/index.html	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,47 @@
+<!DOCTYPE html
+    PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+    "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+  <meta http-equiv="Content-Language" content="en">
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <meta http-equiv="Content-Script-Type" content="text/javascript">
+  <meta http-equiv="Content-Style-Type" content="text/css">
+  <title>ruby-oci8 - Top Page</title>
+  <link rel="stylesheet" type="text/css" href="hiki_base.css" media="all">
+  <link rel="stylesheet" type="text/css" href="css/ruby-oci8.css" media="all">
+<script language="javascript"><!--
+  lang = 'en'
+  if (navigator.language && navigator.language.indexOf('ja') == 0) {
+    lang = 'ja'
+  }
+  location.href = location.href.replace(/[^\/]*$/, lang) + '/'
+//--></script>
+</head>
+
+<body>
+<a name="top"> </a>
+<div class="main">
+<div><div class="day">
+  <h2><span class="date"></span><span class="title">Select Your Language</span></h2>
+  <div class="body">
+    <div class="section">
+<ul>
+<li><a href="en/">English</a>
+<li><a href="ja/">Japanese</a>
+</ul>
+    </div>
+  </div>
+</div>
+
+</div>
+</div>
+
+<hr style="display: none">
+<div class="sidebar">
+  <p><a href="." class="logo">ruby-oci8</a>
+<br>
+[ <a href="en/">English</a> | <a href="ja/">Japanese</a> ]</p>
+</div>
+
+</body>

Added: web/doc_root/ja/.htaccess
===================================================================
--- web/doc_root/ja/.htaccess	                        (rev 0)
+++ web/doc_root/ja/.htaccess	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,11 @@
+Options +ExecCGI
+
+AddHandler cgi-script .cgi
+DirectoryIndex hiki.cgi
+
+<Files "hikiconf.rb">
+	deny from all
+</Files>
+
+RewriteEngine on
+RewriteRule ^(.+)\.html hiki.cgi?$1 [L]

Added: web/doc_root/ja/hiki.cgi
===================================================================
--- web/doc_root/ja/hiki.cgi	                        (rev 0)
+++ web/doc_root/ja/hiki.cgi	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,5 @@
+#! /usr/bin/env ruby
+hiki_dir = File.expand_path(File.dirname(__FILE__)) + '/../../hiki_src'
+
+$LOAD_PATH << hiki_dir
+load hiki_dir + '/hiki.cgi'


Property changes on: web/doc_root/ja/hiki.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: web/doc_root/ja/hikiconf.rb
===================================================================
--- web/doc_root/ja/hikiconf.rb	                        (rev 0)
+++ web/doc_root/ja/hikiconf.rb	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,126 @@
+# $Id: hikiconf.rb.sample.en,v 1.10 2006/07/03 01:19:13 fdiary Exp $
+# Copyright (C) 2002-2003 TAKEUCHI Hitoshi <hitoshi at namaraii.com>
+
+#=================================
+#  Items which must be changed.
+#=================================
+
+lang = 'ja'
+
+# Directory where data is stored (Necessary)
+#   The directory where page contents or update time etc is stored.
+#   It is recommended to specify where one can't access via WWW.
+#   All of files and directories in this directory must be writable by WWW server.
+ at data_path = File.dirname(__FILE__) + "/../../hiki_data/#{lang}"
+
+# Mail server (Optional)
+#   Specify name of the mail server. This may take effect when @mail_on_update is true.
+ at smtp_server     = 'localhost'
+
+# Whether to use plugins (Optional)
+ at use_plugin      = true
+
+#====================================================================
+#  Settings which is modifiable from the administration menu.
+#  Modify if necessary.
+#  If you once change them from the administration menu, 
+#  editing this file takes no effect.
+#====================================================================
+# Site name
+#   Your side name. This is displayed in page title etc.
+ at site_name       = 'hoge hoge'
+
+# Site administrator's name
+#   Site administrator's name. This is displayed in footer.
+ at author_name     = 'anonymous'
+
+# Whether to mail on update
+#   If you set this true, the server @smtp_server sends mail to the address @mail
+#   when a page is updated.
+ at mail_on_update  = false
+
+# Mail address where update information to be sent.
+# Multiple addresses are available.
+ at mail            = ['hoge at example.net']
+
+# Theme
+#   Theme name.
+ at theme           = 'hiki'
+#   URL of the theme.
+ at theme_url       = 'theme'
+#   Path of the theme.
+ at theme_path      = 'theme'
+
+# Sidebar
+#   Set this false when you use a theme which does not support sidebar.
+ at use_sidebar     = true
+
+# CSS class name of the main area.
+ at main_class      = 'main'
+
+# CSS class name of the sidebar.
+ at sidebar_class   = 'sidebar'
+
+# Auto link
+#   Set this true if you'd like to link to existing pages automatically.
+ at auto_link       = false
+
+# Whether to make WikiName link (Optional)
+ at use_wikiname    = true
+
+# XML-RPC
+#   Whether to enable XML-RPC interfaces.
+ at xmlrpc_enabled  = true
+
+#=========================================
+#  Items that can be changed.
+#=========================================
+
+# The filename of CGI that is included in URI (Optional)
+ at cgi_name        = 'hiki.cgi'
+
+# The base URL (Optional)
+#    The URL excepting the CGI name from the Hiki's one.
+#    (eg. If the hiki is placed on http://example.com/hiki/hiki.cgi,
+#    @base_url should be `http://example.com/hiki/'.)
+#
+#    This is set automatically in most cases, but you should specify it
+#    when it works wrong (for example, in case of a reverse proxy.)
+ at base_url  = "http://#{ENV['SERVER_NAME']}:#{ENV['SERVER_PORT']}/#{lang}/"
+
+# The cache directory (Optional)
+#    Specify the directory for cache used by plugins.
+#@cache_path      = "#{@data_path}/cache"
+
+# The template directory (Optional)
+#    Specify the directory where template files are in.
+#@template_path   = 'template'
+
+# Formatting Style (Optional)
+#   Specify style name if you'd like to use the style other than default.
+#   'default' or 'rd+' is available now.
+#@style           = 'default'
+
+# `From' address of the update notification mail. (Optional)
+#@mail_from      = 'from at mail.address.hoge'
+
+# Keyword highlight (Optional)
+#@hilight_keys    = true
+
+# The charset of output (Optional)
+ at charset         = 'utf-8'
+
+# Timeout second (Optional)
+#@timeout         = 30
+
+# set this true when you debug plugins.
+#@plugin_debug    = false
+
+ at options         = {}                    # DO NOT MODIFY THIS LINE!!
+
+# Describe options passed to plugins. (Optional)
+#   Some plugins' behavior changes when options are passed.
+#   See the document of the plugin for details.
+#
+# Example:
+# @options['amazon.aid'] = 'amazon-01' 


Property changes on: web/hiki_data/en/backup
___________________________________________________________________
Name: svn:ignore
   + *



Property changes on: web/hiki_data/en/cache/parser
___________________________________________________________________
Name: svn:ignore
   + *


Added: web/hiki_data/en/hiki.conf
===================================================================
--- web/hiki_data/en/hiki.conf	                        (rev 0)
+++ web/hiki_data/en/hiki.conf	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,50 @@
+#
+# hiki configuration file via CGI $Revision: 1.5 $
+#
+
+#
+# basic
+#
+site_name = "ruby-oci8"
+author_name = "ruby-oci8 developers"
+mail = [
+"hoge at example.net",
+]
+mail_on_update = false
+
+#
+# password
+#
+password = ""
+
+#
+# theme
+#
+theme = "hiki"
+theme_url = "../css/ruby-oci8.css"
+theme_path = "theme"
+use_sidebar = true
+main_class = "main"
+sidebar_class = "sidebar"
+auto_link = false
+use_wikiname = false
+
+#
+# options for plugins
+#
+options2 = {
+"append-css.css" => "",
+"sp.notselected" => "bbs.rb\nmath.rb\ncd.rb\nsearch.rb\nshow_plugins.rb\nrss.rb\nedit_user.rb\nisbn.rb\ntodo.rb\ncomment.rb\ndiffmail.rb\nhistory.rb\nappend-css.rb\nhighlight.rb\nsrc.rb\ncategory.rb\norphan.rb\nits.rb\ntrackback.rb\nnote.rb\nauth_typekey.rb\nquote_page.rb\nrbl.rb\nrss-show.rb\nfrozenmark.rb\nreferer.rb\nincremental_search.rb\npagerank.rb\nrank.rb\nrecent2.rb\nattach.rb\nentityref.rb\nfootnote.rb\ntemplate.rb\namazon.rb\nsitemap.rb\nsimilarity.rb\nreadlirs.rb\nkeyword.rb\n",
+"sp.selected" => "google-sitemaps.rb\n",
+"template.autoinsert" => true,
+"template.default" => "InterWikiName",
+"template.keyword" => nil,
+"user.auth" => 0,
+"user.list" => {
+},
+}
+
+#
+# XML-RPC interfaces
+#
+xmlrpc_enabled = true

Added: web/hiki_data/en/info.db
===================================================================
--- web/hiki_data/en/info.db	                        (rev 0)
+++ web/hiki_data/en/info.db	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,354 @@
+{
+"APIReference" => {
+:count => 65,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1169284974),
+:references => [
+"api",
+],
+:title => "API Reference",
+},
+"FAQ" => {
+:count => 70,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1169641718),
+:references => [
+"FAQ_plsql_out_param",
+"FAQ_long_or_long_raw",
+"FAQ_uninstall",
+],
+:title => "FAQ",
+},
+"FAQ_long_or_long_raw" => {
+:count => 27,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1169695583),
+:references => [
+],
+:title => "How can I use LONG or LONG RAW data?",
+},
+"FAQ_plsql_out_param" => {
+:count => 25,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1169641653),
+:references => [
+],
+:title => "How can I get PL/SQL OUT parameters?",
+},
+"FAQ_uninstall" => {
+:count => 11,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1169528599),
+:references => [
+],
+:title => "How to uninstall ruby-oci8",
+},
+"FrontPage" => {
+:count => 251,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1168180687),
+:references => [
+"InstallForInstantClient",
+],
+:title => "Top Page",
+},
+"HowToInstall" => {
+:count => 99,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1168175222),
+:references => [
+"InstallBinaryPackage",
+"InstallForFullClient",
+"InstallForInstantClient",
+],
+:title => "How to Install",
+},
+"InstallBinaryPackage" => {
+:count => 32,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1171256169),
+:references => [
+],
+:title => "Binary Package",
+},
+"InstallForFullClient" => {
+:count => 28,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1192083294),
+:references => [
+"ReportInstallProblem",
+],
+:title => "Oracle Full Client",
+},
+"InstallForInstantClient" => {
+:count => 26,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1192083524),
+:references => [
+"ReportInstallProblem",
+],
+:title => "Oracle Instant Client",
+},
+"InterWikiName" => {
+:count => 31,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1169541634),
+:references => [
+],
+:title => "InterWikiName",
+},
+"PlatformSpecificIssue" => {
+:count => 60,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1192665604),
+:references => [
+"InstallForInstantClient",
+"InstallForFullClient",
+],
+:title => "Platform Specific Issues",
+},
+"ReportInstallProblem" => {
+:count => 52,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1168171962),
+:references => [
+"PlatformSpecificIssue",
+],
+:title => "Report Install Problem",
+},
+"SideMenu" => {
+:count => 114,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1199075144),
+:references => [
+"FrontPage",
+"HowToInstall",
+"InstallBinaryPackage",
+"InstallForFullClient",
+"InstallForInstantClient",
+"ReportInstallProblem",
+"PlatformSpecificIssue",
+"APIReference",
+"api",
+"api_OCI8",
+"api_OCI8Cursor",
+"api_OCI8CLOB",
+"api_OCI8BLOB",
+"api_OCI8BFILE",
+"api_OCI8MetadataTable",
+"api_OCI8MetadataView",
+"api_OCI8MetadataColumn",
+"dbd_oci8",
+"FAQ",
+"dev_SourceCode",
+"dev_CodingStyle",
+"dev_APIWrap",
+],
+:title => "SideMenu",
+},
+"api" => {
+:count => 41,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195830265),
+:references => [
+"api_OCI8",
+"api_OCI8Cursor",
+"api_OCI8CLOB",
+"api_OCI8BLOB",
+"api_OCI8BFILE",
+"api_OCI8MetadataTable",
+"api_OCI8MetadataView",
+"api_OCI8MetadataColumn",
+],
+:title => "ruby-oci8 API",
+},
+"api_OCI8" => {
+:count => 59,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195981980),
+:references => [
+"api_OCI8Cursor",
+"api_OCI8MetadataTable",
+"api_OCI8MetadataView",
+"FAQ_long_or_long_raw",
+],
+:title => "OCI8",
+},
+"api_OCI8BFILE" => {
+:count => 28,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195824047),
+:references => [
+],
+:title => "OCI8::BFILE",
+},
+"api_OCI8BLOB" => {
+:count => 31,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195824014),
+:references => [
+],
+:title => "OCI8::BLOB",
+},
+"api_OCI8CLOB" => {
+:count => 31,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1196094116),
+:references => [
+],
+:title => "OCI8::CLOB",
+},
+"api_OCI8Cursor" => {
+:count => 45,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195829971),
+:references => [
+"api_OCI8MetadataColumn",
+],
+:title => "OCI8::Cursor",
+},
+"api_OCI8MetadataColumn" => {
+:count => 0,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195981539),
+:references => [
+"api_OCI8Cursor",
+"api_OCI8MetadataTable",
+"api_OCI8MetadataView",
+],
+:title => "OCI8::Metadata::Column",
+},
+"api_OCI8MetadataTable" => {
+:count => 0,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195981825),
+:references => [
+"api_OCI8",
+"api_OCI8MetadataColumn",
+],
+:title => "OCI8::Metadata::Table",
+},
+"api_OCI8MetadataView" => {
+:count => 0,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195981762),
+:references => [
+"api_OCI8",
+"api_OCI8MetadataColumn",
+],
+:title => "OCI8::Metadata::View",
+},
+"dbd_oci8" => {
+:count => 41,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195983779),
+:references => [
+],
+:title => "DBD::OCI8",
+},
+"dev_APIWrap" => {
+:count => 0,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1199075083),
+:references => [
+],
+:title => "API Wrap",
+},
+"dev_CodingStyle" => {
+:count => 0,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1198495154),
+:references => [
+],
+:title => "Coding Style",
+},
+"dev_SourceCode" => {
+:count => 0,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1198496693),
+:references => [
+],
+:title => "Source Code",
+},
+}
\ No newline at end of file


Property changes on: web/hiki_data/en/session
___________________________________________________________________
Name: svn:ignore
   + *


Added: web/hiki_data/en/text/APIReference
===================================================================
--- web/hiki_data/en/text/APIReference	                        (rev 0)
+++ web/hiki_data/en/text/APIReference	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,35 @@
+! Available APIs
+
+You can use four APIs using and depending on ruby-oci8.
+# ruby-oci8 native API
+# ruby-dbi
+# ActiveRecord
+# Og (ObjectGraph)
+
+! ruby-oci8 native API
+
+This is a native API of ruby-oci8.
+It consist of two layers. One is 'high-level API'. The other is 'low-level API'. Use the former for your application. The latter is not available on ruby-oci8 2.0.x, the developing version. 
+
+* [[api]]
+* [[ruby-oci8 low-level API|http://www.jiubao.org/ruby-oci8/manual.en.html]] (don't use this.)
+
+! ruby-dbi
+
+ruby-oci8 includes DBD::OCI8, DBD Driver for Oracle Database. You can use ruby-dbi API also.
+
+* [[DBD::OCI8|http://www.jiubao.org/ruby-oci8/dbd_oci8.en.html]]
+
+! ActiveRecord
+
+ActiveRecord is an ORM(object-relational mapping) library of [[Ruby on Rails|http://www.rubyonrails.org/]]. It includes Oracle support, which uses ruby-oci8.
+
+* [[Rails: Complete API|http://api.rubyonrails.org/]]
+* [[Oracle on Rails Wiki|http://wiki.rubyonrails.com/rails/pages/Oracle]]
+
+! Og (ObjectGraph)
+
+Og (ObjectGraph) is an another ORM(object-relational mapping) library.
+I don't know how to use it. :-<
+
+* [[http://www.nitroproject.org/]]

Added: web/hiki_data/en/text/FAQ
===================================================================
--- web/hiki_data/en/text/FAQ	                        (rev 0)
+++ web/hiki_data/en/text/FAQ	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,3 @@
+* [[FAQ_plsql_out_param]]
+* [[FAQ_long_or_long_raw]]
+* [[FAQ_uninstall]]

Added: web/hiki_data/en/text/FAQ_long_or_long_raw
===================================================================
--- web/hiki_data/en/text/FAQ_long_or_long_raw	                        (rev 0)
+++ web/hiki_data/en/text/FAQ_long_or_long_raw	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,35 @@
+{{toc}}
+
+! LONG
+
+!! Inserting and updating a LONG column
+You have no need to do special thing. Just insert and update a value as a String.
+
+note: The maximum length is 65535 on 0.1.15 or earlier. It is 2G on 0.1.16 or later.
+
+!! Fetching a LONG column
+
+The maximum length is 65535 on 0.1.15 or eariler.
+As for 0.0.16 and 1.0.x use OCI8#long_read_len to change the maximum length.
+
+  # set the maximum data length
+  conn.long_read_len = 1024 * 1024 * 2
+
+The maximum length is 2G on 2.0.x. It doesn't depend on long_read_len, which is an internal buffer size to fetch a LONG data.
+
+! LONG RAW
+
+!! Inserting and updating a LONG RAW column
+
+Explicitly bind the value as RAW.
+  filename = 'SagradaFamilia.gif'
+  image = open(filename, "rb").read()
+  cursor = conn.parse('insert into photos values(:1,:2)')
+  cursor.bind_param(1, filename))
+  # bind image as RAW
+  cursor.bind_param(2, image, OCI8::RAW)
+  cursor.exec
+
+!! Fetching a LONG RAW column
+
+Just fetch a column. The maximum length limit is same with a LONG column.

Added: web/hiki_data/en/text/FAQ_plsql_out_param
===================================================================
--- web/hiki_data/en/text/FAQ_plsql_out_param	                        (rev 0)
+++ web/hiki_data/en/text/FAQ_plsql_out_param	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,86 @@
+{{toc}}
+
+! Package source for sample codes
+ CREATE OR REPLACE PACKAGE my_package IS
+   PROCEDURE my_proc(a1 IN number, a2 IN varchar2, b1 OUT number, b2 OUT varchar2);
+ END;
+ /
+ CREATE OR REPLACE PACKAGE BODY my_package IS
+   PROCEDURE my_proc(a1 IN number, a2 IN varchar2, b1 OUT number, b2 OUT varchar2) IS
+   BEGIN
+     b1 := a1 * 2;
+     b2 := UPPER(a2);
+   END;
+ END;
+ /
+
+! ruby-oci8 API
+!! Explicitly bind parameters by their names
+  # use OCI8::Cursor#bind_param and OCI8::Cursor#exec
+  cursor = conn.parse('begin my_package.my_proc(:a1, :a2, :b1, :b2); end;')
+  cursor.bind_param(':a1', 123)
+  cursor.bind_param(':a2', 'abc')
+  # bind as a Fixnum. The value is NULL.
+  cursor.bind_param(':b1', nil, Fixnum)
+  # bind as a String. The max length is 20. The value is NULL.
+  cursor.bind_param(':b2', nil, String, 20)
+  cursor.exec()
+  # If you bind the parameter by name, use the name.
+  p cursor[':b1'] # => 246
+  p cursor[':b2'] # => ABC
+
+!! Explicitly bind parameters by their positions
+  # use OCI8::Cursor#bind_param and OCI8::Cursor#exec
+  cursor = conn.parse('begin my_package.my_proc(:a1, :a2, :b1, :b2); end;')
+  cursor.bind_param(1, 123)
+  cursor.bind_param(2, 'abc')
+  cursor.bind_param(3, nil, Fixnum)
+  cursor.bind_param(4, nil, String, 20)
+  cursor.exec()
+  # If you bind the parameter by its position, use the position.
+  p cursor[3] # => 246
+  p cursor[4] # => "ABC"
+
+!! Implicitly bind parameters
+  # use OCI8::Cursor#exec with bind parameters.
+  cursor = conn.parse('begin my_package.my_proc(:a1, :a2, :b1, :b2); end;')
+  cursor.exec(123, 'abc', [nil, Fixnum], [nil, String, 20])
+  # The first argument is the bind value for the first position.
+  # The second is for the second. etc.
+  # If the value is a Array, the first element is the value to bind,
+  # the second is type, the third is the maximum length.
+  # They are bound by their position.
+  p cursor[3] # => 246
+  p cursor[4] # => "ABC"
+
+!! Execute and get bind parameters at once.
+  # OCI8#exec with bind parameters
+  # It returns an array of all parameter values if the specified sql is a PL/SQL block.
+  params = conn.exec('begin my_package.my_proc(:a1, :a2, :b1, :b2); end;',
+                      123, 'abc', [nil, Fixnum], [nil, String, 20])
+  p params[0] # => 123
+  p params[1] # => "abc"
+  p params[2] # => 246
+  p params[3] # => "ABC"
+
+! DBD::OCI8
+Ruby/DBI itself doesn't support OUT parameters. It is done
+by a driver specific function.
+  sth = dbh.prepare('begin my_package.my_proc(?, ?, ?, ?); end;')
+  sth.bind_param(1, 123)
+  sth.bind_param(2, 'abc')
+  # Use nill with a type attribute to bind NULL value.
+  sth.bind_param(3, nil, {'type' => Fixnum})
+  # But as for String it cannot because there is no
+  # way to set the maximum length.
+  sth.bind_param(4, ' ' * 20)
+  sth.execute
+  # call a driver specific function.
+  p sth.func(:bind_value, 3) # => 246
+  p sth.func(:bind_value, 4) # => "ABC"
+
+! Rails (ActiveRecord)
+
+Get the raw connection and use it with ruby-oci8 API.
+  conn = ActiveRecord::Base.connection.raw_connection
+  ...

Added: web/hiki_data/en/text/FAQ_uninstall
===================================================================
--- web/hiki_data/en/text/FAQ_uninstall	                        (rev 0)
+++ web/hiki_data/en/text/FAQ_uninstall	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,10 @@
+Delete the following three files.
+* oci8.rb
+* oci8lib.so
+* DBD/OCI8/OCI8.rb
+
+''oci8.rb'' and ''DBD/OCI8/OCI8.rb'' are in sitelib directory:
+ ruby -r rbconfig -e "puts Config::CONFIG['sitelibdir']"
+
+''oci8lib.so'' is in sitearch directory:
+ ruby -r rbconfig -e "puts Config::CONFIG['sitearchdir']"

Added: web/hiki_data/en/text/FrontPage
===================================================================
--- web/hiki_data/en/text/FrontPage	                        (rev 0)
+++ web/hiki_data/en/text/FrontPage	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,12 @@
+! What is ruby-oci8
+
+ruby-oci8 is a ruby interface for [[Oracle Database]]. This is available with Oracle8, Oracle8i, Oracle9i, Oracle10g, [[Oracle XE]] and [[Oracle Instant Client]]
+
+ruby-oci8-1.0 is stable version. ruby-oci8-2.0-unstable is in development.
+Don't use 2.0-unstable for your projects.
+
+As for Oracle7, use [[Oracle7 Module for Ruby]] by Yoshida Masato.
+
+! Sample one-liner
+connect to scott/tiger, select emp and print as CSV format.
+  ruby -r oci8 -e "OCI8.new('scott', 'tiger').exec('select * from emp') do |r| puts r.join(','); end"

Added: web/hiki_data/en/text/HowToInstall
===================================================================
--- web/hiki_data/en/text/HowToInstall	                        (rev 0)
+++ web/hiki_data/en/text/HowToInstall	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,5 @@
+For Windows users, it is the best to install binary package.
+* [[InstallBinaryPackage]] (Windows only)
+To install from source code, it depends on what type of Oracle client do you use.
+* [[InstallForFullClient]]
+* [[InstallForInstantClient]]

Added: web/hiki_data/en/text/InstallBinaryPackage
===================================================================
--- web/hiki_data/en/text/InstallBinaryPackage	                        (rev 0)
+++ web/hiki_data/en/text/InstallBinaryPackage	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,13 @@
+! 1. Check the Oracle client version.
+
+Binary packages are available only for Oracle 8.1.5 or later.
+
+! 2. Download
+
+Download '''ruby-oci8-VERSION-mswin32.rb''' from 
+[[rubyforge|http://rubyforge.org/frs/?group_id=256]].
+
+note: 1.0 is stable version. 2.0-unstable is in development.
+
+! 3. Run the package.
+  C:> ruby ruby-oci8-VERSION-mswin32.rb

Added: web/hiki_data/en/text/InstallForFullClient
===================================================================
--- web/hiki_data/en/text/InstallForFullClient	                        (rev 0)
+++ web/hiki_data/en/text/InstallForFullClient	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,81 @@
+! 1. Download source code
+
+Download '''ruby-oci8-VERSION.tar.gz''' from 
+[[rubyforge|http://rubyforge.org/frs/?group_id=256]].
+
+note: 1.0 is stable version. 2.0-unstable is in development.
+
+! 2. Check whether '''ruby''' is in PATH.
+
+!! UNIX
+  $ ruby -v
+  ruby 1.8.5 (2006-08-25) [i486-linux]
+
+!! Windows
+  C:\> ruby -v
+  ruby 1.8.5 (2006-08-25) [i386-mswin32]
+
+! 3. Check whether '''make''' is in PATH.
+
+!! UNIX or Windows(cygwin, mingw32)
+  $ which make
+
+!! Windows(mswin32)
+  C:\> nmake /?
+If it cannot be found, run vcvars32.bat and check it again.
+  C:\> C:\Program Files\Microsoft Visual Studio\VC98\Bin\vcvars32.bat
+  C:\> nmake /?
+
+! 4. Check whether '''sqlplus''' runs correctly.
+
+!! UNIX
+  $ sqlplus USERNAME/PASSWORD
+
+!! Windows
+  C:\> sqlplus USERNAME/PASSWORD
+
+! 5. Check library search path.
+
+!! UNIX
+
+Set your OS's library search path to point to $ORACLE_HOME/lib.
+If the database is 64-bit and the ruby is 32-bit, use $ORACLE_HOME/lib32
+instead.
+
+||!OS||!Environment Variable Name||
+||Linux||LD_LIBRARY_PATH||
+||Solaris 32-bit ruby||LD_LIBRARY_PATH_32 or LD_LIBRARY_PATH||
+||Solaris 64-bit ruby||LD_LIBRARY_PATH_64 or LD_LIBRARY_PATH||
+||HP-UX PA-RISC 32-bit ruby||SHLIB_PATH||
+||HP-UX PA-RISC 64-bit ruby||LD_LIBRARY_PATH||
+||HP-UX IA64||LD_LIBRARY_PATH||
+||Mac OS X||DYLD_LIBRARY_PATH||
+||AIX||LIBPATH||
+
+Do not forget to export the variable.
+  $ LD_LIBRARY_PATH=$ORACLE_HOME/lib
+  $ export LD_LIBRARY_PATH
+
+!! Windows
+If sqlplus runs correctly, library search path has no problem.
+
+! 6. make and install
+
+If you have a problem, [[report me|ReportInstallProblem]].
+
+!! UNIX or Windows(cygwin, mingw32)
+
+  gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
+  cd ruby-oci8-VERSION
+  make
+  make install
+
+note: If you use '''sudo''', use it only when running 'make install'.
+sudo doesn't pass library search path to the executing command for security reasons.
+
+!! Windows(mswin32)
+
+  gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
+  cd ruby-oci8-VERSION
+  nmake
+  nmake install

Added: web/hiki_data/en/text/InstallForInstantClient
===================================================================
--- web/hiki_data/en/text/InstallForInstantClient	                        (rev 0)
+++ web/hiki_data/en/text/InstallForInstantClient	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,109 @@
+! 1. Download source code
+
+Download '''ruby-oci8-VERSION.tar.gz''' from 
+[[rubyforge|http://rubyforge.org/frs/?group_id=256]].
+
+note: 1.0 is stable version. 2.0-unstable is in development.
+
+! 2. Donwload Instant Client Packages.
+
+Download at least two packages 
+"Instant Client Package - '''Basic'''" and "Instant Client Package - '''SDK'''"
+from [[Oracle Technology Network|http://www.oracle.com/technology/tech/oci/instantclient/index.html]].
+
+note: use 32-bit packages for 32-bit ruby even though the OS is 64-bit.
+
+! 3. install Oracle Instant Client Packages.
+
+!! UNIX zip packages
+
+  mkdir /opt
+  mkdir /opt/oracle
+  cd /opt/oracle
+  unzip path/to/instantclient-basic-OS-VERSION.zip
+  unzip path/to/instantclient-sdk-OS-VERSION.zip
+
+!! Linux rpm packages
+
+  rpm -i path/to/oracle-instantclient-basic-VERSION-ARCH.rpm
+  rpm -i path/to/oracle-instantclient-devel-VERSION-ARCH.rpm
+
+!! Windows
+
+  C:
+  mkdir C:\oracle
+  cd c:\oracle
+  unzip path/to/instantclient-basic-OS-VERSION.zip
+  unzip path/to/instantclient-sdk-OS-VERSION.zip
+
+! 4. check installed libraries. (UNIX zip packages only)
+
+!! UNIX
+
+If /opt/oracle/instantclient10_1/libclntsh.so is not found, make
+a symbolic link to link the library.
+
+  cd /opt/oracle/instantclient10_1
+  ln -s libclntsh.so.10.1 libclntsh.so
+
+Note:
+* use libclntsh.sl instead of libclntsh.so on HP-UX PA-RISC.
+* use libclntsh.dylib instead of libclntsh.so on Mac OS X.
+* skip this step for AIX.
+
+! 5. Set library search path.
+
+Set your OS's library search path to point to the installed location.
+
+||!OS||!Environment Variable Name||
+||Linux||LD_LIBRARY_PATH||
+||Solaris 32-bit ruby||LD_LIBRARY_PATH_32 or LD_LIBRARY_PATH||
+||Solaris 64-bit ruby||LD_LIBRARY_PATH_64 or LD_LIBRARY_PATH||
+||HP-UX PA-RISC 32-bit ruby||SHLIB_PATH||
+||HP-UX PA-RISC 64-bit ruby||LD_LIBRARY_PATH||
+||HP-UX IA64||LD_LIBRARY_PATH||
+||Mac OS X||DYLD_LIBRARY_PATH||
+||AIX||LIBPATH||
+||Windows||PATH||
+
+!! UNIX zip packages
+
+For example:
+  $ LD_LIBRARY_PATH=/opt/oracle/instantclient_10_2
+  $ export LD_LIBRARY_PATH
+
+!! Linux rpm packages
+
+For example:
+  $ LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client/lib
+  $ export LD_LIBRARY_PATH
+
+!! Windows
+
+For example:
+  C:\> PATH=C:\oracle\instantclient_10_2;%PATH%
+
+! 6. make and install.
+
+If you have a problem, [[report me|ReportInstallProblem]].
+
+!! UNIX or Windows(cygwin, mingw32)
+
+  gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
+  cd ruby-oci8-VERSION
+  make
+  make install
+
+ruby-oci8 try to get the Instant Client location from library search path.
+
+note: If you use '''sudo''', use it only when running 'make install'.
+sudo doesn't pass library search path to the executing command for security reasons.
+
+!! Windows(mswin32)
+
+  gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
+  cd ruby-oci8-VERSION
+  nmake
+  nmake install
+
+ruby-oci8 try to get the Instant Client location from environment variable PATH.

Added: web/hiki_data/en/text/InterWikiName
===================================================================
--- web/hiki_data/en/text/InterWikiName	                        (rev 0)
+++ web/hiki_data/en/text/InterWikiName	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,5 @@
+* [[Oracle Database|http://www.oracle.com]] alias
+* [[Oracle XE|http://www.oracle.com/technology/products/database/xe/index.html]] alias
+* [[Oracle Instant Client|http://www.oracle.com/technology/tech/oci/instantclient/index.html]] alias
+* [[Oracle7 Module for Ruby|http://www.yoshidam.net/Ruby.html#oracle]] alias
+* [[YARV|http://www.atdot.net/yarv/]] alias

Added: web/hiki_data/en/text/PlatformSpecificIssue
===================================================================
--- web/hiki_data/en/text/PlatformSpecificIssue	                        (rev 0)
+++ web/hiki_data/en/text/PlatformSpecificIssue	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,86 @@
+! Intel Mac
+
+Oracle hasn't provided intel mac binary yet.
+[[Oracle Instant Client]] 10.1.0.3 is ppc. It doesn't work with intel ruby.
+
+There are two workarounds.
+# compile ruby as ppc. (look at [[Raimonds Simanovskis's blog|http://blog.rayapps.com/2007/08/27/how-to-setup-ruby-and-oracle-client-on-intel-mac/]])
+# use [[ruby-odbc|http://www.ch-werner.de/rubyodbc/]] and a third party ODBC driver ([[Actual Technologies|http://www.actualtechnologies.com/]] or [[OpenLink Software|http://uda.openlinksw.com/]]).
+
+! Solaris
+
+You need a same compiler which is used to make ruby itself.
+
+There are two ruby packages.
+# [[Sunfreeware.com|http://www.sunfreeware.com/]]
+# [[Blastwave.org|http://www.blastwave.org/]]
+
+The former is compiled by gcc. The latter is compiled by
+[[Sun Studio|http://developers.sun.com/sunstudio/]].
+The both compilers are freely available.
+
+If you use Blastwave.org's ruby and want not to install Sun Studio,
+you can edit rbconfig.rb by your self. [[(look at here)|http://forum.textdrive.com/viewtopic.php?id=12630]]
+
+! Linux
+
+Use the same bit-width of libraries with ruby. For example, x86_64 instant client for x86_64 ruby and 32-bit instant client for 32-bit ruby. It depends on the ruby but not on the OS. As for full client, x86_64 ruby cannot use with 32-bit full client, but 32-bit ruby can use with 64-bit full client because 32-bit libraries are in $ORACLE_HOME/lib32.
+
+To check which type of ruby do you use:
+  file `which ruby`
+note: '''`''' is a backquote.
+
+! FreeBSD
+
+There are two ways.
+* use ruby and instantclient on linux emulator
+* use oracle8-client port
+
+In the latter case, compile and install as follows.
+* install oracle8-client
+  cd /usr/ports/databases/oracle8-client
+  make
+  make install
+* set an environment variable ORACLE_HOME
+  export ORACLE_HOME=/usr/local/oracle8-client
+* extract ruby-oci8 tarball and replace oraconf.rb.
+  tar xvfz ruby-oci8-1.0.0-rc3.tar.gz
+  cd ruby-oci8-1.0.0-rc3/ext/oci8
+  mv oraconf.rb oraconf.rb.orig
+  wget http://ruby-oci8.rubyforge.org/svn/branches/ruby-oci8-1.0/ext/oci8/oraconf.rb
+
+The rest procedures are described at [[this page|InstallForFullClient]].
+
+note: You have no need to set LD_LIBRARY_PATH because 
+Oracle libraries in oracle8-client port are static ones.
+
+Not all faculties are available. Some tests in 'make check'
+are failed. Some tests cause busy loop. Check and use it
+at your own risk.
+
+! HP-UX
+
+You need a ruby which is linked with ''libpthread'' and ''libcl''.
+
+Look at [[http://www.alfonsomartone.itb.it/xvpucf.html]] for more detail.
+
+! Windows
+
+On some machines whose disk I/O is busy or which uses a slow disk, you may get a following error.
+  Permission denied - conftest.exe
+
+Edit mkmf.rb for a workaround.
+
+  def try_run(src, opt="")
+    if try_link0(src, opt)
+      xsystem("./conftest")
+    else
+      nil
+    end
+  ensure
+    # add the following one line.
+    sleep 1 if /mswin32|cygwin|mingw32|bccwin32/ =~ RUBYPLATFORM
+    rm_f "conftest*"
+  end
+
+See also: [[http://abstractplain.net/blog/?p=788]].

Added: web/hiki_data/en/text/ReportInstallProblem
===================================================================
--- web/hiki_data/en/text/ReportInstallProblem	                        (rev 0)
+++ web/hiki_data/en/text/ReportInstallProblem	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,32 @@
+Post the following information to [[rubyforge help forum|http://rubyforge.org/forum/forum.php?forum_id=1078]]
+or mail it to [[me|mailto:kubo at jiubao.org]].
+
+note: Before reporting, check [[PlatformSpecificIssue]].
+
+! last 100 lines of 'ext/oci8/mkmf.log'.
+
+   tail -100 ext/oci8/mkmf.log
+
+! the results of the following commands:
+    ruby --version
+    ruby -r rbconfig -e "p Config::CONFIG['host']"
+    ruby -r rbconfig -e "p Config::CONFIG['CC']"
+    ruby -r rbconfig -e "p Config::CONFIG['CFLAGS']"
+    ruby -r rbconfig -e "p Config::CONFIG['LDSHARED']"
+    ruby -r rbconfig -e "p Config::CONFIG['LDFLAGS']"
+    ruby -r rbconfig -e "p Config::CONFIG['DLDLAGS']"
+    ruby -r rbconfig -e "p Config::CONFIG['LIBS']"
+    ruby -r rbconfig -e "p Config::CONFIG['GNU_LD']"
+!! if you use gcc:
+    gcc --print-prog-name=ld
+    gcc --print-prog-name=as
+!! on platforms which can use both 32bit/64bit binaries:
+  file `which ruby`
+  file $ORACLE_HOME/bin/oracle  # Full Client
+  file INSTANT_CLIENT_DIRECTORY/libclntsh.*  # Instant Client
+  echo $LD_LIBRARY_PATH
+  echo $LIBPATH              # AIX
+  echo $SHLIB_PATH           # HP-UX PA-RISC 32-bit ruby
+  echo $DYLD_LIBRARY_PATH    # Mac OS X
+  echo $LD_LIBRARY_PATH_32   # Solaris 32-bit ruby
+  echo $LD_LIBRARY_PATH_64   # Solaris 64-bit ruby

Added: web/hiki_data/en/text/SideMenu
===================================================================
--- web/hiki_data/en/text/SideMenu	                        (rev 0)
+++ web/hiki_data/en/text/SideMenu	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,36 @@
+{{logo}}
+{{br}}
+[ English | {{link_to_japanese}} ]
+
+'''This site is under construction.'''
+
+! Site Map
+
+!! [[FrontPage]]
+
+!! Install and Setup
+* [[HowToInstall]]
+** [[InstallBinaryPackage]]
+** [[InstallForFullClient]]
+** [[InstallForInstantClient]]
+* [[ReportInstallProblem]]
+* [[PlatformSpecificIssue]]
+!! Usage
+* [[APIReference]]
+** [[api]]
+*** [[api_OCI8]]
+*** [[api_OCI8Cursor]]
+*** [[api_OCI8CLOB]]
+*** [[api_OCI8BLOB]]
+*** [[api_OCI8BFILE]]
+*** [[api_OCI8MetadataTable]]
+*** [[api_OCI8MetadataView]]
+*** [[api_OCI8MetadataColumn]]
+** [[dbd_oci8]]
+
+* [[FAQ]]
+
+!! Note for Developers
+* [[dev_SourceCode]]
+* [[dev_CodingStyle]]
+* [[dev_APIWrap]]

Added: web/hiki_data/en/text/api
===================================================================
--- web/hiki_data/en/text/api	                        (rev 0)
+++ web/hiki_data/en/text/api	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,8 @@
+* [[api_OCI8]] {{toc_here(api_OCI8)}}
+* [[api_OCI8Cursor]] {{toc_here(api_OCI8Cursor)}}
+* [[api_OCI8CLOB]] {{toc_here(api_OCI8CLOB)}}
+* [[api_OCI8BLOB]] {{toc_here(api_OCI8BLOB)}}
+* [[api_OCI8BFILE]] {{toc_here(api_OCI8BFILE)}}
+* [[api_OCI8MetadataTable]] {{toc_here(api_OCI8MetadataTable)}}
+* [[api_OCI8MetadataView]] {{toc_here(api_OCI8MetadataView)}}
+* [[api_OCI8MetadataColumn]] {{toc_here(api_OCI8MetadataColumn)}}

Added: web/hiki_data/en/text/api_OCI8
===================================================================
--- web/hiki_data/en/text/api_OCI8	                        (rev 0)
+++ web/hiki_data/en/text/api_OCI8	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,162 @@
+This is a class representing a database connection,
+which corresponds to java.sql.Connection of JDBC and
+database handle $dbh of Perl/DBI.
+
+! Class Methods
+
+!! OCI8.new(userid, password, dbname = nil, privilege = nil)
+
+connect to Oracle by ''userid'' and ''password''. ''dbname'' is the connect
+string of Net8. If you need DBA privilege, please set ''privilege''
+as :SYSDBA or :SYSOPER.
+If the Oracle client is 10g or later, you can use "//hostname_or_ip:port_no/oracle_sid" as ''dbname''.
+
+  # sqlplus scott/tiger
+  conn = OCI8.new("scott", "tiger")
+
+  # sqlplus scott/tiger at orcl.world
+  conn = OCI8.new("scott", "tiger", "orcl.world")
+
+  # sqlplus 'sys/change_on_install as sysdba'
+  conn = OCI8.new("sys", "change_on_install", nil, :SYSDBA)
+
+  # sqlplus scott/tiger@//oracle_db.example.com/XE
+  conn = OCI8.new("scott", "tiger", "//oracle_db.example.com/XE")
+
+To connect to Oracle by OS authentication, use nil for userid and password
+(new in 1.0.0-rc2.)
+
+! Instance Methods
+
+!! logoff()
+disconnect from Oracle. Uncommitted transaction is rollbacked.
+
+  conn = OCI8.new("scott", "tiger")
+  ... do something ...
+  conn.logoff
+
+!! exec(sql, *bindvars)
+execute the sql statement. The type of return value depends on
+the type of sql statement: select; insert, update and delete;
+create, alter and drop; and PL/SQL.
+
+When ''bindvars'' are specified, they are bound as bind variables
+before execution.
+
+In case of select statement with no block, it returns the
+instance of [[OCI8::Cursor]].
+
+  conn = OCI8.new('scott', 'tiger')
+  cursor = conn.exec('SELECT * FROM emp')
+  while r = cursor.fetch()
+    puts r.join(',')
+  end
+  cursor.close
+  conn.logoff
+
+In case of select statement with a block, it acts as iterator and
+returns the processed row counts. Fetched data is passed to the
+block as array. NULL value becomes nil in ruby.
+
+  conn = OCI8.new('scott', 'tiger')
+  num_rows = conn.exec('SELECT * FROM emp') do |r|
+    puts r.join(',')
+  end
+  puts num_rows.to_s + ' rows were processed.'
+  conn.logoff
+
+In case of insert, update or delete statement, it returns the
+number of processed rows.
+
+  conn = OCI8.new('scott', 'tiger')
+  num_rows = conn.exec('UPDATE emp SET sal = sal * 1.1')
+  puts num_rows.to_s + ' rows were updated.'
+  conn.logoff
+
+In case of create, alter or drop statement, it returns true.
+
+  conn = OCI8.new('scott', 'tiger')
+  conn.exec('CREATE TABLE test (col1 CHAR(6))')
+  conn.logoff
+
+In case of PL/SQL statement, it returns the array of bind
+variables.
+
+  conn = OCI8.new('scott', 'tiger')
+  conn.exec("BEGIN :str := TO_CHAR(:num, 'FM0999'); END;", 'ABCD', 123)
+  # => ["0123", 123]
+  conn.logoff
+
+Above example uses two bind variables which names are '':str''
+and '':num''. These initial values are "the string whose width
+is 4 and whose value is 'ABCD'" and "the number whose value is
+123". This method returns the array of these bind variables,
+which may modified by PL/SQL statement. The order of array is
+same with that of bind variables.
+
+!! parse(sql)
+create cursor, prepare to execute SQL statement and return the
+instance of [[OCI8::Cursor]].
+
+!! describe_table(table_name)
+(new in 1.0.0 without 'rc')
+
+returns [[api_OCI8MetadataTable]] or [[api_OCI8MetadataView]].
+If the table_name is not found, an OCIError(ORA-04043) exception
+is raised.
+
+!! commit()
+commit the transaction.
+
+  conn = OCI8.new("scott", "tiger")
+  conn.exec("UPDATE emp SET sal = sal * 1.1") # yahoo
+  conn.commit
+  conn.logoff
+
+!! rollback()
+rollback the transaction.
+
+  conn = OCI8.new("scott", "tiger")
+  conn.exec("UPDATE emp SET sal = sal * 0.9") # boos
+  conn.rollback
+  conn.logoff
+
+!! autocommit?
+return the state of the autocommit mode. The default value is
+false. If true, the transaction is committed automatically
+whenever executing insert/update/delete statements.
+
+!! autocommit = boolean_value
+change the status of the autocommit mode.
+
+  conn = OCI8.new("scott", "tiger")
+  conn.autocommit = true
+  ... do something ...
+  conn.logoff
+
+!! long_read_len
+get the internal size of a fetch buffer for LONG or LONG RAW datatype. The default value is 65535.
+On ruby-oci8 1.0 it is the maximum fetch size. If the fetched value is longer than this value, it causes an error.
+On ruby-oci8 2.0, it is the size of one piece to perform a piecewise fetch.
+The piecewise fetch is performed internally. You have no need to care it.
+
+See also: [[FAQ_long_or_long_raw]]
+
+!! long_read_len = size
+set the size of long_read_len.
+
+See also: [[FAQ_long_or_long_raw]]
+
+!! prefetch_rows = rows
+change the prefetch rows size. This reduces network round trips
+when fetching multiple rows. The default value is 1.
+
+!! non_blocking?
+return the status of blocking/non-blocking mode. The default
+value is false. It is blocking mode.
+
+!! non_blocking= boolean_value
+Changes the status of blocking/non-blocking mode.
+
+!! break
+cancels the OCI call performing in other thread. To use this, the connection must be non-blocking mode.

Added: web/hiki_data/en/text/api_OCI8BFILE
===================================================================
--- web/hiki_data/en/text/api_OCI8BFILE	                        (rev 0)
+++ web/hiki_data/en/text/api_OCI8BFILE	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,41 @@
+This is a lob locator to read/write binary data to/from BFILE column.
+This instance is automatically generated by select statement.
+
+! Instance Methods
+
+!! exists?
+!! dir_alias
+!! dir_alias = name
+!! filename
+!! filename = name
+
+!! read(size = nil)
+read at most size bytes from BFILE, or to the end of file if size is omitted.
+
+  conn.exec("SELECT name, image FROM photo") do |name, image|
+    File.open(name, 'w') do |f|
+      f.write(image.read)
+    end
+  end
+
+
+!! size
+return the size of the BFILE.
+
+!! pos
+return the current offset of the BFILE.
+
+!! pos = number
+set the current offset of the BFILE.
+
+!! eof?
+true if the current offset is at the end of the BFILE.
+
+!! tell
+synonym for pos.
+
+!! seek(pos)
+synonym for pos=.
+
+!! rewind
+set the current offset to zero.

Added: web/hiki_data/en/text/api_OCI8BLOB
===================================================================
--- web/hiki_data/en/text/api_OCI8BLOB	                        (rev 0)
+++ web/hiki_data/en/text/api_OCI8BLOB	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,79 @@
+This is a lob locator to read/write binary data to/from BLOB column.
+This instance is automatically generated by select statement.
+
+! Class Methods
+
+!! OCI8::BLOB.new(con, val)
+(new in 1.0.0-rc2)
+
+create a temporary lob. "temporary" means "which is not stored to a database." You can store your data to a temporary lob and insert it to a table.
+
+! Instance Methods
+
+!! available?
+check whether BLOB is available or not.
+To use BLOB you need to insert EMPTY_BLOB() at first.
+
+  conn.exec("CREATE TABLE photo (name VARCHAR2(50), image BLOB)")
+  conn.exec("INSERT INTO photo VALUES ('null-data', NULL)")
+  conn.exec("INSERT INTO photo VALUES ('empty-data', EMPTY_BLOB())")
+  conn.exec("SELECT name, image FROM photo") do |name, image|
+    case name
+    when 'null-data'
+      puts "#{name} => #{image.available?.to_s}"
+      # => false
+    when 'empty-data'
+      puts "#{name} => #{image.available?.to_s}"
+      # => true
+    end
+  end
+
+!! read(size = nil)
+read at most size bytes from BLOB, or to the end of file if size is omitted.
+
+  conn.exec("SELECT name, image FROM photo") do |name, image|
+    File.open(name, 'w') do |f|
+      f.write(image.read)
+    end
+  end
+
+!! write(string)
+write the given string to BLOB.
+If old data is longer than new data, resize by OCI8::BLOB#size.
+
+  conn.exec("SELECT name, image FROM photo") do |name, image|
+    File.open(name, 'r') do |f|
+      image.write(f.read)
+      image.size = f.pos
+    end
+  end
+
+!! size
+return the size of BLOB.
+
+!! size=(len)
+set the size of BLOB.
+
+!! pos
+return the current offset of BLOB.
+
+!! pos = number
+set the current offset of BLOB.
+
+!! eof?
+true if the current offset is at the end of the BLOB.
+
+!! chunk_size
+return the chunk size of BLOB.
+
+!! truncate(len)
+synonym for size=.
+
+!! tell
+synonym for pos.
+
+!! seek(pos)
+synonym for pos=.
+
+!! rewind
+set the current offset to zero.

Added: web/hiki_data/en/text/api_OCI8CLOB
===================================================================
--- web/hiki_data/en/text/api_OCI8CLOB	                        (rev 0)
+++ web/hiki_data/en/text/api_OCI8CLOB	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,109 @@
+This is an I/O class to read/write character data to/from CLOB objects.
+You can insert a CLOB object to a column and get the column data by a
+select statement.
+
+  con = OCI8.new('scott', 'tiger')
+  # create a table.
+  con.exec("CREATE TABLE novels (title VARCHAR2(30), contents CLOB)")
+  # insert a CLOB object.
+  con.exec("INSERT INTO novels(title, contents) values (:1, :2)",
+           'a long tale', OCI8::CLOB.new(con, 'long long text ...'))
+  # select a CLOB object.
+  con.exec("select contents from novels where title = :1",
+           'a long tale') do |row|
+    # row[0] is a CLOB object.
+    contents = row[0].read
+  end
+
+! Class Methods
+
+!! OCI8::CLOB.new(con, val)
+(requires Oracle 8.1 or upper) (new in 1.0.0-rc2)
+
+create a temporary lob. "temporary" means "which is not stored to a database." You can store your data to a temporary lob and insert it to a table.
+
+! Instance Methods
+
+!! available?
+check whether the CLOB object is available or not.
+// To use CLOB you need to insert EMPTY_CLOB() at first.
+
+  con.exec("CREATE TABLE novels (title VARCHAR2(30), contents CLOB)")
+  con.exec("INSERT INTO novels VALUES ('null-data', NULL)")
+  con.exec("INSERT INTO novels VALUES ('empty-data', EMPTY_CLOB())")
+  con.exec("SELECT title, contents FROM novels") do |title, contents|
+    case title
+    when 'null-data'
+      puts "#{title} => #{contents.available?.to_s}"
+      # => false
+    when 'empty-data'
+      puts "#{title} => #{contents.available?.to_s}"
+      # => true
+    end
+  end
+
+!! read(size = nil)
+get characters from the CLOB object. The number of characters is at most the specified size. If the size is nil, it read until the end of the CLOB.
+
+note: the size is not counted by byte but by character. The returned value's number of bytes can be longer then the size if it contains multi-byte characters.
+
+  # read CLOB data.
+  con.exec("SELECT title, contents FROM novels") do |title, contents|
+    File.open(title, 'w') do |f|
+      f.write(contents.read)
+    end
+  end
+
+!! write(string)
+write the given string to CLOB. The return value is the number of written '''characters'''.
+If old data is longer than new data, resize by OCI8::CLOB#size.
+
+  # write to CLOB.
+  con.exec("SELECT title, contents FROM novels") do |title, clob|
+    File.open(title, 'r') do |f|
+      contents = f.read
+      num_chars = clob.write(contents)
+      clob.size = num_chars
+    end
+  end
+
+note: OCI8::CLOB#size is counted by characters. If the contents contain multibyte characters, the following code set incorrect clob size.
+
+  # bad example
+  con.exec("SELECT title, contents FROM novels") do |title, clob|
+    File.open(title, 'r') do |f|
+      contents = f.read
+      clob.write(contents)
+      clob.size = contents.length # boo!
+    end
+  end
+
+!! size
+return the number of characters in the CLOB.
+
+!! size=(len)
+set the number of characters in the CLOB.
+
+!! pos
+return the current offset of the CLOB in characters.
+
+!! pos = number
+set the current offset of the CLOB in characters.
+
+!! eof?
+true if the current offset is at the end of the CLOB.
+
+!! chunk_size
+return the chunk size of CLOB.
+
+!! truncate(len)
+synonym for size=.
+
+!! tell
+synonym for pos.
+
+!! seek(pos)
+synonym for pos=.
+
+!! rewind
+set the current offset to zero.

Added: web/hiki_data/en/text/api_OCI8Cursor
===================================================================
--- web/hiki_data/en/text/api_OCI8Cursor	                        (rev 0)
+++ web/hiki_data/en/text/api_OCI8Cursor	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,186 @@
+The instance of this class corresponds to cursor in the term of
+Oracle, which corresponds to java.sql.Statement of JDBC and statement
+handle $sth of Perl/DBI.
+
+Don't create the instance by calling 'new' method. Please create it by
+calling ''OCI8#exec'' or ''OCI8#parse''.
+
+! Instance Methods
+
+!! define(pos, type, length = nil)
+explicitly indicate the date type of fetched value. run this
+method within parse and exec. pos starts from 1. lentgh is used
+when type is String.
+
+  cursor = conn.parse("SELECT ename, hiredate FROM emp")
+  cursor.define(1, String, 20) # fetch the first column as String.
+  cursor.define(2, Time)       # fetch the second column as Time.
+  cursor.exec()
+
+!! bind_param(key, val, type = nil, length = nil)
+bind variables explicitly.
+
+When key is number, it binds by position, which starts from 1.
+When key is string, it binds by the name of placeholder.
+
+  cursor = conn.parse("SELECT * FROM emp WHERE ename = :ename")
+  cursor.bind_param(1, 'SMITH') # bind by position
+    ...or...
+  cursor.bind_param(':ename', 'SMITH') # bind by name
+
+To bind as number, Integer, Fixnum and Float are available, but Bignum is
+not supported. If its initial value is NULL, please set nil to 
+''type'' and Fixnum or Float to ''val''.
+
+  cursor.bind_param(1, 1234) # bind as Fixnum, Initial value is 1234.
+  cursor.bind_param(1, 1234.0) # bind as Float, Initial value is 1234.0.
+  cursor.bind_param(1, nil, Fixnum) # bind as Fixnum, Initial value is NULL.
+  cursor.bind_param(1, nil, Float) # bind as Float, Initial value is NULL.
+
+In case of binding a string, set the string itself to
+''val''. When the bind variable is used as output, set the
+string whose length is enough to store or set the length.
+
+  cursor = conn.parse("BEGIN :out := :in || '_OUT'; END;")
+  cursor.bind_param(':in', 'DATA') # bind as String with width 4.
+  cursor.bind_param(':out', nil, String, 7) # bind as String with width 7.
+  cursor.exec()
+  p cursor[':out'] # => 'DATA_OU'
+  # Though the length of :out is 8 bytes in PL/SQL block, it is
+  # bound as 7 bytes. So result is cut off at 7 byte.
+
+In case of binding a string as RAW, set OCI::RAW to ''type''.
+
+  cursor = conn.parse("INSERT INTO raw_table(raw_column) VALUE (:1)")
+  cursor.bind_param(1, 'RAW_STRING', OCI8::RAW)
+  cursor.exec()
+  cursor.close()
+
+!! [key]
+Gets the value of the bind variable.
+
+In case of binding explicitly, use same key with that of #bind_param.
+A placeholder can be bound by 
+name or position. If you bind by name, use that name. If you bind
+by position, use the position.
+
+  cursor = conn.parse("BEGIN :out := 'BAR'; END;")
+  cursor.bind_param(':out', 'FOO') # bind by name
+  p cursor[':out'] # => 'FOO'
+  p cursor[1] # => nil
+  cursor.exec()
+  p cursor[':out'] # => 'BAR'
+  p cursor[1] # => nil
+
+  cursor = conn.parse("BEGIN :out := 'BAR'; END;")
+  cursor.bind_param(1, 'FOO') # bind by position
+  p cursor[':out'] # => nil
+  p cursor[1] # => 'FOO'
+  cursor.exec()
+  p cursor[':out'] # => nil
+  p cursor[1] # => 'BAR'
+
+In case of binding by OCI8#exec or OCI8::Cursor#exec,
+get the value by position, which starts from 1.
+
+  cursor = conn.exec("BEGIN :out := 'BAR'; END;", 'FOO')
+  # 1st bind variable is bound as String with width 3. Its initial value is 'FOO'
+  # After execute, the value become 'BAR'.
+  p cursor[1] # => 'BAR'
+
+!! [key] = val
+Sets the value to the bind variable. The way to specify the
+''key'' is same with ''OCI8::Cursor#[]''. This is available
+to replace the value and execute many times.
+
+  cursor = conn.parse("INSERT INTO test(col1) VALUES(:1)")
+  cursor.bind_params(1, nil, String, 3)
+  ['FOO', 'BAR', 'BAZ'].each do |key|
+    cursor[1] = key
+    cursor.exec
+  end
+  cursor.close()
+
+  ['FOO', 'BAR', 'BAZ'].each do |key|
+    conn.exec("INSERT INTO test(col1) VALUES(:1)", key)
+  end
+
+Both example's results are same. But the former will use less resources.
+
+!! keys
+return the keys of bind variables as array.
+
+!! exec(*bindvars)
+execute the SQL statement assigned the cursor. The type of
+return value depends on the type of sql statement: select;
+insert, update and delete; create, alter, drop and PL/SQL.
+
+In case of select statement, it returns the number of the
+select-list.
+
+In case of insert, update or delete statement, it returns the
+number of processed rows.
+
+In case of create, alter, drop and PL/SQL statement, it returns
+true. In contrast with ''OCI8#exec'', it returns true even
+though PL/SQL. Use ''OCI8::Cursor#[]'' explicitly to get bind
+variables.
+
+!! type
+gets the type of SQL statement. Its value is one of the follows.
+* OCI8::STMT_SELECT
+* OCI8::STMT_UPDATE
+* OCI8::STMT_DELETE
+* OCI8::STMT_INSERT
+* OCI8::STMT_CREATE
+* OCI8::STMT_DROP
+* OCI8::STMT_ALTER
+* OCI8::STMT_BEGIN
+* OCI8::STMT_DECLARE
+For PL/SQL statement, it returns OCI8::STMT_BEGIN or
+OCI8::STMT_DECLARE.
+
+On ruby-oci8 1.0, these constants values are Fixnums.
+On ruby-oci8 2.0, they are Symbols
+
+!! row_count
+return the number of processed rows.
+
+!! get_col_names
+get the names of select-list as array. Please use this
+method after exec.
+
+!! column_metadata
+(new in 1.0.0 without rc)
+
+get column information of the select statement.
+You can get it after OCI8#exec or OCI8::Cursor#exec is executed.
+This returns an array of [[api_OCI8MetadataColumn]].
+
+!! fetch
+get fetched data as an Array. This is available for select
+statement only.
+
+  conn = OCI8.new('scott', 'tiger')
+  cursor = conn.exec('SELECT * FROM emp')
+  while r = cursor.fetch()
+    puts r.join(',')
+  end
+  cursor.close
+  conn.logoff
+
+!! fetch_hash
+get fetched data as a Hash. The hash keys are column names.
+
+
+!! close
+close the cursor.
+
+!! rowid
+get the rowid of the last processed row.
+This value is available as bind data.
+On the other hand it isn't available for other purpose.
+
+!! prefetch_rows = rows
+set prefetch rows to this cursor.
+This value doesn't affect other cursors.

Added: web/hiki_data/en/text/api_OCI8MetadataColumn
===================================================================
--- web/hiki_data/en/text/api_OCI8MetadataColumn	                        (rev 0)
+++ web/hiki_data/en/text/api_OCI8MetadataColumn	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,140 @@
+Column Information
+
+(new in 1.0.0 without rc)
+
+! Class Methods
+
+No class methods are declared.
+
+This object is created by the following methods.
+* [[OCI8::Cursor#column_metadata]]
+* [[OCI8::Metadata::Table#columns]]
+* [[OCI8::Metadata::View#columns]]
+
+! Instance Methods
+
+!! name
+column name
+
+!! type_string
+returns column definition as String.
+
+  con = OCI8.new('username/password')
+  colinfo = con.describe_table('tab').columns
+  colinfo[0].type_string #=> "VARCHAR2(30) NOT NULL"
+  colinfo[1].type_string #=> "VARCHAR2(7)"
+  colinfo[2].type_string #=> "NUMBER"
+
+!! data_type
+returns data type as Symbol.
+
+||!Oracle type||!data_type||
+||CHAR, NCHAR||:char||
+||VARCHAR2, NVARCHAR2||:varchar2||
+||RAW||:raw||
+||CLOB, NCLOB||:clob||
+||BLOB||:blob||
+||BFILE||:bfile||
+||NUMBER, FLOAT||:number||
+||BINARY_FLOAT||:binary_float||
+||BINARY_DOUBLE||:binary_double||
+||DATE||:date||
+||TIMESTAMP||:timestamp||
+||TIMESTAMP WITH TIME ZONE||:timestamp_tz||
+||TIMESTAMP WITH LOCAL TIME ZONE||:timestamp_ltz||
+||INTERVAL YEAR TO MONTH||:interval_ym||
+||INTERVAL DAY TO SECOND||:interval_ds||
+
+!! charset_form
+type of character set(default character set or national character set)
+
+||!Oracle type||!char_form||
+||CHAR(n)||:implicit||
+||VARCHAR2(n)||:implicit||
+||CHAR(n CHAR)||:implicit||
+||VARCHAR2(n CHAR)||:implicit||
+||NCHAR(n)||:nchar||
+||NVARCHAR2(n)||:nchar||
+||Others||nil||
+
+!! nullable?
+true if the column value can be null, otherwise false
+
+!! char_used?
+true if the length is counted by number of characters.
+otherwise false.
+
+||!Oracle type||!char_used?||
+||CHAR(n)||false||
+||VARCHAR2(n)||false||
+||CHAR(n CHAR)||true||
+||VARCHAR2(n CHAR)||true||
+||NCHAR(n)||true||
+||NVARCHAR2(n)||true||
+
+!! char_size
+length of character data type.
+If char_used? is true, the length is counted by characters.
+If false, it is counted by bytes.
+
+||!Oracle type||!char_size||
+||CHAR(n)||n||
+||VARCHAR2(n)||n||
+||CHAR(n CHAR)||n||
+||VARCHAR2(n CHAR)||n||
+||NCHAR(n)||n||
+||NVARCHAR2(n)||n||
+
+!! data_size
+maximum length of data in bytes.
+
+||!Oracle tyep||data_size||
+||CHAR(n), VARCHAR2(n)||n||
+||CHAR(n CHAR), VARCHAR2(n CHAR)||n times integer value (4 in my environment) ||
+||NCHAR(n), NVARCHAR2(n)||n times integer value (2 in my environment) ||
+||NUMBER, FLOAT||22||
+||BINARY_FLOAT||4||
+||BINARY_DOUBLE||8||
+||DATE||7||
+||TIMESTAMP||11||
+||TIMESTAMP WITH TIME ZONE||13||
+||TIMESTAMP WITH LOCAL TIME ZONE||11||
+
+!! precision
+precision of numeric data types. It is radix 10 for NUMBER, radix 2 for FLOAT.
+A precision for FLOAT become that of NUMBER by multiplying 0.30103.
+Zero precision means NUMBER whose precision and number are omitted.
+
+||!Oracle type||!precision||
+||NUMBER||0||
+||NUMBER(n)||n||
+||NUMBER(m, n)||m||
+||FLOAT||126||
+||FLOAT(n)||n||
+
+!! scale
+the number of digits to the right of the decimal point. If precision is not zero
+and scale is -127, the data type is FLOAT, otherwise NUMBER.
+
+||!Oracle type||!scale||
+||NUMBER||-127 or 0||
+||NUMBER(n)||0||
+||NUMBER(m, n)||n||
+||FLOAT||-127||
+||FLOAT(n)||-127||
+
+!! fsprecision
+fractional seconds precision
+
+||!Oracle type||!fsprecision||
+||TIMEPTAMP(n)||n||
+||TIMESTAMP(n) WITH TIME ZONE||n||
+||TIMESTAMP(n) WITH LOCAL TIME ZONE||n||
+||INTERVAL DAY(m) TO SECOND(n)||n||
+
+!! lfprecision
+leading field precision
+
+||!Oracle type||!lfprecision||
+||INTERVAL YEAR(n) TO MONTH||n||
+||INTERVAL DAY(m) TO SECOND(n)||m||

Added: web/hiki_data/en/text/api_OCI8MetadataTable
===================================================================
--- web/hiki_data/en/text/api_OCI8MetadataTable	                        (rev 0)
+++ web/hiki_data/en/text/api_OCI8MetadataTable	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,24 @@
+Table Information
+
+(new in 1.0.0 without rc)
+
+! Class Methods
+
+No class methods are declared.
+
+This object is created by the following methods.
+* [[OCI8#describe_table(name)]] (when the name is a table name)
+
+! Instance Methods
+
+!! obj_schema
+schema name
+
+!! obj_name
+table name
+
+!! num_cols
+number of columns.
+
+!! columns
+an array of [[OCI8::Metadata::Column]]

Added: web/hiki_data/en/text/api_OCI8MetadataView
===================================================================
--- web/hiki_data/en/text/api_OCI8MetadataView	                        (rev 0)
+++ web/hiki_data/en/text/api_OCI8MetadataView	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,24 @@
+View Information
+
+(new in 1.0.0 without rc)
+
+! Class Methods
+
+No class methods are declared.
+
+This object is created by the following methods.
+* [[OCI8#describe_table(name)]] (when the name is a view name)
+
+! Instance Methods
+
+!! obj_schema
+schema name
+
+!! obj_name
+view name
+
+!! num_cols
+number of columns.
+
+!! columns
+an array of [[OCI8::Metadata::Column]]

Added: web/hiki_data/en/text/dbd_oci8
===================================================================
--- web/hiki_data/en/text/dbd_oci8	                        (rev 0)
+++ web/hiki_data/en/text/dbd_oci8	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,139 @@
+DBD::OCI8 is a database driver of [[Ruby/DBI|http://ruby-dbi.rubyforge.org]].
+Refer to the following pages.
+* [[DBI_SPEC|http://ruby-dbi.rubyforge.org/DBI_SPEC.html]]
+* [[Using the Ruby DBI Module|http://www.kitebird.com/articles/ruby-dbi.html]]
+
+This article describes only the DBD::OCI8 specific features.
+
+!! connect to a remote server.
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:dbname', 'username', 'password')
+
+!! connect to a local server.
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:', 'username', 'password')
+
+!! connect as sys user.
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:', 'sys', 'password_of_sys', {'Privilege' => :SYSDBA})
+or
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:', 'sys', 'password_of_sys', {'Privilege' => :SYSOPER})
+
+!! OS authentication
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:', nil, nil)
+
+!! non-blocking mode
+
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:', 'username', 'password', {'NonBlocking' => true})
+
+After connected, SQL execution are done by non-blocking mode.
+
+note: Connecting to a server is done with blocking mode.
+
+!! bind variables
+
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:', 'username', 'password')
+  sth = dbh.parse('INSERT INTO emp(ename, sal) VALUES (?, ?)')
+  sth.execute('FOOMAN', 100)
+
+!! explicitly define the data type.
+
+  dbh = DBI.connect('DBI:OCI8:', 'username', 'password')
+  sth = dbh.prepare('SELECT SYSDATE FROM DUAL')
+  sth.func(:define, 1, Date) # fetch the 1st column as Date.
+  sth.execute()
+
+!! BLOB
+
+To insert BLOB data:
+
+  image = open('SagradaFamilia.gif', "rb").read()
+  # insert 'EMPTY_BLOB()' to the BLOB column.
+  sth = dbh.prepare("INSERT INTO photos(name, image) VALUES (?, EMPTY_BLOB())")
+  sth.execute("Sagrada Familia")
+  # get the rowid of inserted row.
+  rowid = sth.func(:rowid) # call driver specific code.
+  # select the empty BLOB column as a OCI8::BLOB.
+  lob = dbh.select_one("SELECT image FROM photos WHERE ROWID = ?", rowid)[0] # 1st row, 1st column
+  # write data to the LOB.
+  lob.write(image)
+
+To update BLOB data:
+
+  new_image = open('SagradaFamilia.gif', "rb").read()
+  # select a BLOB column as a OCI8::BLOB with 'FOR UPDATE' to lock the row.
+  lob = dbh.select_one("SELECT image FROM photos WHERE name = ? FOR UPDATE", 'Sagrada familia')[0]
+  # write data to the lob by OCI8::BLOB#write(data).
+  lob.write(new_image)
+  # fix the length of its content by OCI8::BLOB#truncate(data.size).
+  lob.truncate(new_image.size)
+
+To select BLOB data:
+  # select a BLOB column as a OCI8::BLOB.
+  lob = dbh.select_one("SELECT image FROM photos WHERE name = ?", 'Sagrada familia')[0]
+  # read its content by OCI8::BLOB#read
+  image = lob.read()
+
+To delete BLOB data:
+  # delete the row.
+  dbh.do("DELETE FROM photos WHERE name = ?", 'Sagrada familia')
+
+!! CLOB
+
+To insert CLOB data:
+
+  text = open('gutenberg.txt', "r").read()
+  # insert 'EMPTY_CLOB()' to the CLOB column.
+  sth = dbh.prepare("INSERT INTO books(title, content) VALUES (?, EMPTY_CLOB())")
+  sth.execute("Project Gutenberg")
+  # get the rowid of inserted row.
+  rowid = sth.func(:rowid) # call driver specific code.
+  # select the empty CLOB column as a OCI8::CLOB.
+  lob = dbh.select_one("SELECT content FROM books WHERE ROWID = ?", rowid)[0] # 1st row, 1st column
+  # write data to the LOB.
+  lob.write(text)
+
+To update CLOB data:
+  new_text = open('gutenberg.txt', "r").read()
+  # select a CLOB column as a OCI8::CLOB with 'FOR UPDATE' to lock the row.
+  lob = dbh.select_one("SELECT content FROM books WHERE title = ? FOR UPDATE", 'Project Gutenberg')[0]
+  # write data to the lob by OCI8::CLOB#write(data).
+  lob.write(new_text)
+  # fix the length of its content by OCI8::CLOB#truncate(OCI8::CLOB#pos).
+  # don't use "lob.truncate(new_text.size)". new_text.size is the number of bytes.
+  # But the 1st argument of #truncate is the number of characters.
+  lob.truncate(lob.pos)
+
+To select CLOB data:
+  # select a CLOB column as a OCI8::CLOB.
+  lob = dbh.select_one("SELECT content FROM books WHERE title = ?", 'Project Gutenberg')[0]
+  # read its content by OCI8::CLOB#read
+  text = lob.read()
+
+To delete CLOB data:
+  # delete the row.
+  dbh.do("DELETE FROM books WHERE content = ?", 'Project Gutenberg')
+
+!! output parameter
+
+  # enable DBMS_OUTPUT package
+  dbh.do("BEGIN DBMS_OUTPUT.ENABLE; END;")
+   ... execute DBMS_OUTPUT.PUT_LINE ...
+  # get PUT_LINEed strings by using DBMS_OUTPUT.GET_LINE.
+  dbh.prepare("BEGIN DBMS_OUTPUT.GET_LINE(?, ?); END;") do |sth|
+    # bind the 1st parameter as string whose length is 255
+    sth.bind_param(1, ' ' * 255)
+    # bind the 2rd parameter as integer
+    sth.bind_param(2, 0)
+    while true
+      sth.execute
+      # if the 2nd parameter value is zero, output value exists.
+      break if sth.func(:bind_value, 2) != 0
+      # putput the 1st parameter value.
+      puts sth.func(:bind_value, 1)
+    end
+  end

Added: web/hiki_data/en/text/dev_APIWrap
===================================================================
--- web/hiki_data/en/text/dev_APIWrap	                        (rev 0)
+++ web/hiki_data/en/text/dev_APIWrap	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,65 @@
+[ ruby-oci8 2.0 only ]
+
+'ext/oci8/apiwrap.yml' is used for the following three purposes.
+# Use non-blocking API easily.
+# Check function existence at run-time.
+# Trace function calls.
+
+! 1. Use non-blocking API easily.
+
+ruby 1.8's thread model is green. If one thread is blocked in
+a C extension library, all threads are also blocked. ruby 1.9's
+thread model is native. But ruby threads don't run parallel.
+When one thread do a long operation in C, it should release a
+global VM lock. The ways to prevent a C library from blocking
+ruby itself are quite different in ruby 1.8 and 1.9.
+But apiwrap make it easy.
+
+If you use a OCI function OCIFooBar() and it needs more than
+one server round trip, you need to add the function name with
+the following information
+to apiwrap.yml.
+* oracle version in which the function was added.
+* ''':remote: true'''
+* arguments
+
+If ''':remote:''' is true, apiwrap.rb makes a function
+prototype of OCIFooBar_nb(). The only difference between
+OCIFooBar() and OCIFooBar_nb() is that "oci8_svcctx_t *svcctx"
+is added as a first argument of the latter.
+What you need to do is to use OCIFooBar_nb() instead of OCIFooBar()
+and pass oci8_svcctx_t* as the first argument.
+
+! 2. Check function existence at run-time.
+
+ruby-oci8 2.0 supports Oracle 8.0 or later. But you can use newly added
+functions in later Oracle versions by one compiled binary oci8lib.so.
+This is useful when we make a compiled Windows package. We need to make
+packages depends on Oracle versions without this feature,
+
+If you use a OCI function OCIFooBar which was added in Oracle X.Y.Z,
+you need to add the function name with the following information to apiwrap.yml.
+* ''':version: XYZ''' (without dots. 8.1.7 -> 817, 10.1.0 -> 1010, etc)
+* :remote: true or false
+* arguments
+
+In C code:
+  if remote is true:
+      if (have_OCIFooBar_nb) {
+          can OCIFooBar_nb
+      } else {
+          don't use OCIFooBar_nb here
+      }
+  if remote is false:
+      if (have_OCIFooBar) {
+          can OCIFooBar
+      } else {
+          don't use OCIFooBar here
+      }
+have_OCIFooBar is a variable if runtime API-check is enabled.
+It is a macro if runtime check is disabled.
+
+! 3. Trace function calls.
+
+We have not implemented yet. All OCI function calls can be logged by this feature.
+It will be useful when debugging.

Added: web/hiki_data/en/text/dev_CodingStyle
===================================================================
--- web/hiki_data/en/text/dev_CodingStyle	                        (rev 0)
+++ web/hiki_data/en/text/dev_CodingStyle	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,52 @@
+! Indent Style in C
+
+Use same indent style with existing code.
+One indentation is made by 4 spaces. No tabs are used
+because their width depends on environments.
+
+* indentation by 4 spaces.
+  not:
+    if (a < b) {
+     return a;
+    }
+  but:
+    if (a < b) {
+        return a;
+    }
+* space after '''if''', '''while''' and '''for'''.
+* braces on '''if''', '''while''' and '''for''' line.
+* no space on inner side of parentheses.
+* spaces on both sides of binary operators(<,  >, ==, !=, =, +=, etc.).
+* no space between unary operators(++, --, !, etc.) and their operands.
+  not:
+    if( a<b )
+    {
+        return a;
+    }
+    else
+    {
+        a ++;
+        return b;
+    }
+  but:
+    if (a < b) {
+        return a;
+    } else {
+        a++;
+        return b;
+    }
+
+If you are using emacs, add the following code to your .emacs.
+
+ (c-add-style
+  "ruby"
+  '("bsd"
+     (c-basic-offset . 4)
+     (tab-width . 4)
+     (c-offsets-alist
+      (case-label . 0)
+      (label . 0)
+      (statement-case-intro . 4))))
+
+It help you to indent the code in emacs because all C source files include the following line.
+  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */

Added: web/hiki_data/en/text/dev_SourceCode
===================================================================
--- web/hiki_data/en/text/dev_SourceCode	                        (rev 0)
+++ web/hiki_data/en/text/dev_SourceCode	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,35 @@
+Ruby-oci8's source code is managed by subversion at rubyforge.
+
+Documentation for Subversion (sometimes referred to as "SVN") is available [[here|http://svnbook.red-bean.com/]].
+
+! ruby-oci8 1.0
+
+!! Web Interface
+
+http://ruby-oci8.rubyforge.org/svn/branches/ruby-oci8-1.0
+
+!! Anonymous Access
+
+  svn checkout http://ruby-oci8.rubyforge.org/svn/branches/ruby-oci8-1.0
+or
+  svn checkout svn://rubyforge.org/var/svn/ruby-oci8/branches/ruby-oci8-1.0
+
+!! SSH Access (for project developers)
+
+  svn checkout svn+ssh://developername@rubyforge.org/var/svn/ruby-oci8/branches/ruby-oci8-1.0
+
+! ruby-oci8 2.0
+
+!! Web Interface
+
+http://ruby-oci8.rubyforge.org/svn/trunk/ruby-oci8
+
+!! Anonymous Access
+
+  svn checkout http://ruby-oci8.rubyforge.org/svn/trunk/ruby-oci8
+or
+  svn checkout svn://rubyforge.org/var/svn/ruby-oci8/trunk/ruby-oci8
+
+!! SSH Access (for project developers)
+
+  svn checkout svn+ssh://developername@rubyforge.org/var/svn/ruby-oci8/trunk/ruby-oci8


Property changes on: web/hiki_data/ja/backup
___________________________________________________________________
Name: svn:ignore
   + *



Property changes on: web/hiki_data/ja/cache/parser
___________________________________________________________________
Name: svn:ignore
   + *


Added: web/hiki_data/ja/hiki.conf
===================================================================
--- web/hiki_data/ja/hiki.conf	                        (rev 0)
+++ web/hiki_data/ja/hiki.conf	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,50 @@
+#
+# hiki configuration file via CGI $Revision: 1.5 $
+#
+
+#
+# basic
+#
+site_name = "ruby-oci8"
+author_name = "ruby-oci8 developers"
+mail = [
+"hoge at example.net",
+]
+mail_on_update = false
+
+#
+# password
+#
+password = ""
+
+#
+# theme
+#
+theme = "hiki"
+theme_url = "../css/ruby-oci8.css"
+theme_path = "theme"
+use_sidebar = true
+main_class = "main"
+sidebar_class = "sidebar"
+auto_link = false
+use_wikiname = false
+
+#
+# options for plugins
+#
+options2 = {
+"append-css.css" => "",
+"sp.notselected" => "bbs.rb\nmath.rb\ncd.rb\nsearch.rb\nshow_plugins.rb\nrss.rb\nedit_user.rb\nisbn.rb\ntodo.rb\ncomment.rb\ndiffmail.rb\nhistory.rb\nappend-css.rb\nhighlight.rb\nsrc.rb\ncategory.rb\norphan.rb\nits.rb\ntrackback.rb\nnote.rb\nauth_typekey.rb\nquote_page.rb\nrbl.rb\nrss-show.rb\nfrozenmark.rb\nreferer.rb\nincremental_search.rb\npagerank.rb\nrank.rb\nrecent2.rb\nattach.rb\nentityref.rb\nfootnote.rb\ntemplate.rb\namazon.rb\nsitemap.rb\nsimilarity.rb\nreadlirs.rb\nkeyword.rb\n",
+"sp.selected" => "google-sitemaps.rb\n",
+"template.autoinsert" => true,
+"template.default" => "InterWikiName",
+"template.keyword" => nil,
+"user.auth" => 0,
+"user.list" => {
+},
+}
+
+#
+# XML-RPC interfaces
+#
+xmlrpc_enabled = true

Added: web/hiki_data/ja/info.db
===================================================================
--- web/hiki_data/ja/info.db	                        (rev 0)
+++ web/hiki_data/ja/info.db	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,317 @@
+{
+"APIReference" => {
+:count => 39,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1168172768),
+:references => [
+],
+:title => "API\343\203\252\343\203\225\343\202\241\343\203\254\343\203\263\343\202\271",
+},
+"FAQ" => {
+:count => 46,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1169647266),
+:references => [
+"FAQ_plsql_out_param",
+"FAQ_long_or_long_raw",
+"FAQ_uninstall",
+],
+:title => "FAQ",
+},
+"FAQ_long_or_long_raw" => {
+:count => 14,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1169695529),
+:references => [
+],
+:title => "LONG \343\202\204 LONG RAW \343\201\256\343\203\207\343\203\274\343\202\277\343\202\222\344\275\277\343\201\206\343\201\253\343\201\257\357\274\237",
+},
+"FAQ_plsql_out_param" => {
+:count => 20,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1169647626),
+:references => [
+],
+:title => "PL/SQL \343\201\256 OUT \343\203\221\343\203\251\343\203\241\343\203\274\343\202\277\343\202\222\345\217\226\345\276\227\343\201\231\343\202\213\343\201\253\343\201\257\357\274\237",
+},
+"FAQ_uninstall" => {
+:count => 10,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1169620412),
+:references => [
+],
+:title => "\343\202\242\343\203\263\343\202\244\343\203\263\343\202\271\343\203\210\343\203\274\343\203\253\346\226\271\346\263\225",
+},
+"FrontPage" => {
+:count => 120,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1168180666),
+:references => [
+"InstallForInstantClient",
+],
+:title => "\343\203\210\343\203\203\343\203\227\343\203\232\343\203\274\343\202\270",
+},
+"HowToInstall" => {
+:count => 50,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1168175239),
+:references => [
+"InstallBinaryPackage",
+"InstallForFullClient",
+"InstallForInstantClient",
+],
+:title => "\343\202\244\343\203\263\343\202\271\343\203\210\343\203\274\343\203\253\346\226\271\346\263\225",
+},
+"InstallBinaryPackage" => {
+:count => 32,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1171256479),
+:references => [
+],
+:title => "\343\203\220\343\202\244\343\203\212\343\203\252\343\203\221\343\203\203\343\202\261\343\203\274\343\202\270",
+},
+"InstallForFullClient" => {
+:count => 35,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1192083462),
+:references => [
+"ReportInstallProblem",
+],
+:title => "Oracle Full Client",
+},
+"InstallForInstantClient" => {
+:count => 30,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1192083565),
+:references => [
+"ReportInstallProblem",
+],
+:title => "Oracle Instant Client",
+},
+"InterWikiName" => {
+:count => 1,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1168065461),
+:references => [
+],
+:title => "InterWikiName",
+},
+"PlatformSpecificIssue" => {
+:count => 53,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1192665989),
+:references => [
+"InstallForInstantClient",
+"InstallForFullClient",
+],
+:title => "\343\203\227\343\203\251\343\203\203\343\203\210\343\203\225\343\202\251\343\203\274\343\203\240\345\233\272\346\234\211\343\201\256\345\225\217\351\241\214",
+},
+"ReportInstallProblem" => {
+:count => 37,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1168171996),
+:references => [
+"PlatformSpecificIssue",
+],
+:title => "\343\202\244\343\203\263\343\202\271\343\203\210\343\203\274\343\203\253\346\231\202\343\201\256\345\225\217\351\241\214\343\202\222\345\240\261\345\221\212",
+},
+"SideMenu" => {
+:count => 49,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195826076),
+:references => [
+"FrontPage",
+"HowToInstall",
+"InstallBinaryPackage",
+"InstallForFullClient",
+"InstallForInstantClient",
+"ReportInstallProblem",
+"PlatformSpecificIssue",
+"APIReference",
+"api",
+"api_OCI8",
+"api_OCI8Cursor",
+"api_OCI8CLOB",
+"api_OCI8BLOB",
+"api_OCI8BFILE",
+"api_OCI8MetadataTable",
+"api_OCI8MetadataView",
+"api_OCI8MetadataColumn",
+"dbd_oci8",
+"FAQ",
+],
+:title => "SideMenu",
+},
+"api" => {
+:count => 24,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195830335),
+:references => [
+"api_OCI8",
+"api_OCI8Cursor",
+"api_OCI8CLOB",
+"api_OCI8BLOB",
+"api_OCI8BFILE",
+"api_OCI8MetadataTable",
+"api_OCI8MetadataView",
+"api_OCI8MetadataColumn",
+],
+:title => "ruby-oci8 API",
+},
+"api_OCI8" => {
+:count => 54,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195983141),
+:references => [
+"api_OCI8Cursor",
+"api_OCI8MetadataTable",
+"api_OCI8MetadataView",
+"FAQ_long_or_long_raw",
+],
+:title => "OCI8",
+},
+"api_OCI8BFILE" => {
+:count => 35,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1169304867),
+:references => [
+],
+:title => "OCI8::BFILE",
+},
+"api_OCI8BLOB" => {
+:count => 34,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1169304807),
+:references => [
+],
+:title => "OCI8::BLOB",
+},
+"api_OCI8CLOB" => {
+:count => 40,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195210460),
+:references => [
+],
+:title => "OCI8::CLOB",
+},
+"api_OCI8Cursor" => {
+:count => 51,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195829930),
+:references => [
+"api_OCI8MetadataColumn",
+],
+:title => "OCI8::Cursor",
+},
+"api_OCI8MetadataColumn" => {
+:count => 0,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195977210),
+:references => [
+"api_OCI8Cursor",
+"api_OCI8MetadataTable",
+"api_OCI8MetadataView",
+],
+:title => "OCI8::Metadata::Column",
+},
+"api_OCI8MetadataTable" => {
+:count => 0,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195902157),
+:references => [
+"api_OCI8",
+"api_OCI8MetadataColumn",
+],
+:title => "OCI8::Metadata::Table",
+},
+"api_OCI8MetadataView" => {
+:count => 0,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195902198),
+:references => [
+"api_OCI8",
+"api_OCI8MetadataColumn",
+],
+:title => "OCI8::Metadata::View",
+},
+"dbd_oci8" => {
+:count => 38,
+:editor => nil,
+:freeze => false,
+:keyword => [
+],
+:last_modified => Time.at(1195983804),
+:references => [
+],
+:title => "DBD::OCI8",
+},
+}
\ No newline at end of file


Property changes on: web/hiki_data/ja/session
___________________________________________________________________
Name: svn:ignore
   + *


Added: web/hiki_data/ja/text/APIReference
===================================================================
--- web/hiki_data/ja/text/APIReference	                        (rev 0)
+++ web/hiki_data/ja/text/APIReference	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,36 @@
+! 利用可能なAPI
+
+ruby-oci8を使用、または ruby-oci8 に依存しているAPIとして以下の4つがあります。
+# ruby-oci8 native API
+# ruby-dbi
+# ActiveRecord
+# Og (ObjectGraph)
+
+! ruby-oci8 native API
+
+これは ruby-oci8 のネイティブなAPIです。
+ruby-oci8 API は2つの階層からなっています。ひとつは
+'上位API' で、もうひとつは '下位API'です。アプリケーションを作るときは上位APIを使用してください。下位APIは開発中のバージョンのruby-oci8 2.0.x では使用できません。
+
+* [[ruby-oci8 API|http://www.jiubao.org/ruby-oci8/api.ja.html]]
+* [[ruby-oci8 下位API|http://www.jiubao.org/ruby-oci8/manual.ja.html]] (使用しないこと)
+
+! ruby-dbi
+
+ruby-oci8 は Oracle 用のDBDドライバ、DBD::OCI8 を同梱しており、ruby-dbi の API も使用できます。
+
+* [[DBD::OCI8|http://www.jiubao.org/ruby-oci8/dbd_oci8.ja.html]]
+
+! ActiveRecord
+
+ActiveRecord は[[Ruby on Rails|http://www.rubyonrails.org/]]のORM(オブジェクト・リレーショナル・マッピング)モジュールです。Oracleをサポートしており、内部ではruby-oci8 を呼び出しています。
+
+* [[Rails: Complete API|http://api.rubyonrails.org/]]
+* [[Oracle on Rails Wiki|http://wiki.rubyonrails.com/rails/pages/Oracle]]
+
+! Og (ObjectGraph)
+
+Og (ObjectGraph) もORM(オブジェクト・リレーショナル・マッピング)ライブラリです。
+使用方法はわかりません。p(^^;)
+
+* [[http://www.nitroproject.org/]]

Added: web/hiki_data/ja/text/FAQ
===================================================================
--- web/hiki_data/ja/text/FAQ	                        (rev 0)
+++ web/hiki_data/ja/text/FAQ	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,3 @@
+* [[FAQ_plsql_out_param]]
+* [[FAQ_long_or_long_raw]]
+* [[FAQ_uninstall]]

Added: web/hiki_data/ja/text/FAQ_long_or_long_raw
===================================================================
--- web/hiki_data/ja/text/FAQ_long_or_long_raw	                        (rev 0)
+++ web/hiki_data/ja/text/FAQ_long_or_long_raw	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,35 @@
+{{toc}}
+
+! LONG
+
+!! LONG型のカラムに挿入&更新
+特別のことをする必要はありません。単に文字列として挿入&更新するだけです。
+
+注意: 0.1.15以前では最大長は65535です。0.1.16以降は 2G です。
+
+!! LONG型のカラムをフェッチする。
+
+0.1.15以前では最大長は65535です。
+0.1.16 と 1.0.x では、OCI8#long_read_len で最大長を変更できます。
+
+  # 最大データ長を設定する。
+  conn.long_read_len = 1024 * 1024 * 2
+
+2.0.x では最大長は 2G です。long_read_len には依存しません。long_read_len は LONG 型のデータをフェッチするときに内部的に使用されるバッファのサイズとなります。
+
+! LONG RAW
+
+!! LONG RAW 型のカラムに挿入&更新
+
+明示的に RAW としてバインドします。
+  filename = 'SagradaFamilia.gif'
+  image = open(filename, "rb").read()
+  cursor = conn.parse('insert into photos values(:1,:2)')
+  cursor.bind_param(1, filename))
+  # bind image as RAW
+  cursor.bind_param(2, image, OCI8::RAW)
+  cursor.exec
+
+!! LONG RAW 型のカラムをフェッチする。
+
+単にフェッチするだけです。最大長は LONG 型のカラムと同じ制限があります。

Added: web/hiki_data/ja/text/FAQ_plsql_out_param
===================================================================
--- web/hiki_data/ja/text/FAQ_plsql_out_param	                        (rev 0)
+++ web/hiki_data/ja/text/FAQ_plsql_out_param	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,86 @@
+{{toc}}
+
+! サンプルコードで使用するパッケージのソース
+ CREATE OR REPLACE PACKAGE my_package IS
+   PROCEDURE my_proc(a1 IN number, a2 IN varchar2, b1 OUT number, b2 OUT varchar2);
+ END;
+ /
+ CREATE OR REPLACE PACKAGE BODY my_package IS
+   PROCEDURE my_proc(a1 IN number, a2 IN varchar2, b1 OUT number, b2 OUT varchar2) IS
+   BEGIN
+     b1 := a1 * 2;
+     b2 := UPPER(a2);
+   END;
+ END;
+ /
+
+! ruby-oci8 API
+!! 明示的に名前でもってパラメータをバインドする。
+  # use OCI8::Cursor#bind_param and OCI8::Cursor#exec
+  cursor = conn.parse('begin my_package.my_proc(:a1, :a2, :b1, :b2); end;')
+  cursor.bind_param(':a1', 123)
+  cursor.bind_param(':a2', 'abc')
+  # Fixnum としてバインド。値は NULL
+  cursor.bind_param(':b1', nil, Fixnum)
+  # String としてバインド。文字列の最大長は 20 で、値は NULL。
+  cursor.bind_param(':b2', nil, String, 20)
+  cursor.exec()
+  # パラメータを名前でバインドしたときは名前を使用。
+  p cursor[':b1'] # => 246
+  p cursor[':b2'] # => ABC
+
+!! 明示的に位置でもってパラメータをバインドする。
+  # use OCI8::Cursor#bind_param and OCI8::Cursor#exec
+  cursor = conn.parse('begin my_package.my_proc(:a1, :a2, :b1, :b2); end;')
+  cursor.bind_param(1, 123)
+  cursor.bind_param(2, 'abc')
+  cursor.bind_param(3, nil, Fixnum)
+  cursor.bind_param(4, nil, String, 20)
+  cursor.exec()
+  # パラメータを位置でバインドしたときは位置を使用。
+  p cursor[3] # => 246
+  p cursor[4] # => "ABC"
+
+!! 暗黙的にパラメータをバインドする。
+  # use OCI8::Cursor#exec with bind parameters.
+  cursor = conn.parse('begin my_package.my_proc(:a1, :a2, :b1, :b2); end;')
+  cursor.exec(123, 'abc', [nil, Fixnum], [nil, String, 20])
+  # 1番目の引数は1番目の位置のバインド値となる。
+  # 2番目は2番目のバインド位置....。
+  # 値が配列のときは、配列の最初の要素がバインドする値で、
+  # 2番目の要素が型、3番目の要素は最大長となる。
+  # パラメータは位置でもってバインドされる。
+  p cursor[3] # => 246
+  p cursor[4] # => "ABC"
+
+!! 実行してバインドパラメータの値を一回で取得する。
+  # OCI8#exec with bind parameters
+  # 実行する SQL が PL/SQL ブロックの場合は、パラメータすべての値を配列で戻す。
+  params = conn.exec('begin my_package.my_proc(:a1, :a2, :b1, :b2); end;',
+                      123, 'abc', [nil, Fixnum], [nil, String, 20])
+  p params[0] # => 123
+  p params[1] # => "abc"
+  p params[2] # => 246
+  p params[3] # => "ABC"
+
+! DBD::OCI8
+Ruby/DBI そのものは OUT パラメータをサポートしていません。DBDドライバ固有の
+関数でサポートされます。
+  sth = dbh.prepare('begin my_package.my_proc(?, ?, ?, ?); end;')
+  sth.bind_param(1, 123)
+  sth.bind_param(2, 'abc')
+  # NULL値をバインドするために type アトリビュート付きで nil を使う。
+  sth.bind_param(3, nil, {'type' => Fixnum})
+  # しかし、文字列の場合は最大長を指定する方法がないため、NULL値は
+  # バインドできない。
+  sth.bind_param(4, ' ' * 20)
+  sth.execute
+  # DBDドライバ固有関数を呼び出す。
+  p sth.func(:bind_value, 3) # => 246
+  p sth.func(:bind_value, 4) # => "ABC"
+
+! Rails (ActiveRecord)
+
+生のコネクションを取得して、ruby-oci8 API で使用する。
+  conn = ActiveRecord::Base.connection.raw_connection
+  ...

Added: web/hiki_data/ja/text/FAQ_uninstall
===================================================================
--- web/hiki_data/ja/text/FAQ_uninstall	                        (rev 0)
+++ web/hiki_data/ja/text/FAQ_uninstall	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,10 @@
+以下の3つのファイルを削除してください。
+* oci8.rb
+* oci8lib.so
+* DBD/OCI8/OCI8.rb
+
+oci8.rb と DBD/OCI8/OCI8.rb は sitelib ディレクトリにあります。
+ ruby -r rbconfig -e "puts Config::CONFIG['sitelibdir']"
+
+oci8lib.so は sitearch ディレクトリにあります。
+ ruby -r rbconfig -e "puts Config::CONFIG['sitearchdir']"

Added: web/hiki_data/ja/text/FrontPage
===================================================================
--- web/hiki_data/ja/text/FrontPage	                        (rev 0)
+++ web/hiki_data/ja/text/FrontPage	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,13 @@
+! What is ruby-oci8
+
+ruby-oci8 は[[Oracle Database]]用の ruby インターフェースです。Oracle8, Oracle8i, Oracle9i, Oracle10g, [[Oracle XE]], [[Oracle Instant Client]]で利用可能です。
+
+注意: ruby-oci8-1.0 は安定版です。一方、ruby-oci8-2.0-unstable は開発中のバージョンです。
+2.0-unstable は実際のアプリケーションには使用しないでください。
+
+Oracle7 を使用している場合は、吉田正人さんの[[Oracle7 Module for Ruby]]を使ってください。
+
+! One-liner のサンプル
+
+scott/tiger で接続して、emp テーブルを select して、CSV 形式で出力する。
+  ruby -r oci8 -e "OCI8.new('scott', 'tiger').exec('select * from emp') do |r| puts r.join(','); end"

Added: web/hiki_data/ja/text/HowToInstall
===================================================================
--- web/hiki_data/ja/text/HowToInstall	                        (rev 0)
+++ web/hiki_data/ja/text/HowToInstall	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,5 @@
+Windows を使用している場合、バイナリパッケージを利用したほうが良いでしょう。
+* [[InstallBinaryPackage]] (Windows のみ)
+ソースコードからインストールする場合、Oracleクライアントの種類によって方法が異なります。
+* [[InstallForFullClient]]
+* [[InstallForInstantClient]]

Added: web/hiki_data/ja/text/InstallBinaryPackage
===================================================================
--- web/hiki_data/ja/text/InstallBinaryPackage	                        (rev 0)
+++ web/hiki_data/ja/text/InstallBinaryPackage	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,12 @@
+! 1. Oracleクライアントのバージョンの確認
+
+バイナリパッケージは Oracle 8.1.5 以降でのみ利用可能です。
+
+! 2. ダウンロード
+
+[[rubyforge|http://rubyforge.org/frs/?group_id=256]]より ruby-oci8-VERSION-mswin32.rb をダウンロードしてください。
+
+注意: 1.0 は安定版ですが、2.0-unstable は開発中のバージョンです。
+
+! 3. パッケージを実行する。
+  C:> ruby ruby-oci8-VERSION-mswin32.rb

Added: web/hiki_data/ja/text/InstallForFullClient
===================================================================
--- web/hiki_data/ja/text/InstallForFullClient	                        (rev 0)
+++ web/hiki_data/ja/text/InstallForFullClient	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,80 @@
+! 1. ソースコードのダウンロード
+
+[[rubyforge|http://rubyforge.org/frs/?group_id=256]]より ruby-oci8-VERSION.tar.gz をダウンロードしてください。
+
+注意: 1.0 は安定版ですが、2.0-unstable は開発中のバージョンです。
+
+! 2. '''ruby''' が PATH に入っているか確認
+
+!! UNIX
+  $ ruby -v
+  ruby 1.8.5 (2006-08-25) [i486-linux]
+
+!! Windows
+  C:\> ruby -v
+  ruby 1.8.5 (2006-08-25) [i386-mswin32]
+
+! 3. '''make''' が PATH に入っているか確認
+
+!! UNIX or Windows(cygwin, mingw32)
+  $ which make
+
+!! Windows(mswin32)
+  C:\> nmake /?
+nmake が見付からない場合は、vcvars32.bat を実行してから再度確認してください。
+  C:\> C:\Program Files\Microsoft Visual Studio\VC98\Bin\vcvars32.bat
+  C:\> nmake /?
+
+! 4. '''sqlplus''' がちゃんと動くか確認
+
+!! UNIX
+  $ sqlplus USERNAME/PASSWORD
+
+!! Windows
+  C:\> sqlplus USERNAME/PASSWORD
+
+! 5. ライブラリ検索パスの確認
+
+!! UNIX
+
+使用しているOSのライブラリ検索パスが $ORACLE_HOME/lib を指すように設定する。
+ただし、64ビットのデータベースに対して、32ビットの ruby を使用している場合は、
+$ORACLE_HOME/lib32 を代わりに使用すること。
+
+||!OS||!library search path name||
+||Linux||LD_LIBRARY_PATH||
+||Solaris 32-bit ruby||LD_LIBRARY_PATH_32 or LD_LIBRARY_PATH||
+||Solaris 64-bit ruby||LD_LIBRARY_PATH_64 or LD_LIBRARY_PATH||
+||HP-UX PA-RISC 32-bit ruby||SHLIB_PATH||
+||HP-UX PA-RISC 64-bit ruby||LD_LIBRARY_PATH||
+||HP-UX IA64||LD_LIBRARY_PATH||
+||Mac OS X||DYLD_LIBRARY_PATH||
+||AIX||LIBPATH||
+
+環境変数として export するのを忘れずに。
+  $ LD_LIBRARY_PATH=$ORACLE_HOME/lib
+  $ export LD_LIBRARY_PATH
+
+!! Windows
+sqlplus が動くのならば、ライブラリ検索パスには問題ないでしょう。
+
+! 6. make and install
+
+なにか問題があったら、[[お知らせください|ReportInstallProblem]]。
+
+!! UNIX or Windows(cygwin, mingw32)
+
+  gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
+  cd ruby-oci8-VERSION
+  make
+  make install
+
+note: '''sudo'''を使用する場合は、'make install'を実行するときだけにしてください。
+セキュリティ上の理由により、sudo は実行するコマンドへライブラリ検索パスを渡しません。
+
+!! Windows(mswin32)
+
+  gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
+  cd ruby-oci8-VERSION
+  nmake
+  nmake install

Added: web/hiki_data/ja/text/InstallForInstantClient
===================================================================
--- web/hiki_data/ja/text/InstallForInstantClient	                        (rev 0)
+++ web/hiki_data/ja/text/InstallForInstantClient	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,110 @@
+! 1. ソースコードのダウンロード
+
+[[rubyforge|http://rubyforge.org/frs/?group_id=256]]より ruby-oci8-VERSION.tar.gz をダウンロードしてください。
+
+注意: 1.0 は安定版ですが、2.0-unstable は開発中のバージョンです。
+
+! 2. Instant Client のダウンロード
+
+少なくとも2つのパッケージ、
+"Instant Client Package - '''Basic'''" と "Instant Client Package - '''SDK'''"
+を [[Oracle Technology Network|http://otn.oracle.co.jp/tech/oci/instantclient/instantclient.html]]
+からダウンロードしてください。
+
+note: 64ビットOS上でも、ruby が 32ビットの場合は 32ビットのパッケージを使用してください。
+
+! 3. Instant Client のインストール
+
+!! UNIX zip packages
+
+  mkdir /opt
+  mkdir /opt/oracle
+  cd /opt/oracle
+  unzip path/to/instantclient-basic-OS-VERSION.zip
+  unzip path/to/instantclient-sdk-OS-VERSION.zip
+
+!! Linux rpm packages
+
+  rpm -i path/to/oracle-instantclient-basic-VERSION-ARCH.rpm
+  rpm -i path/to/oracle-instantclient-devel-VERSION-ARCH.rpm
+
+!! Windows
+
+  C:
+  mkdir C:\oracle
+  cd c:\oracle
+  unzip path/to/instantclient-basic-OS-VERSION.zip
+  unzip path/to/instantclient-sdk-OS-VERSION.zip
+
+! 4. インストールされたライブラリのチェック (UNIX zip packages only)
+
+!! UNIX
+
+/opt/oracle/instantclient10_1/libclntsh.so がない場合は、シンボリックリンク
+を作成してください。
+
+  cd /opt/oracle/instantclient10_1
+  ln -s libclntsh.so.10.1 libclntsh.so
+
+Note:
+* HP-UX PA-RISC では、libclntsh.so の代わりに libclntsh.sl を使用。
+* Mac OS X では、libclntsh.so の代わりに libclntsh.dylib を使用。
+* AIX の場合、このステップは不要です。
+
+! 5. ライブラリ検索パスの設定
+
+インストールした場所を指すようにライブラリ検索パスを
+設定する。
+
+||!OS||!Environment Variable Name||
+||Linux||LD_LIBRARY_PATH||
+||Solaris 32-bit ruby||LD_LIBRARY_PATH_32 or LD_LIBRARY_PATH||
+||Solaris 64-bit ruby||LD_LIBRARY_PATH_64 or LD_LIBRARY_PATH||
+||HP-UX PA-RISC 32-bit ruby||SHLIB_PATH||
+||HP-UX PA-RISC 64-bit ruby||LD_LIBRARY_PATH||
+||HP-UX IA64||LD_LIBRARY_PATH||
+||Mac OS X||DYLD_LIBRARY_PATH||
+||AIX||LIBPATH||
+||Windows||PATH||
+
+!! UNIX zip packages
+
+For example:
+  $ LD_LIBRARY_PATH=/opt/oracle/instantclient_10_2
+  $ export LD_LIBRARY_PATH
+
+!! Linux rpm packages
+
+For example:
+  $ LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client/lib
+  $ export LD_LIBRARY_PATH
+
+!! Windows
+
+For example:
+  C:\> PATH=C:\oracle\instantclient_10_2;%PATH%
+
+! 6. make and install.
+
+なにか問題があったら、[[お知らせください|ReportInstallProblem]]。
+
+!! UNIX or Windows(cygwin, mingw32)
+
+  gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
+  cd ruby-oci8-VERSION
+  make
+  make install
+
+ruby-oci8 は Instant Client の場所をライブラリ検索パスから探し出します。
+
+note: '''sudo'''を使用する場合は、'make install'を実行するときだけにしてください。
+セキュリティ上の理由により、sudo は実行するコマンドへライブラリ検索パスを渡しません。
+
+!! Windows(mswin32)
+
+  gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
+  cd ruby-oci8-VERSION
+  nmake
+  nmake install
+
+ruby-oci8 は Instant Client の場所をライブラリ検索パスから探し出します。

Added: web/hiki_data/ja/text/InterWikiName
===================================================================
--- web/hiki_data/ja/text/InterWikiName	                        (rev 0)
+++ web/hiki_data/ja/text/InterWikiName	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,4 @@
+* [[Oracle Database|http://www.oracle.co.jp]] alias
+* [[Oracle XE|http://www.oracle.com/technology/products/database/xe/index.html]] alias
+* [[Oracle Instant Client|http://otn.oracle.co.jp/tech/oci/instantclient/instantclient.html]] alias
+* [[Oracle7 Module for Ruby|http://www.yoshidam.net/Ruby.html#oracle]] alias

Added: web/hiki_data/ja/text/PlatformSpecificIssue
===================================================================
--- web/hiki_data/ja/text/PlatformSpecificIssue	                        (rev 0)
+++ web/hiki_data/ja/text/PlatformSpecificIssue	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,89 @@
+! Intel Mac
+
+Oracle は intel mac 用のバイナリを提供していません。
+[[Oracle Instant Client]] 10.1.0.3 は ppc バイナリなので、intel CPU 用の ruby では動かないのです。
+(日本のサイトには Mac OS X 用の instant client はないようです、
+[[英語のサイト|http://www.oracle.com/technology/tech/oci/instantclient/index.html]]にあります。)
+
+
+回避策としては以下の2つがあります。
+* ruby を ppc としてコンパイルする。([[Raimonds Simanovskisさんのblog|http://blog.rayapps.com/2007/08/27/how-to-setup-ruby-and-oracle-client-on-intel-mac/]] を参照)
+* [[ruby-odbc|http://www.ch-werner.de/rubyodbc/]]とサードパーティのODBCドライバ([[Actual Technologies|http://www.actualtechnologies.com/]] または [[OpenLink Software|http://uda.openlinksw.com/]])を使用する。
+
+! Solaris
+
+ruby 本体をコンパイルしたのと同じコンパイラが必要です。
+
+ruby のパッケージは2種類あります。
+# [[Sunfreeware.com|http://www.sunfreeware.com/]]
+# [[Blastwave.org|http://www.blastwave.org/]]
+
+前者は gcc でコンパイルされており、後者は[[Sun Studio|http://developers.sun.com/sunstudio/]]でコンパイルされています。
+どちらのコンパイラも自由に使用できます。
+
+Blastwave.orgのrubyを使っていて、Sun Studioをインストールしたくない場合は、rbconfig.rb を手で編集する方法もあります。[[(ここを参照)|http://forum.textdrive.com/viewtopic.php?id=12630]]
+
+! Linux
+
+ruby と同じビット幅のライブラリを使用してください。例えば、 x86_64 版の ruby には x86_64 の instant client, 32ビットの ruby には 32ビットの instant client が必要です。OSのビット数ではなく、ruby のビット幅にのみ依存します。
+full client の場合、x86_64 版 ruby は 32 ビットの full client を使用できません。しかし、32 ビット ruby は 64 ビットの full client を使用可能です。32ビット版ライブラリが $ORACLE_HOME/lib32 にあるためです。
+
+ruby の種類を確認するには以下のコマンドを実行してください。
+  file `which ruby`
+注意: '''`''' はバッククォートです。
+
+! FreeBSD
+
+2つの方法があります。
+* instantclient を linux emulator 上の ruby で動かす。
+* oracle8-client port を使用。
+
+oracle8-client を使用する場合は以下のようにします。
+* oracle8-client をインストール
+  cd /usr/ports/databases/oracle8-client
+  make
+  make install
+* 環境変数 ORACLE_HOME を設定
+  export ORACLE_HOME=/usr/local/oracle8-client
+* ruby-oci8 のソースコードを展開して oraconf.rb を入れ替える。
+  tar xvfz ruby-oci8-1.0.0-rc3.tar.gz
+  cd ruby-oci8-1.0.0-rc3/ext/oci8
+  mv oraconf.rb oraconf.rb.orig
+  wget http://ruby-oci8.rubyforge.org/svn/branches/ruby-oci8-1.0/ext/oci8/oraconf.rb
+
+この後の作業は [[InstallForFullClient]]を見てください。
+
+note: oracle8-client port のOracleのライブラリはスタティック
+リンクライブラリなので、LD_LIBRARY_PATH の設定は必要あり
+ません。
+
+FreeBSD ではすべての機能は動かないようです。make check
+を実行すると失敗したり、無限ループに陥いるものがあります。
+使えるかどうか試験して、使える機能だけを使用してください。
+
+! HP-UX
+
+libpthread、libcl とリンクしてある ruby が必要です。
+
+詳細は[[http://www.alfonsomartone.itb.it/xvpucf.html]]を見てください。
+
+! Windows
+
+ディスクI/Oの負荷の高いマシンや、遅いディスクを使っているマシンでは、以下のエラーが起こることがあります。
+  Permission denied - conftest.exe
+
+回避策として mkmf.rb を編集してください。
+
+  def try_run(src, opt="")
+    if try_link0(src, opt)
+      xsystem("./conftest")
+    else
+      nil
+    end
+  ensure
+    # add the following one line.
+    sleep 1 if /mswin32|cygwin|mingw32|bccwin32/ =~ RUBYPLATFORM
+    rm_f "conftest*"
+  end
+
+参考: [[http://abstractplain.net/blog/?p=788]]

Added: web/hiki_data/ja/text/ReportInstallProblem
===================================================================
--- web/hiki_data/ja/text/ReportInstallProblem	                        (rev 0)
+++ web/hiki_data/ja/text/ReportInstallProblem	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,31 @@
+以下の情報を [[rubyforge help forum|http://rubyforge.org/forum/forum.php?forum_id=1078]] へ投稿するか、[[私|mailto:kubo at jiubao.org]]へメールしてください。
+
+note: 問題を報告する前に [[PlatformSpecificIssue]] を読んでください。
+
+! 'ext/oci8/mkmf.log' の最後の100行
+
+   tail -100 ext/oci8/mkmf.log
+
+! 以下のコマンドの実行結果
+    ruby --version
+    ruby -r rbconfig -e "p Config::CONFIG['host']"
+    ruby -r rbconfig -e "p Config::CONFIG['CC']"
+    ruby -r rbconfig -e "p Config::CONFIG['CFLAGS']"
+    ruby -r rbconfig -e "p Config::CONFIG['LDSHARED']"
+    ruby -r rbconfig -e "p Config::CONFIG['LDFLAGS']"
+    ruby -r rbconfig -e "p Config::CONFIG['DLDLAGS']"
+    ruby -r rbconfig -e "p Config::CONFIG['LIBS']"
+    ruby -r rbconfig -e "p Config::CONFIG['GNU_LD']"
+!! gcc を使っている場合
+    gcc --print-prog-name=ld
+    gcc --print-prog-name=as
+!! 32ビットと64ビットのバイナリが同時に動く環境の場合
+  file `which ruby`
+  file $ORACLE_HOME/bin/oracle  # Full Client
+  file INSTANT_CLIENT_DIRECTORY/libclntsh.*  # Instant Client
+  echo $LD_LIBRARY_PATH
+  echo $LIBPATH              # AIX
+  echo $SHLIB_PATH           # HP-UX PA-RISC 32-bit ruby
+  echo $DYLD_LIBRARY_PATH    # Mac OS X
+  echo $LD_LIBRARY_PATH_32   # Solaris 32-bit ruby
+  echo $LD_LIBRARY_PATH_64   # Solaris 64-bit ruby

Added: web/hiki_data/ja/text/SideMenu
===================================================================
--- web/hiki_data/ja/text/SideMenu	                        (rev 0)
+++ web/hiki_data/ja/text/SideMenu	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,31 @@
+{{logo}}
+{{br}}
+[ {{link_to_english}} | Japanese ]
+
+'''This site is under construction.'''
+
+! サイトマップ
+
+!! [[FrontPage]]
+
+!! Install and Setup
+* [[HowToInstall]]
+** [[InstallBinaryPackage]]
+** [[InstallForFullClient]]
+** [[InstallForInstantClient]]
+* [[ReportInstallProblem]]
+* [[PlatformSpecificIssue]]
+!! 使用方法
+* [[APIReference]]
+** [[api]]
+*** [[api_OCI8]]
+*** [[api_OCI8Cursor]]
+*** [[api_OCI8CLOB]]
+*** [[api_OCI8BLOB]]
+*** [[api_OCI8BFILE]]
+*** [[api_OCI8MetadataTable]]
+*** [[api_OCI8MetadataView]]
+*** [[api_OCI8MetadataColumn]]
+** [[dbd_oci8]]
+
+* [[FAQ]]

Added: web/hiki_data/ja/text/api
===================================================================
--- web/hiki_data/ja/text/api	                        (rev 0)
+++ web/hiki_data/ja/text/api	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,8 @@
+* [[api_OCI8]] {{toc_here(api_OCI8)}}
+* [[api_OCI8Cursor]] {{toc_here(api_OCI8Cursor)}}
+* [[api_OCI8CLOB]] {{toc_here(api_OCI8CLOB)}}
+* [[api_OCI8BLOB]] {{toc_here(api_OCI8BLOB)}}
+* [[api_OCI8BFILE]] {{toc_here(api_OCI8BFILE)}}
+* [[api_OCI8MetadataTable]] {{toc_here(api_OCI8MetadataTable)}}
+* [[api_OCI8MetadataView]] {{toc_here(api_OCI8MetadataView)}}
+* [[api_OCI8MetadataColumn]] {{toc_here(api_OCI8MetadataColumn)}}

Added: web/hiki_data/ja/text/api_OCI8
===================================================================
--- web/hiki_data/ja/text/api_OCI8	                        (rev 0)
+++ web/hiki_data/ja/text/api_OCI8	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,160 @@
+このクラスのインスタンスはデータベースへの接続に対応します。JDBC の
+java.sql.Connection, Perl/DBI の database handle: $dbh に対応します。
+
+! クラスメソッド
+
+!! OCI8.new(userid, password, dbname = nil, privilege = nil)
+
+''userid'', ''password'' でもってオラクルへ接続します。''dbname'' は Net8 の
+接続文字列です。DBA 権限が必要な場合は ''privilege'' に :SYSDBA また
+は :SYSOPERを指定します。
+Oracle クライアントが 10g 以降ならば、''dbname'' として、"//ホスト名_or_IP:ポート番号/ORACLE_SID"
+が使用できます。
+
+  # sqlplus scott/tiger
+  conn = OCI8.new("scott", "tiger")
+
+  # sqlplus scott/tiger at orcl.world
+  conn = OCI8.new("scott", "tiger", "orcl.world")
+
+  # sqlplus 'sys/change_on_install as sysdba'
+  conn = OCI8.new("sys", "change_on_install", nil, :SYSDBA)
+
+  # sqlplus scott/tiger@//oracle_db.example.com/XE
+  conn = OCI8.new("scott", "tiger", "//oracle_db.example.com/XE")
+
+OS認証でもってOracleに接続するには、userid, password に nil を渡してください。(new in 1.0.0-rc2)
+
+! インスタンスメソッド
+
+!! logoff()
+オラクルとの接続を切ります。コミットされてないトランザクションは
+ロールバックされます。
+
+  conn = OCI8.new("scott", "tiger")
+  ... do something ...
+  conn.logoff
+
+!! exec(sql, *bindvars)
+sql 文を実行します。sql 文が SELECT文、INSERT/UPDATE/DELETE文、
+CREATE/ALTER/DROP文、PL/SQL文、それぞれ場合で戻り値の種類が異なり
+ます。
+
+''bindvars'' がある場合、バインド変数としてバインドしてから実行します。
+
+SELECT 文でブロックがついてない場合、[[OCI8::Cursor]] のインスタンス
+を返します。
+
+  conn = OCI8.new('scott', 'tiger')
+  cursor = conn.exec('SELECT * FROM emp')
+  while r = cursor.fetch()
+    puts r.join(',')
+  end
+  cursor.close
+  conn.logoff
+
+SELECT 文でブロックがついている場合、イテレータとして動き、処理
+した行数が返ります。ブロックにはフェッチしたデータが配列でわたり
+ます。NULL値は ruby 側では nil にマッピングしてあります。
+
+  conn = OCI8.new('scott', 'tiger')
+  num_rows = conn.exec('SELECT * FROM emp') do |r|
+    puts r.join(',')
+  end
+  puts num_rows.to_s + ' rows were processed.'
+  conn.logoff
+
+INSERT/UPDATE/DELETE文の場合、それぞれ処理した行数が返ります。
+
+  conn = OCI8.new('scott', 'tiger')
+  num_rows = conn.exec('UPDATE emp SET sal = sal * 1.1')
+  puts num_rows.to_s + ' rows were updated.'
+  conn.logoff
+
+CREATE/ALTER/DROP文の場合、true が返ります。
+
+  conn = OCI8.new('scott', 'tiger')
+  conn.exec('CREATE TABLE test (col1 CHAR(6))')
+  conn.logoff
+
+PL/SQL文の場合、実行後のバインド変数の値が配列となって返ります。
+
+  conn = OCI8.new('scott', 'tiger')
+  conn.exec("BEGIN :str := TO_CHAR(:num, 'FM0999'); END;", 'ABCD', 123)
+  # => ["0123", 123]
+  conn.logoff
+
+上記の例では、'':str'' と '':num'' という2つのバインド変数が
+あります。初期値としてそれぞれ"幅4で値は ABCD の文字列"と"値 123
+の数値"が設定されてから、PL/SQL文が実行され、実行後のバインド変数
+の値が配列として返ってきます。配列の順番はバインド変数の順番と同
+じです。
+
+!! parse(sql)
+カーソルを作成し、sql 文実行の準備をします。[[OCI8::Cursor]] のインス
+タンスが返ります。
+
+!! describe_table(table_name)
+(new in 1.0.0 without 'rc')
+
+[[api_OCI8MetadataTable]]または[[api_OCI8MetadataView]]
+を戻します。テーブル名が見つからないときは OCIError(Ora-04043)
+の例外が発生します。
+
+!! commit()
+トランザクションをコミットします。
+
+  conn = OCI8.new("scott", "tiger")
+  conn.exec("UPDATE emp SET sal = sal * 1.1") # yahoo
+  conn.commit
+  conn.logoff
+
+!! rollback()
+トランザクションをロールバックします。
+
+  conn = OCI8.new("scott", "tiger")
+  conn.exec("UPDATE emp SET sal = sal * 0.9") # boos
+  conn.rollback
+  conn.logoff
+
+!! autocommit?
+autocommit モードの状態を返します。デフォルトは false です。この
+値が true のとき、INSERT/UPDATE/DELETE文が実行される毎に自動的に
+コミットされます。
+
+!! autocommit = boolean_value
+autocommit モードの状態を変更します。
+
+  conn = OCI8.new("scott", "tiger")
+  conn.autocommit = true
+  ... do something ...
+  conn.logoff
+
+!! long_read_len
+LONG 型、LONG RAW 型のデータをフェッチするときに内部で確保されるサイズを取得します。
+デフォルト値は 65535 です。ruby-oci8 1.0 ではフェッチできる最大長となります。
+フェッチした値が long_read_len よりも長いときはエラーとなります。
+ruby-oci8 2.0 ではピース単位フェッチを行うときの1ピースのサイズとなります。
+ピース単位フェッチは内部で自動的に行なわれます。
+
+参照: [[FAQ_long_or_long_raw]]
+
+!! long_read_len = size
+long_read_len のサイズを設定します。
+
+参照: [[FAQ_long_or_long_raw]]
+
+!! prefetch_rows = rows
+change the prefetch rows size. This reduces network round trips
+when fetching multiple rows. The default value is 1.
+
+!! non_blocking?
+ブロッキング/非ブロッキングモードの状態を返します。デフォルトは
+false、つまりブロッキングモードです。
+
+!! non_blocking= boolean_value
+ブロッキング/非ブロッキングモードの状態を変更します。
+
+!! break
+実行中の他スレッドの OCI 呼出しをキャンセルします。このメソッドを
+実行するには非ブロッキングモードである必要があります。

Added: web/hiki_data/ja/text/api_OCI8BFILE
===================================================================
--- web/hiki_data/ja/text/api_OCI8BFILE	                        (rev 0)
+++ web/hiki_data/ja/text/api_OCI8BFILE	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,3 @@
+作成中。
+[[英語のページ|http://ruby-oci8.rubyforge.org/en/api_OCI8BFILE.html]]を見てください。
+[[旧ページ|http://www.jiubao.org/ruby-oci8/api.ja.html]]には OCI8::BFILE の説明は載っていません。

Added: web/hiki_data/ja/text/api_OCI8BLOB
===================================================================
--- web/hiki_data/ja/text/api_OCI8BLOB	                        (rev 0)
+++ web/hiki_data/ja/text/api_OCI8BLOB	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,3 @@
+作成中。
+[[英語のページ|http://ruby-oci8.rubyforge.org/en/api.html]]か
+[[旧ページ|http://www.jiubao.org/ruby-oci8/api.ja.html]]を見てください。

Added: web/hiki_data/ja/text/api_OCI8CLOB
===================================================================
--- web/hiki_data/ja/text/api_OCI8CLOB	                        (rev 0)
+++ web/hiki_data/ja/text/api_OCI8CLOB	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,107 @@
+CLOB オブジェクトを読み書きするための I/O クラスです。
+CLOB のデータをテーブルへ挿入したり、select 文で取り出したりできます。
+
+  con = OCI8.new('scott', 'tiger')
+  # テーブルの作成
+  con.exec("CREATE TABLE novels (title VARCHAR2(30), contents CLOB)")
+  # CLOB オブジェクトの挿入
+  con.exec("INSERT INTO novels(title, contents) values (:1, :2)",
+           'a long tale', OCI8::CLOB.new(con, 'long long text ...'))
+  # CLOB オブジェクトを select
+  con.exec("select contents from novels where title = :1",
+           'a long tale') do |row|
+    # row[0] is a CLOB object.
+    contents = row[0].read
+  end
+
+! クラスメソッド
+
+!! OCI8::CLOB.new(con, val)
+(new in 1.0.0-rc2)
+
+テンポラリLOBの作成。ここでは"テンポラリ(一時的な)"はデータベースに保存されてない状態を意味する。データをテンポラリLOBに追加してから、テーブルへ挿入することができます。
+
+! インスタンスメソッド
+
+!! available?
+CLOBが使用可能かどうかをチェックする。
+
+  con.exec("CREATE TABLE novels (title VARCHAR2(30), contents CLOB)")
+  con.exec("INSERT INTO novels VALUES ('null-data', NULL)")
+  con.exec("INSERT INTO novels VALUES ('empty-data', EMPTY_CLOB())")
+  con.exec("SELECT title, contents FROM novels") do |title, contents|
+    case title
+    when 'null-data'
+      puts "#{title} => #{contents.available?.to_s}"
+      # => false
+    when 'empty-data'
+      puts "#{title} => #{contents.available?.to_s}"
+      # => true
+    end
+  end
+
+!! read(size = nil)
+CLOB から文字データを取得する。文字数は最大で引数で指定された size までです。size が nil のときは、CLOB の最後まで読み込みます。
+
+注意点: size はバイト単位ではなく、文字単位です。戻り値にマルチバイト文字が含まれている場合、戻り値のバイト数は size よりも長くなることがあります。
+
+  # read CLOB data.
+  con.exec("SELECT title, contents FROM novels") do |title, contents|
+    File.open(title, 'w') do |f|
+      f.write(contents.read)
+    end
+  end
+
+!! write(string)
+write the given string to CLOB. The return value is the number of written '''characters'''.
+If old data is longer than new data, resize by OCI8::CLOB#size.
+
+  # write to CLOB.
+  con.exec("SELECT title, contents FROM novels") do |title, clob|
+    File.open(title, 'r') do |f|
+      contents = f.read
+      num_chars = clob.write(contents)
+      clob.size = num_chars
+    end
+  end
+
+note: OCI8::CLOB#size is counted by characters. If the contents contain multibyte characters, the following code set incorrect clob size.
+
+  # bad example
+  con.exec("SELECT title, contents FROM novels") do |title, clob|
+    File.open(title, 'r') do |f|
+      contents = f.read
+      clob.write(contents)
+      clob.size = contents.length # boo!
+    end
+  end
+
+!! size
+return the number of characters in the CLOB.
+
+!! size=(len)
+set the number of characters in the CLOB.
+
+!! pos
+return the current offset of the CLOB in characters.
+
+!! pos = number
+set the current offset of the CLOB in characters.
+
+!! eof?
+true if the current offset is at the end of the CLOB.
+
+!! chunk_size
+return the chunk size of CLOB.
+
+!! truncate(len)
+synonym for size=.
+
+!! tell
+synonym for pos.
+
+!! seek(pos)
+synonym for pos=.
+
+!! rewind
+set the current offset to zero.

Added: web/hiki_data/ja/text/api_OCI8Cursor
===================================================================
--- web/hiki_data/ja/text/api_OCI8Cursor	                        (rev 0)
+++ web/hiki_data/ja/text/api_OCI8Cursor	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,183 @@
+このクラスのインスタンスはオラクルの用語ではカーソルに対応します。JDBC
+の java.sql.Statement, Perl/DBI の statement handle: $sth に対応します。
+
+このクラスのインスタンスは new により生成しないでください。必ず
+''OCI8#exec'', ''OCI8#parse'' 経由で生成してください。
+
+! インスタンスメソッド
+
+!! define(pos, type, length = nil)
+fetch で取得するデータの型を明示的に指定する。parse と exec の間
+に実行してください。pos は 1 から数えます。length は type に
+String を指定したときに有効です。
+
+  cursor = conn.parse("SELECT ename, hiredate FROM emp")
+  cursor.define(1, String, 20) # 1カラム目を String として fetch
+  cursor.define(2, Time)       # 2カラム目を Time として fetch
+  cursor.exec()
+
+!! bind_param(key, val, type = nil, length = nil)
+明示的に変数をバインドします。
+
+key が数値の場合は、バインド変数の位置によってバインドします。位
+置は1から数えます。key が文字列の場合は、バインド変数の名前によっ
+てバインドします。
+
+  cursor = conn.parse("SELECT * FROM emp WHERE ename = :ename")
+  cursor.bind_param(1, 'SMITH') # bind by position
+    ...or...
+  cursor.bind_param(':ename', 'SMITH') # bind by name
+
+数値をバインドする場合、Integer か Fixnum か Float が使ってください。Bignum
+は使用できません。初期値を NULL にする場合は、val を nil にして、
+type をFixnum か Float にしてください。
+
+  cursor.bind_param(1, 1234) # bind as Fixnum, Initial value is 1234.
+  cursor.bind_param(1, 1234.0) # bind as Float, Initial value is 1234.0.
+  cursor.bind_param(1, nil, Fixnum) # bind as Fixnum, Initial value is NULL.
+  cursor.bind_param(1, nil, Float) # bind as Float, Initial value is NULL.
+
+文字列をバインドする場合、val にそのままバインドする文字を指定し
+てください。バインドが出力として使われる場合、出力するのに必要な
+長さの文字を指定するか、type に String を指定した上で length を指
+定してください。
+
+  cursor = conn.parse("BEGIN :out := :in || '_OUT'; END;")
+  cursor.bind_param(':in', 'DATA') # bind as String with width 4.
+  cursor.bind_param(':out', nil, String, 7) # bind as String with width 7.
+  cursor.exec()
+  p cursor[':out'] # => 'DATA_OU'
+  # PL/SQLブロック内での :out は 8バイトだが、幅7の文字としてバインド
+  # してあるので、7バイト目で切れている
+
+文字列を RAW 型としてバインドする場合は必ず type に OCI8::RAW を
+指定してください。
+
+  cursor = conn.parse("INSERT INTO raw_table(raw_column) VALUE (:1)")
+  cursor.bind_param(1, 'RAW_STRING', OCI8::RAW)
+  cursor.exec()
+  cursor.close()
+
+!! [key]
+バインド変数の値を取り出します。
+
+明示的にバインドした場合、#bind_param で指定した key でもって取り出します。
+名前でバインドしたときは名前を使用し、位置でバインドしたときは位置を使用
+してください。
+
+  cursor = conn.parse("BEGIN :out := 'BAR'; END;")
+  cursor.bind_param(':out', 'FOO') # 名前でバインド
+  p cursor[':out'] # => 'FOO'
+  p cursor[1] # => nil
+  cursor.exec()
+  p cursor[':out'] # => 'BAR'
+  p cursor[1] # => nil
+
+  cursor = conn.parse("BEGIN :out := 'BAR'; END;")
+  cursor.bind_param(1, 'FOO') # 位置でバインド
+  p cursor[':out'] # => nil
+  p cursor[1] # => 'FOO'
+  cursor.exec()
+  p cursor[':out'] # => nil
+  p cursor[1] # => 'BAR'
+
+OCI8#exec、OCI8::Cursor#exec を使用してバインドした場合、
+バインド変数の位置でもって取得します。バインド位置は1から数えます。
+
+  cursor = conn.exec("BEGIN :out := 'BAR'; END;", 'FOO')
+  # 一番目のバインド変数は、長さ3の String としてバインドされ、初期値は 'FOO' です。
+  # 実行後、バインド変数の値は 'BAR' となります。
+  p cursor[1] # => 'BAR'
+
+!! [key] = val
+バインド変数に値を設定します。key の指定方法は
+''OCI8::Cursor#[]''と同じです。バインド変数の値を何回も変更&実行するとき
+に使用してください。
+
+  cursor = conn.parse("INSERT INTO test(col1) VALUES(:1)")
+  cursor.bind_params(1, nil, String, 3)
+  ['FOO', 'BAR', 'BAZ'].each do |key|
+    cursor[1] = key
+    cursor.exec
+  end
+  cursor.close()
+
+  ['FOO', 'BAR', 'BAZ'].each do |key|
+    conn.exec("INSERT INTO test(col1) VALUES(:1)", key)
+  end
+
+両方とも結果は同じですが、前者のほうが負荷が少なくなります。
+
+!! keys
+バインド変数の key を配列にして返します。
+
+!! exec(*bindvars)
+カーソルに割当てられた SQL を実行します。SQL が SELECT文、
+INSERT/UPDATE/DELETE文、CREATE/ALTER/DROP文とPL/SQL文、それぞれ場
+合で戻り値の種類が異なります。
+
+SELECT文の場合、select-list の数が返ります。
+
+INSERT/UPDATE/DELETE文の場合、それぞれ処理した行数が返ります。
+
+CREATE/ALTER/DROP文とPL/SQL文の場合、true が返ります。
+OCI8#exec では PL/SQL文の場合、バインド変数の値が配列となって
+返りますが、このメソッドでは単に true が返ります。バインド変数の
+値は OCI8::Cursor#[] でもって明示的に取得してください。
+
+!! type
+QL文の種類を取得します。戻り値は以下のとおりです。
+* OCI8::STMT_SELECT
+* OCI8::STMT_UPDATE
+* OCI8::STMT_DELETE
+* OCI8::STMT_INSERT
+* OCI8::STMT_CREATE
+* OCI8::STMT_DROP
+* OCI8::STMT_ALTER
+* OCI8::STMT_BEGIN
+* OCI8::STMT_DECLARE
+のどれかです。PL/SQL文の場合は、OCI8::STMT_BEGIN か
+OCI8::STMT_DECLARE となります。
+
+ruby-oci8 1.0 の場合は Fixnum です。
+ruby-oci8 2.0 の場合は Symbol となります。
+
+!! row_count
+処理した行数を返します。
+
+!! get_col_names
+選択リストの名前を配列で取得します。exec した後に使用してください。
+
+!! column_metadata
+(new in 1.0.0 without rc)
+
+select文のカラムの情報を取得します。
+OCI8#exec または OCI8::Cursor#exec を実行した
+後でないと情報を取得できません。このメソッドは
+[[api_OCI8MetadataColumn]]の配列を戻します。
+
+!! fetch
+フェッチしたデータが配列として返ります。SELECT 文のみに有効です。
+
+  conn = OCI8.new('scott', 'tiger')
+  cursor = conn.exec('SELECT * FROM emp')
+  while r = cursor.fetch()
+    puts r.join(',')
+  end
+  cursor.close
+  conn.logoff
+
+!! fetch_hash
+Hash としてデータをフェッチします。Hash のキーはカラム名です。
+
+!! close
+カーソルをクローズします。
+
+!! rowid
+現在実行している行の ROWID を取得します。
+ここで得られた値はバインド値として使用できます。
+逆に言うと、バインドする目的にしか使用できません。
+
+!! prefetch_rows = rows
+このカーソルのプリフェッチ行数を設定します。
+ここで設定した値は他のカーソルには影響しません。

Added: web/hiki_data/ja/text/api_OCI8MetadataColumn
===================================================================
--- web/hiki_data/ja/text/api_OCI8MetadataColumn	                        (rev 0)
+++ web/hiki_data/ja/text/api_OCI8MetadataColumn	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,136 @@
+列の情報
+
+(new in 1.0.0 without rc)
+
+! クラスメソッド
+
+クラスメソッドはなし。
+
+このオブジェクトは以下のメソッドにより作成されます。
+* [[OCI8::Cursor#column_metadata]]
+* [[OCI8::Metadata::Table#columns]]
+* [[OCI8::Metadata::View#columns]]
+
+! インスタンスメソッド
+
+!! name
+列名
+
+!! type_string
+列定義を文字列で戻す。
+
+  con = OCI8.new('username/password')
+  colinfo = con.describe_table('tab').columns
+  colinfo[0].type_string #=> "VARCHAR2(30) NOT NULL"
+  colinfo[1].type_string #=> "VARCHAR2(7)"
+  colinfo[2].type_string #=> "NUMBER"
+
+!! data_type
+列のデータ型を Symbol で戻す。
+
+||!Oracle type||!data_type||
+||CHAR, NCHAR||:char||
+||VARCHAR2, NVARCHAR2||:varchar2||
+||RAW||:raw||
+||CLOB, NCLOB||:clob||
+||BLOB||:blob||
+||BFILE||:bfile||
+||NUMBER, FLOAT||:number||
+||BINARY_FLOAT||:binary_float||
+||BINARY_DOUBLE||:binary_double||
+||DATE||:date||
+||TIMESTAMP||:timestamp||
+||TIMESTAMP WITH TIME ZONE||:timestamp_tz||
+||TIMESTAMP WITH LOCAL TIME ZONE||:timestamp_ltz||
+||INTERVAL YEAR TO MONTH||:interval_ym||
+||INTERVAL DAY TO SECOND||:interval_ds||
+
+!! charset_form
+キャラクタセットの種類(デフォルトか、各国語か)
+
+||!Oracle type||!char_form||
+||CHAR(n)||:implicit||
+||VARCHAR2(n)||:implicit||
+||CHAR(n CHAR)||:implicit||
+||VARCHAR2(n CHAR)||:implicit||
+||NCHAR(n)||:nchar||
+||NVARCHAR2(n)||:nchar||
+||Others||nil||
+
+!! nullable?
+NULL値を含める場合は true, それ以外は false
+
+!! char_used?
+長さの指定が文字単位の場合は true, それ以外は false.
+
+||!Oracle type||!char_used?||
+||CHAR(n)||false||
+||VARCHAR2(n)||false||
+||CHAR(n CHAR)||true||
+||VARCHAR2(n CHAR)||true||
+||NCHAR(n)||true||
+||NVARCHAR2(n)||true||
+
+!! char_size
+文字列データ型の長さ。char_used? が true の場合は文字単位、false の場合はバイト単位。
+
+||!Oracle type||!char_size||
+||CHAR(n)||n||
+||VARCHAR2(n)||n||
+||CHAR(n CHAR)||n||
+||VARCHAR2(n CHAR)||n||
+||NCHAR(n)||n||
+||NVARCHAR2(n)||n||
+
+!! data_size
+バイト単位でのデータの最大長。
+
+予想ですが、クライアント側での長さではなくて、Oracle内部で使用するデータの最大長と思われる。
+
+||!Oracle tyep||data_size||
+||CHAR(n), VARCHAR2(n)||n||
+||CHAR(n CHAR), VARCHAR2(n CHAR)||n の整数倍(私の環境では4倍) ||
+||NCHAR(n), NVARCHAR2(n)||n の整値倍(私の環境では2倍)||
+||NUMBER, FLOAT||22||
+||BINARY_FLOAT||4||
+||BINARY_DOUBLE||8||
+||DATE||7||
+||TIMESTAMP||11||
+||TIMESTAMP WITH TIME ZONE||13||
+||TIMESTAMP WITH LOCAL TIME ZONE||11||
+
+!! precision
+数値型の精度。NUMBER の場合10進数での桁数、FLOATの場合は 2進数での桁数。FLOATの精度に 0.30103 を掛けるとNUMBERでの精度になります。この値が 0 のときは、精度と小数点以下桁数の両方共無指定の NUMBER 型となります。
+
+||!Oracle type||!precision||
+||NUMBER||0||
+||NUMBER(n)||n||
+||NUMBER(m, n)||m||
+||FLOAT||126||
+||FLOAT(n)||n||
+
+!! scale
+小数点以下の桁数。precision が 0以外で scale が -127 のときは FLOAT。それ以外は NUMBER。
+
+||!Oracle type||!scale||
+||NUMBER||-127 or 0||
+||NUMBER(n)||0||
+||NUMBER(m, n)||n||
+||FLOAT||-127||
+||FLOAT(n)||-127||
+
+!! fsprecision
+小数秒精度(fractional seconds precision)
+
+||!Oracle type||!fsprecision||
+||TIMEPTAMP(n)||n||
+||TIMESTAMP(n) WITH TIME ZONE||n||
+||TIMESTAMP(n) WITH LOCAL TIME ZONE||n||
+||INTERVAL DAY(m) TO SECOND(n)||n||
+
+!! lfprecision
+先行フィールド精度(leading field precision)
+
+||!Oracle type||!lfprecision||
+||INTERVAL YEAR(n) TO MONTH||n||
+||INTERVAL DAY(m) TO SECOND(n)||m||

Added: web/hiki_data/ja/text/api_OCI8MetadataTable
===================================================================
--- web/hiki_data/ja/text/api_OCI8MetadataTable	                        (rev 0)
+++ web/hiki_data/ja/text/api_OCI8MetadataTable	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,19 @@
+テーブルのメタデータ
+(new in 1.0.0 without rc)
+
+このオブジェクトは以下のメソッドにより作成される。
+* [[OCI8#describe_table(name)]] (name がテーブル名の場合)
+
+! インスタンスメソッド
+
+!! obj_schema
+スキーマ名
+
+!! obj_name
+テーブル名
+
+!! num_cols
+カラムの個数
+
+!! columns
+[[api_OCI8MetadataColumn]]の配列

Added: web/hiki_data/ja/text/api_OCI8MetadataView
===================================================================
--- web/hiki_data/ja/text/api_OCI8MetadataView	                        (rev 0)
+++ web/hiki_data/ja/text/api_OCI8MetadataView	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,19 @@
+ビューのメタデータ
+(new in 1.0.0 without rc)
+
+このオブジェクトは以下のメソッドにより作成される。
+* [[OCI8#describe_table(name)]] (name がビュー名の場合)
+
+! インスタンスメソッド
+
+!! obj_schema
+スキーマ名
+
+!! obj_name
+ビュー名
+
+!! num_cols
+カラムの個数
+
+!! columns
+[[api_OCI8MetadataColumn]]の配列

Added: web/hiki_data/ja/text/dbd_oci8
===================================================================
--- web/hiki_data/ja/text/dbd_oci8	                        (rev 0)
+++ web/hiki_data/ja/text/dbd_oci8	2008-10-18 07:17:34 UTC (rev 292)
@@ -0,0 +1,140 @@
+DBD::OCI8 は [[Ruby/DBI|http://ruby-dbi.rubyforge.org]] 用のデータベースドライバです。
+DBIの使い方は以下のページを参照してください。
+* [[DBI_SPEC|http://ruby-dbi.rubyforge.org/DBI_SPEC.html]] ([[日本語訳|http://www.jiubao.org/ruby-dbi/DBI_SPEC.ja.html]])
+* [[Using the Ruby DBI Module|http://www.kitebird.com/articles/ruby-dbi.html]] ([[日本語訳|http://www.jiubao.org/ruby-dbi/ruby-dbi.html]])
+* [[書籍「基礎から学ぶWebデータベースプログラミング」サポートページ|http://www.nslabs.jp/book2.rhtml]]
+
+ここでは DBD::OCI8 に特有の事柄のみを記述します。
+
+!! リモート接続
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:dbname', 'username', 'password')
+
+!! ローカル接続
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:', 'username', 'password')
+
+!! sysユーザで接続
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:', 'sys', 'password_of_sys', {'Privilege' => :SYSDBA})
+または
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:', 'sys', 'password_of_sys', {'Privilege' => :SYSOPER})
+
+!! OS認証
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:', nil, nil)
+
+!! 非ブロッキングモード
+
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:', 'username', 'password', {'NonBlocking' => true})
+
+接続後は非ブロッキングモードで SQL が実行されます。
+
+注意: データベースへの接続はブロッキングモードで行なわれます。
+
+!! バインド変数
+
+  require 'dbi'
+  dbh = DBI.connect('DBI:OCI8:', 'username', 'password')
+  sth = dbh.parse('INSERT INTO emp(ename, sal) VALUES (?, ?)')
+  sth.execute('FOOMAN', 100)
+
+!! 明示的なデータ型の定義
+
+  dbh = DBI.connect('DBI:OCI8:', 'username', 'password')
+  sth = dbh.prepare('SELECT SYSDATE FROM DUAL')
+  sth.func(:define, 1, Date) # fetch the 1st column as Date.
+  sth.execute()
+
+!! BLOB
+
+BLOBデータの挿入:
+
+  image = open('SagradaFamilia.gif', "rb").read()
+  # BLOBカラムに 'EMPTY_BLOB()' を挿入する。
+  sth = dbh.prepare("INSERT INTO photos(name, image) VALUES (?, EMPTY_BLOB())")
+  sth.execute("Sagrada Familia")
+  # 挿入された行の ROWID を得る。
+  rowid = sth.func(:rowid) # call driver specific code.
+  # 空の BLOB カラムを OCI8::BLOB として選択する。
+  lob = dbh.select_one("SELECT image FROM photos WHERE ROWID = ?", rowid)[0] # 1st row, 1st column
+  # データをLOBに書き込む。
+  lob.write(image)
+
+BLOBデータの更新:
+
+  new_image = open('SagradaFamilia.gif', "rb").read()
+  # BLOBカラムを OCI8::BLOB として選択する。行をロックするために 'FOR UPDATE' を付ける。
+  lob = dbh.select_one("SELECT image FROM photos WHERE name = ? FOR UPDATE", 'Sagrada familia')[0]
+  # OCI8::BLOB#write(data) で LOB にデータを書き込む。
+  lob.write(new_image)
+  # OCI8::BLOB#truncate(data.size) で長さを修正する。
+  lob.truncate(new_image.size)
+
+BLOBデータの取得:
+  # BLOBカラムを OCI8::BLOB として選択する。
+  lob = dbh.select_one("SELECT image FROM photos WHERE name = ?", 'Sagrada familia')[0]
+  # OCI8::BLOB#read でデータを読み取る。
+  image = lob.read()
+
+BLOBデータの削除:
+  # 対象行を削除
+  dbh.do("DELETE FROM photos WHERE name = ?", 'Sagrada familia')
+
+!! CLOB
+
+CLOBデータの挿入:
+
+  text = open('gutenberg.txt', "r").read()
+  # CLOBカラムに 'EMPTY_CLOB()' を挿入する。
+  sth = dbh.prepare("INSERT INTO books(title, content) VALUES (?, EMPTY_CLOB())")
+  sth.execute("Project Gutenberg")
+  # 挿入された行の ROWID を得る。
+  rowid = sth.func(:rowid) # call driver specific code.
+  # 空の CLOB カラムを OCI8::CLOB として選択する。
+  lob = dbh.select_one("SELECT content FROM books WHERE ROWID = ?", rowid)[0] # 1st row, 1st column
+  # データをLOBに書き込む。
+  lob.write(text)
+
+CLOBデータの更新:
+  new_text = open('gutenberg.txt', "r").read()
+  # CLOBカラムを OCI8::CLOB として選択する。行をロックするために 'FOR UPDATE' を付ける。
+  lob = dbh.select_one("SELECT content FROM books WHERE title = ? FOR UPDATE", 'Project Gutenberg')[0]
+  # OCI8::CLOB#write(data) で LOB にデータを書き込む。
+  lob.write(new_text)
+  # OCI8::CLOB#truncate(OCI8::CLOB#pos) で長さを修正する。
+  # lob.truncate(new_text.size) は使わないでください。new_text.size はバイト単位で
+  # 数を数えますが、#truncate の第一引数は文字の数です。
+  lob.truncate(lob.pos)
+
+CLOBデータの取得:
+  # CLOBカラムを OCI8::CLOB として選択する。
+  lob = dbh.select_one("SELECT content FROM books WHERE title = ?", 'Project Gutenberg')[0]
+  # OCI8::CLOB#read でデータを読み取る。
+  text = lob.read()
+
+CLOBデータの削除:
+  # 対象行を削除
+  dbh.do("DELETE FROM books WHERE content = ?", 'Project Gutenberg')
+
+!! 出力パラメータ
+
+  # DBMS_OUTPUT を有効にする。
+  dbh.do("BEGIN DBMS_OUTPUT.ENABLE; END;")
+   ... DBMS_OUTPUT.PUT_LINE を使用する。 ...
+  # DBMS_OUTPUT.GET_LINE を使用して PUT_LINE された文字列を得る。
+  dbh.prepare("BEGIN DBMS_OUTPUT.GET_LINE(?, ?); END;") do |sth|
+    # 第一パラメータを長さ255の文字列としてバインド
+    sth.bind_param(1, ' ' * 255)
+    # 第二パラメータを整数としてバインド
+    sth.bind_param(2, 0)
+    while true
+      sth.execute
+      # 第二パラメータが0だったら出力データ有り
+      break if sth.func(:bind_value, 2) != 0
+      # 第一パラメータを出力する。
+      puts sth.func(:bind_value, 1)
+    end
+  end

Modified: web/hiki_src/hiki/storage.rb
===================================================================
--- web/hiki_src/hiki/storage.rb	2008-10-17 12:00:47 UTC (rev 291)
+++ web/hiki_src/hiki/storage.rb	2008-10-18 07:17:34 UTC (rev 292)
@@ -83,7 +83,12 @@
       cache_path = "#{@conf.cache_path}/parser"
       Dir.mkdir( cache_path ) unless test( ?e, cache_path )
       begin
-        tmp = Marshal::load( File.open( "#{cache_path}/#{CGI::escape( page )}".untaint, 'rb' ) {|f| f.read} )
+        cache_file = "#{cache_path}/#{CGI::escape( page )}".untaint
+        page_file = textdir(page)
+        # return nil if the cache file is older than the page file.
+        return nil if File.mtime(cache_path) < File.mtime(page_file)
+
+        tmp = Marshal::load( File.open( cache_file, 'rb' ) {|f| f.read} )
 	if tmp[0] == HIKI_RELEASE_DATE
 	  return tmp[1]
 	else

Modified: web/hiki_src/hiki.cgi
===================================================================
--- web/hiki_src/hiki.cgi	2008-10-17 12:00:47 UTC (rev 291)
+++ web/hiki_src/hiki.cgi	2008-10-18 07:17:34 UTC (rev 292)
@@ -5,7 +5,7 @@
 BEGIN { $defout.binmode }
 
 $SAFE     = 1
-$KCODE    = 'e'
+$KCODE    = 'u'
 
 begin
   if FileTest::symlink?( __FILE__ )




More information about the ruby-oci8-commit mailing list