fuzzy74 Sat Jan 5 08:53:39 2002 EDT
Modified files:
/phpdoc/kr/functions oci8.xml
Log:
UPDATE.
new function Translated to Korean.
Thank you.
Index: phpdoc/kr/functions/oci8.xml
diff -u phpdoc/kr/functions/oci8.xml:1.10 phpdoc/kr/functions/oci8.xml:1.11
--- phpdoc/kr/functions/oci8.xml:1.10 Wed Dec 12 15:55:07 2001
+++ phpdoc/kr/functions/oci8.xml Sat Jan 5 08:53:38 2002
@@ -1,23 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision: 1.11 $ -->
<reference id="ref.oci8">
<title>오라클 8 함수</title>
<titleabbrev>OCI8</titleabbrev>
<partintro>
<para>
- 이 함수들은 Oracle8과 Oracle7 데이터베이스에 접근할
수 있도록 해준다.
- 이것은 Oracle8 Call-Interface (OCI8)를 사용한다.
- 이 드라이버를 사용하려면 Oracle8 client libraries가
필요하다.
+ 이 함수들을 통해 오라클 8과 오라클 7 데이터베이스를
+연동하여 사용한다.
+ Oracle8 Call-Interface (OCI8)를 사용하며, 이 함수들을 사용하려면
+ 오라클8 클라이언트 라이브러리(Oracle8 client libraries)가
+필요하다.
</para>
<para>
- 이 드라이버는 보통의 PHP Ora_ 드라이버보다 더욱
유연하다.
- 이것은 PHP의 전역, 지역 변수들의 Oracle placeholder로의
binding을 지원하고,
- full LOB와 FILE, ROWID를 지원하며, user-supplied define
variable을
- 사용할 수 있도록 해 준다.
+ 이 함수는 표준 오라클 함수보다 유연하다.
+ PHP의 전역 변수와 지역 변수들의 오라클 위치보유자(Oracle
+placeholder)
+ 로의 연계(binding), full LOB, FILE, ROWID를 지원하며,
+ user-supplied define variable을 사용할 수 있도록 해 준다.
</para>
<para>
- 이 드라이버를 사용하기 전에 오라클 유저와 웹서버
유저에게
- 유효한 오라클 환경변수를 적용했는지
확인해야한다.
- 적용시킬 환경변수:
+ 이 함수를 사용하기 전에 오라클 계정과 웹 데몬 계정에
+ 유효한 오라클 환경변수를 적용했는지 확인해야한다.
+ 적용시킬 환경변수:
<itemizedlist>
<listitem>
<simpara>
@@ -52,14 +53,52 @@
</itemizedlist>
</para>
<para>
- 웹서버 유저에게 환경변수를 적용한후에,
- 웹서버 유저(nobody, www)를 오라클 그룹에 추가했는지
확인해야 한다.
+ 웹서버 계정으로 위 환경변수를 적용한후에,
+ 웹서버 계정(nobody, www)을 오라클 그룹에 추가했는지 확인해야
+한다.
</para>
+ <note>
+ <title>웹서버가 시작하지 않거나 시작시 제대로 작동하지
+않으면</title>
+ <para>
+ 아파치가 pthread 라이브러리에 링크되어있는지 체크하라:
+ </para>
+ <para>
+ <informalexample>
+ <screen>
+<![CDATA[
+# ldd /www/apache/bin/httpd
+ libpthread.so.0 => /lib/libpthread.so.0 (0x4001c000)
+ libm.so.6 => /lib/libm.so.6 (0x4002f000)
+ libcrypt.so.1 => /lib/libcrypt.so.1 (0x4004c000)
+ libdl.so.2 => /lib/libdl.so.2 (0x4007a000)
+ libc.so.6 => /lib/libc.so.6 (0x4007e000)
+ /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
+]]>
+ </screen>
+ </informalexample>
+ </para>
+ <para>
+ libpthread가 보이지 않으면 아파치를 다시 설치해야한다 :
+ </para>
+ <para>
+ <informalexample>
+ <screen>
+<![CDATA[
+# cd /usr/src/apache_1.3.xx
+# make clean
+# LIBS=-lpthread ./config.status
+# make
+# make install
+]]>
+ </screen>
+ </informalexample>
+ </para>
+ </note>
<para>
<example>
<title>OCI Hints</title>
<programlisting role="php">
-<?php
+<![CDATA[
+<?php
// by [EMAIL PROTECTED]
// Use option: OCI_DEFAULT for execute command to delay execution
@@ -79,18 +118,21 @@
OCIBindByName ($stmt, ":field2", &$clob, -1, OCI_B_CLOB);
OCIExecute($stmt, OCI_DEFAULT);
$clob->save ("some text");
+OCICommit($conn);
?>
+]]>
</programlisting>
</example>
</para>
<para>
- command-line에서 내장 프로시저(stored procedures)를
쓰는것처럼
- 사용이 간편하다.
+ 커맨드 라인(command-line)에서의 사용 방식과 동일하게
+ 내장 프로시저(stored procedures)를 사용할 수 있다.
<example>
<title>내장 프로시저(Stored Procedures) 사용하기</title>
<programlisting role="php">
-<?php
+<![CDATA[
+<?php
// by [EMAIL PROTECTED]
$sth = OCIParse ( $dbh, "begin sp_newaddress( :address_id, '$firstname',
'$lastname', '$company', '$address1', '$address2', '$city', '$state',
@@ -104,7 +146,8 @@
OCIBindByName ( $sth, ":error_code", $errorcode, 10 );
OCIExecute ( $sth );
-?>
+?>
+]]>
</programlisting>
</example>
</para>
@@ -114,8 +157,7 @@
<refnamediv>
<refname>OCIDefineByName</refname>
<refpurpose>
- SELECT 구문(Statement)을 사용하는 동안
정의단계(define-step)를 위한
- PHP 변수를 할당한다.
+ 한 SELECT 구문사용시 정의단계(define-step)를 위한 PHP 변수를
+할당한다.
</refpurpose>
</refnamediv>
<refsect1>
@@ -132,7 +174,7 @@
</funcsynopsis>
<para>
<function>OCIDefineByName</function>함수는
- 페치(fetch)한 컬럼을 사용자정의 변수 에 할당한다.
+ 페치(fetch)한 컬럼을 사용자정의 PHP변수 에 할당한다.
물론, 오라클 유저는 select 구문에서 소문자 컬럼명을 쓸수
있지만,
<function>OCIDefineByName</function>함수의
<parameter>Column-Name</parameter>인수는 반드시 대문자로 적어야
한다.
@@ -147,7 +189,8 @@
<example>
<title>OCIDefineByName</title>
<programlisting>
-<?php
+<![CDATA[
+<?php
/* OCIDefineByPos example [EMAIL PROTECTED] (980219) */
$conn = OCILogon("scott","tiger");
@@ -169,6 +212,7 @@
OCIFreeStatement($stmt);
OCILogoff($conn);
?>
+]]>
</programlisting>
</example>
</refsect1>
@@ -200,13 +244,13 @@
<parameter>ph_name</parameter>변수에 연계시킨다.
용도가 입력인지 출력인지는 실시간으로 결정될것이고,
충분한 저장 공간이 할당될 필요가 있다.
<parameter>length</parameter>인수
- 는 바인드를 위한 최대 길이를 세팅한다.
<parameter>length</parameter>인수를
+ 는 연계를 위한 최대 용량을 세팅한다.
+<parameter>length</parameter>인수를
-1로 세팅하면 <function>OCIBindByName</function>함수는
- 바인드를 위한 최대 길이를 <parameter>variable</parameter>의
- 현재 길이로 사용할것이다.
+ 연계를 위한 최대 용량을 <parameter>variable</parameter>의
+ 현재 용량으로 사용할것이다.
</para>
<para>
- 추상형 데이터타입(LOB/ROWID/BFILE)을 바인드 할 필요가 있다면
+ 추상형 데이터타입(LOB/ROWID/BFILE)을 연계 할 필요가 있다면
우선은 <function>OCINewDescriptor</function>함수를 사용해서
변수를 할당해야 한다.
<parameter>length</parameter>인수는 추상형 데이터타입
@@ -220,7 +264,8 @@
<example>
<title>OCIDefineByName</title>
<programlisting>
-<?php
+<![CDATA[
+<?php
/* OCIBindByPos example [EMAIL PROTECTED] (980221)
inserts 3 records into emp, and uses the ROWID for updating the
records just after the insert.
@@ -229,8 +274,8 @@
$conn = OCILogon("scott","tiger");
$stmt = OCIParse($conn,"insert into emp (empno, ename) ".
- "values (:empno,:ename) ".
- "returning ROWID into :rid");
+ "values (:empno,:ename) ".
+ "returning ROWID into :rid");
$data = array(1111 => "Larry", 2222 => "Bill", 3333 => "Jim");
@@ -270,17 +315,18 @@
OCILogoff($conn);
?>
+]]>
</programlisting>
</example>
<warning>
- <para>
+ </para>
It is a bad idea to use magic quotes and
<function>OciBindByName</function> simultaneously as no quoting
is needed on quoted variables and any quotes magically applied
will be written into your database as
<function>OciBindByName</function> is not able to distinguish
magically added quotings from those added by intention.
- </para>
+ </para>
</warning>
</refsect1>
</refentry>
@@ -288,7 +334,7 @@
<refentry id="function.ocilogon">
<refnamediv>
<refname>OCILogon</refname>
- <refpurpose>오라클 접속을 형성한다.</refpurpose>
+ <refpurpose>오라클 데이터베이스에 접속한다.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
@@ -303,15 +349,15 @@
</funcprototype>
</funcsynopsis>
<para>
- <function>OCILogon</function> 다른 OCI 함수 호출에 필요한 접속
변수를
- 넘겨준다. 세번째 인수는 로컬 오라클 인스턴스(local Oracle
instance)이름,
- 또는 tnsnames.ora 설정파일에 설정된 엔트리(entry) 이름이 될 수
있다.
+ <function>OCILogon</function>함수는 다른 OCI 함수 호출에 필요한
+접속 변수를
+ 넘겨준다. 세번째 인수는 로컬 오라클 인스턴스명이나
+ tnsnames.ora 설정파일에 설정된 엔트리(entry)명이 될 수 있다.
세번째 인수를 생략할 경우, PHP는 접속할 데이터베이스를
결정하기 위해서
환경변수 ORACLE_SID(Oracle instance) 또는 TWO_TASK(tnsnames.ora)를
이용한다.
</para>
<para><function>OCILogon</function> 함수를 사용할때마다 각 접속은
- 페이지 레벨에서 분배되어진다. 이것은 각 페이지에서 열린
모든
+ 페이지 레벨에서 분배되어진다. 즉, 페이지 안에서 열린
+모든
트랜잭션에 커밋(commits)과 롤백(rollbacks)이 적용되어진다는
것을
의미한다. 두개이상의 접속을 만들지라도.
</para>
@@ -320,8 +366,9 @@
<example>
<title>OCILogon</title>
<programlisting>
-<?php
-print "<HTML><PRE>";
+<![CDATA[
+<?php
+print "<HTML><PRE>";
$db = "";
$c1 = ocilogon("scott","tiger",$db);
@@ -367,7 +414,7 @@
ociexecute($stmt,OCI_DEFAULT);
echo $conn."----selecting\n\n";
while (ocifetch($stmt))
- echo $conn." <".ociresult($stmt,"TEST").">\n\n";
+ echo $conn." <".ociresult($stmt,"TEST").">\n\n";
echo $conn."----done\n\n";
}
@@ -398,8 +445,12 @@
drop_table($c1);
-print "</PRE></HTML>";
-?></programlisting></example></para>
+print "</PRE></HTML>";
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
<simpara>
See also <function>OCIPLogon</function> and
<function>OCINLogon</function>.</simpara>
@@ -460,10 +511,10 @@
</funcsynopsis>
<para>
<function>OCINLogon</function> 오라클8 DB에 새로운 접속을 형성하고,
- 로그온 한다. 세번째 인수는 로컬 오라클 인스턴스(local Oracle
instanace)의
- 이름, 또는 tnsnames.ora설정파일의 엔트리(entry) 이름이 될수
있다.
+ 로그온 한다. 세번째 인수는 로컬 오라클 인스턴스명이나
+ tnsnames.ora 설정파일의 엔트리(entry)명이 될수 있다.
세번째 인수가 생략되면, PHP는 접속할 오라클
데이터베이스를 결정하기 위해
- 환경변수 ORACLE_SID (Oracle instance)나 TWO_TASK(tnsnames.ora)를
+ 환경변수 ORACLE_SID(Oracle instance)나 TWO_TASK(tnsnames.ora)를
이용한다.
</para>
<para>
@@ -476,12 +527,13 @@
모든 커밋(commits)과 롤백(rollbacks)은 특정 접속에만
적용되어진다.
</para>
<para>
- This example demonstrates how the connections are separated.
+ 이 예제는 접속이 어떻게 분리되는지 보여준다.
<example>
<title>OCINLogon</title>
<programlisting>
-<?php
-print "<HTML><PRE>";
+<![CDATA[
+<?php
+print "<HTML><PRE>";
$db = "";
$c1 = ocilogon("scott","tiger",$db);
@@ -528,7 +580,7 @@
ociexecute($stmt,OCI_DEFAULT);
echo $conn."----selecting\n\n";
while (ocifetch($stmt))
- echo $conn." <".ociresult($stmt,"TEST").">\n\n";
+ echo $conn." <".ociresult($stmt,"TEST").">\n\n";
echo $conn."----done\n\n";
}
@@ -558,8 +610,11 @@
drop_table($c1);
-print "</PRE></HTML>";
-?></programlisting></example>
+print "</PRE></HTML>";
+?>
+]]>
+ </programlisting>
+ </example>
</para>
<simpara>
See also <function>OCILogon</function> and
@@ -571,7 +626,7 @@
<refentry id="function.ocilogoff">
<refnamediv>
<refname>OCILogOff</refname>
- <refpurpose>오라클로 부터 접속을 해제한다.</refpurpose>
+ <refpurpose>오라클로부터 접속을 해제한다.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
@@ -582,7 +637,7 @@
</funcprototype>
</funcsynopsis>
<para>
- <function>OCILogOff</function> 오라클 접속을 닫는다.
+ <function>OCILogOff</function> 오라클 접속을 해제한다.
</para>
</refsect1>
</refentry>
@@ -604,10 +659,10 @@
</funcprototype>
</funcsynopsis>
<para>
- <function>OCIExecute</function> 미리 해석된 구문(statement)을
+ <function>OCIExecute</function>함수는 미리 해석된 구문(statement)을
실행한다. (<function>OCIParse</function>함수를 보라.) 선택적인
인수 <parameter>mode</parameter>에 execution-mode(디폴트는
- OCI_COMMIT_ON_SUCCESS이다)를 지정할 수 있다. 각 구문이
자동적으로
+ OCI_COMMIT_ON_SUCCESS)를 지정할 수 있다. 각 구문이 자동적으로
커밋(commit)되지 않기를 원하면 OCI_DEFAULT로 설정하면 된다.
</para>
</refsect1>
@@ -627,7 +682,7 @@
</funcprototype>
</funcsynopsis>
<para>
- <function>OCICommit</function> 오라클 접속 파라미터
+ <function>OCICommit</function>함수는 오라클 접속 인수인
<parameter>connection</parameter>에 대해서
미결정된 모든 구문(outstanding statements)을 커밋한다.
</para>
@@ -648,7 +703,7 @@
</funcprototype>
</funcsynopsis>
<para>
- <function>OCIRollback</function> 오라클 접속 파라미터
+ <function>OCIRollback</function>함수는 오라클 접속 인수
<parameter>connection</parameter>에 대해서
미결정된 모든 구문(outstanding statements)을 롤백 처리한다.
</para>
@@ -674,18 +729,19 @@
</funcprototype>
</funcsynopsis>
<para>
- <function>OCINewDescriptor</function>함수는 hold descpriptor나
+ <function>OCINewDescriptor</function>함수는 descpriptor나
LOB locator를 위한 저장공간을 할당한다.
- 유효한 <parameter>type</parameter>값은 OCI_D_FILE, OCI_D_LOB,
+ 유효한 <parameter>type</parameter>인수값은 OCI_D_FILE, OCI_D_LOB,
OCI_D_ROWID 이다.
- LOB descriptor를 위해 load, save, savefile 메쏘드가
- descriptor에 연결되어 있다. BFILE를 위해서는 load 메쏘드만이
존재한다.
+ LOB descriptor은 load, save, savefile 메쏘드를 사용할수 있고,
+ BFILE은 load 메쏘드만 사용가능하다.
See the second example usage hints.
</para>
<example>
<title>OCINewDescriptor</title>
<programlisting>
-<?php
+<![CDATA[
+<?php
/* This script is designed to be called from a HTML form.
* It expects $user, $password, $table, $where, and $commitsize
* to be passed in from the form. The script then deletes
@@ -712,22 +768,24 @@
OCIFreeStatement($stmt);
OCILogoff($conn);
?>
+]]>
</programlisting>
<programlisting>
-<?php
+<![CDATA[
+<?php
/* This script demonstrates file upload to LOB columns
* The formfield used for this example looks like this
- * <form action="upload.php3" method="post" enctype="multipart/form-data">
- * <input type="file" name="lob_upload">
+ * <form action="upload.php3" method="post" enctype="multipart/form-data">
+ * <input type="file" name="lob_upload">
* ...
*/
if(!isset($lob_upload) || $lob_upload == 'none'){
?>
-<form action="upload.php3" method="post" enctype="multipart/form-data">
-Upload file: <input type="file" name="lob_upload"><br>
-<input type="submit" value="Upload"> - <input type="reset">
-</form>
-<?php
+<form action="upload.php3" method="post" enctype="multipart/form-data">
+Upload file: <input type="file" name="lob_upload"><br>
+<input type="submit" value="Upload"> - <input type="reset">
+</form>
+<?php
} else {
// $lob_upload contains the temporary filename of the uploaded file
$conn = OCILogon($user, $password);
@@ -747,6 +805,39 @@
OCILogoff($conn);
}
?>
+]]>
+ </programlisting>
+ </example>
+ <example>
+ <title>OCINewDescriptor</title>
+ <programlisting>
+<![CDATA[
+<?php
+ /* Calling PL/SQL stored procedures which contain clobs as input
+ * parameters (PHP 4 >= 4.0.6).
+ * Example PL/SQL stored procedure signature is:
+ *
+ * PROCEDURE save_data
+ * Argument Name Type In/Out Default?
+ * ------------------------------ ----------------------- ------ --------
+ * KEY NUMBER(38) IN
+ * DATA CLOB IN
+ *
+ */
+
+ $conn = OCILogon($user, $password);
+ $stmt = OCIParse($conn, "begin save_data(:key, :data); end;");
+ $clob = OCINewDescriptor($conn, OCI_D_LOB);
+ OCIBindByName($stmt, ':key', $key);
+ OCIBindByName($stmt, ':data', $clob, -1, OCI_B_CLOB);
+ $clob->WriteTemporary($data);
+ OCIExecute($stmt, OCI_DEFAULT);
+ OCICommit($conn);
+ $clob->close();
+ $clob->free();
+ OCIFreeStatement($stmt);
+?>
+]]>
</programlisting>
</example>
</refsect1>
@@ -773,24 +864,28 @@
<example>
<title>OCIRowCount</title>
<programlisting>
-<?php
- print "<HTML><PRE>";
+<![CDATA[
+<?php
+ print "<HTML><PRE>";
$conn = OCILogon("scott","tiger");
$stmt = OCIParse($conn,"create table emp2 as select * from emp");
OCIExecute($stmt);
- print OCIRowCount($stmt) . " rows inserted.<BR>";
+ print OCIRowCount($stmt) . " rows inserted.<BR>";
OCIFreeStatement($stmt);
$stmt = OCIParse($conn,"delete from emp2");
OCIExecute($stmt);
- print OCIRowCount($stmt) . " rows deleted.<BR>";
+ print OCIRowCount($stmt) . " rows deleted.<BR>";
OCICommit($conn);
OCIFreeStatement($stmt);
$stmt = OCIParse($conn,"drop table emp2");
OCIExecute($stmt);
OCIFreeStatement($stmt);
OCILogOff($conn);
- print "</PRE></HTML>";
-?> </programlisting></example>
+ print "</PRE></HTML>";
+?>
+]]>
+ </programlisting>
+ </example>
</para>
</refsect1>
</refentry>
@@ -816,15 +911,16 @@
<example>
<title>OCINumCols</title>
<programlisting>
-<?php
- print "<HTML><PRE>\n";
+<![CDATA[
+<?php
+ print "<HTML><PRE>\n";
$conn = OCILogon("scott", "tiger");
$stmt = OCIParse($conn,"select * from emp");
OCIExecute($stmt);
while ( OCIFetch($stmt) ) {
print "\n";
$ncols = OCINumCols($stmt);
- for ( $i = 1; $i <= $ncols; $i++ ) {
+ for ( $i = 1; $i <= $ncols; $i++ ) {
$column_name = OCIColumnName($stmt,$i);
$column_value = OCIResult($stmt,$i);
print $column_name . ': ' . $column_value . "\n";
@@ -833,9 +929,10 @@
}
OCIFreeStatement($stmt);
OCILogoff($conn);
- print "</PRE>";
- print "</HTML>\n";
+ print "</PRE>";
+ print "</HTML>\n";
?>
+]]>
</programlisting>
</example>
</refsect1>
@@ -859,8 +956,8 @@
<function>OCIResult</function>함수는 현재 열의 컬럼
<parameter>column</parameter>에 대한 데이터를 리턴한다
(<function>OCIFetch</function>함수를 보라).
- <function>OCIResult</function>함수는 추상형데이터타입(ROWID, LOB,
FILE)을
- 제외한 문자열같은 모든 것을 리턴할 것이다.
+ <function>OCIResult</function>함수는 추상형데이터타입(ROWID, LOB,
+FILE)을
+ 제외한 문자열로서 모든 것을 리턴할 것이다.
</para>
</refsect1>
</refentry>
@@ -911,23 +1008,19 @@
일차원 배열을 포함할것이다.
</para>
<para>
- The <parameter>mode</parameter> parameter allows you to change the
- default behaviour. You can specify more than one flag by simply
- adding them up (eg OCI_ASSOC+OCI_RETURN_NULLS). The known flags
- are:
<parameter>mode</parameter>인수는 이 함수의 기본값을
변화시킨다.
- 한개 이상의 플래그를 추가할수있다(OCI_ASSOC+OCI_RETURN_NULLS와
같이).
- 알려진 플래그는 다음과 같다:
+ 한개 이상의 플래그를 추가할수있다(OCI_ASSOC+OCI_RETURN_NULLS와
+같이).
+ 알려진 플래그는 다음과 같다:
<simplelist>
<member>
<literal>OCI_ASSOC</literal> 연관배열(associative array)을 리턴한다.
</member>
<member>
- <literal>OCI_NUM</literal> 1부터 시작하는 숫자를 갖는 변수를
리턴한다.
+ <literal>OCI_NUM</literal> 키값이 0부터 시작하는 배열을
+리턴한다.
(디폴트)
</member>
<member>
- <literal>OCI_RETURN_NULLS</literal> 빈 컬럼을 리턴한다.
+ <literal>OCI_RETURN_NULLS</literal> 빈 컬럼도 리턴한다.
</member>
<member>
<literal>OCI_RETURN_LOBS</literal>descriptor 대신에 LOB의 값을
리턴한다.
@@ -960,7 +1053,8 @@
<example>
<title>OCIFetchStatement</title>
<programlisting>
-<?php
+<![CDATA[
+<?php
/* OCIFetchStatement example [EMAIL PROTECTED] (990624) */
$conn = OCILogon("scott","tiger");
@@ -971,31 +1065,32 @@
$nrows = OCIFetchStatement($stmt,$results);
if ( $nrows > 0 ) {
- print "<TABLE BORDER=\"1\">\n";
- print "<TR>\n";
+ print "<TABLE BORDER=\"1\">\n";
+ print "<TR>\n";
while ( list( $key, $val ) = each( $results ) ) {
- print "<TH>$key</TH>\n";
+ print "<TH>$key</TH>\n";
}
- print "</TR>\n";
+ print "</TR>\n";
- for ( $i = 0; $i < $nrows; $i++ ) {
+ for ( $i = 0; $i < $nrows; $i++ ) {
reset($results);
- print "<TR>\n";
+ print "<TR>\n";
while ( $column = each($results) ) {
$data = $column['value'];
- print "<TD>$data[$i]</TD>\n";
+ print "<TD>$data[$i]</TD>\n";
}
- print "</TR>\n";
+ print "</TR>\n";
}
- print "</TABLE>\n";
+ print "</TABLE>\n";
} else {
- echo "No data found<BR>\n";
+ echo "No data found<BR>\n";
}
-print "$nrows Records Selected<BR>\n";
+print "$nrows Records Selected<BR>\n";
OCIFreeStatement($stmt);
OCILogoff($conn);
?>
+]]>
</programlisting>
</example>
</refsect1>
@@ -1048,33 +1143,35 @@
<example>
<title>OCIColumnName</title>
<programlisting>
-<?php
- print "<HTML><PRE>\n";
+<![CDATA[
+<?php
+ print "<HTML><PRE>\n";
$conn = OCILogon("scott", "tiger");
$stmt = OCIParse($conn,"select * from emp");
OCIExecute($stmt);
- print "<TABLE BORDER=\"1\">";
- print "<TR>";
- print "<TH>Name</TH>";
- print "<TH>Type</TH>";
- print "<TH>Length</TH>";
- print "</TR>";
+ print "<TABLE BORDER=\"1\">";
+ print "<TR>";
+ print "<TH>Name</TH>";
+ print "<TH>Type</TH>";
+ print "<TH>Length</TH>";
+ print "</TR>";
$ncols = OCINumCols($stmt);
- for ( $i = 1; $i <= $ncols; $i++ ) {
+ for ( $i = 1; $i <= $ncols; $i++ ) {
$column_name = OCIColumnName($stmt,$i);
$column_type = OCIColumnType($stmt,$i);
$column_size = OCIColumnSize($stmt,$i);
- print "<TR>";
- print "<TD>$column_name</TD>";
- print "<TD>$column_type</TD>";
- print "<TD>$column_size</TD>";
- print "</TR>";
+ print "<TR>";
+ print "<TD>$column_name</TD>";
+ print "<TD>$column_type</TD>";
+ print "<TD>$column_size</TD>";
+ print "</TR>";
}
OCIFreeStatement($stmt);
OCILogoff($conn);
- print "</PRE>";
- print "</HTML>\n";
+ print "</PRE>";
+ print "</HTML>\n";
?>
+]]>
</programlisting>
</example>
</para>
@@ -1109,34 +1206,36 @@
<example>
<title>OCIColumnSize</title>
<programlisting>
-<?php
- print "<HTML><PRE>\n";
+<![CDATA[
+<?php
+ print "<HTML><PRE>\n";
$conn = OCILogon("scott", "tiger");
$stmt = OCIParse($conn,"select * from emp");
OCIExecute($stmt);
- print "<TABLE BORDER=\"1\">";
- print "<TR>";
- print "<TH>Name</TH>";
- print "<TH>Type</TH>";
- print "<TH>Length</TH>";
- print "</TR>";
+ print "<TABLE BORDER=\"1\">";
+ print "<TR>";
+ print "<TH>Name</TH>";
+ print "<TH>Type</TH>";
+ print "<TH>Length</TH>";
+ print "</TR>";
$ncols = OCINumCols($stmt);
- for ( $i = 1; $i <= $ncols; $i++ ) {
+ for ( $i = 1; $i <= $ncols; $i++ ) {
$column_name = OCIColumnName($stmt,$i);
$column_type = OCIColumnType($stmt,$i);
$column_size = OCIColumnSize($stmt,$i);
- print "<TR>";
- print "<TD>$column_name</TD>";
- print "<TD>$column_type</TD>";
- print "<TD>$column_size</TD>";
- print "</TR>";
+ print "<TR>";
+ print "<TD>$column_name</TD>";
+ print "<TD>$column_type</TD>";
+ print "<TD>$column_size</TD>";
+ print "</TR>";
}
- print "</TABLE>";
+ print "</TABLE>";
OCIFreeStatement($stmt);
OCILogoff($conn);
- print "</PRE>";
- print "</HTML>\n";
+ print "</PRE>";
+ print "</HTML>\n";
?>
+]]>
</programlisting>
</example>
</para>
@@ -1170,33 +1269,35 @@
<example>
<title>OCIColumnType</title>
<programlisting>
-<?php
- print "<HTML><PRE>\n";
+<![CDATA[
+<?php
+ print "<HTML><PRE>\n";
$conn = OCILogon("scott", "tiger");
$stmt = OCIParse($conn,"select * from emp");
OCIExecute($stmt);
- print "<TABLE BORDER=\"1\">";
- print "<TR>";
- print "<TH>Name</TH>";
- print "<TH>Type</TH>";
- print "<TH>Length</TH>";
- print "</TR>";
+ print "<TABLE BORDER=\"1\">";
+ print "<TR>";
+ print "<TH>Name</TH>";
+ print "<TH>Type</TH>";
+ print "<TH>Length</TH>";
+ print "</TR>";
$ncols = OCINumCols($stmt);
- for ( $i = 1; $i <= $ncols; $i++ ) {
+ for ( $i = 1; $i <= $ncols; $i++ ) {
$column_name = OCIColumnName($stmt,$i);
$column_type = OCIColumnType($stmt,$i);
$column_size = OCIColumnSize($stmt,$i);
- print "<TR>";
- print "<TD>$column_name</TD>";
- print "<TD>$column_type</TD>";
- print "<TD>$column_size</TD>";
- print "</TR>";
+ print "<TR>";
+ print "<TD>$column_name</TD>";
+ print "<TD>$column_type</TD>";
+ print "<TD>$column_size</TD>";
+ print "</TR>";
}
OCIFreeStatement($stmt);
OCILogoff($conn);
- print "</PRE>";
- print "</HTML>\n";
+ print "</PRE>";
+ print "</HTML>\n";
?>
+]]>
</programlisting>
</example>
</para>
@@ -1225,11 +1326,13 @@
<example>
<title>OCIServerVersion</title>
<programlisting>
-<?php
+<![CDATA[
+<?php
$conn = OCILogon("scott","tiger");
print "Server Version: " . OCIServerVersion($conn);
OCILogOff($conn);
?>
+]]>
</programlisting>
</example>
</para>
@@ -1252,34 +1355,36 @@
<para>
<function>OCIStatementType</function> 함수는 다음중 하나를 리턴한다:
<orderedlist>
- <listitem><simpara> "SELECT"</simpara></listitem>
- <listitem><simpara> "UPDATE"</simpara></listitem>
- <listitem><simpara> "DELETE"</simpara></listitem>
- <listitem><simpara> "INSERT"</simpara></listitem>
- <listitem><simpara> "CREATE"</simpara></listitem>
- <listitem><simpara> "DROP"</simpara></listitem>
- <listitem><simpara> "ALTER"</simpara></listitem>
- <listitem><simpara> "BEGIN"</simpara></listitem>
- <listitem><simpara> "DECLARE"</simpara></listitem>
- <listitem><simpara> "UNKNOWN"</simpara></listitem>
+ <listitem><simpara> "SELECT"</simpara></listitem>
+ <listitem><simpara> "UPDATE"</simpara></listitem>
+ <listitem><simpara> "DELETE"</simpara></listitem>
+ <listitem><simpara> "INSERT"</simpara></listitem>
+ <listitem><simpara> "CREATE"</simpara></listitem>
+ <listitem><simpara> "DROP"</simpara></listitem>
+ <listitem><simpara> "ALTER"</simpara></listitem>
+ <listitem><simpara> "BEGIN"</simpara></listitem>
+ <listitem><simpara> "DECLARE"</simpara></listitem>
+ <listitem><simpara> "UNKNOWN"</simpara></listitem>
</orderedlist></para>
<para>
<example>
<title>Code examples</title>
<programlisting>
-<?php
- print "<HTML><PRE>";
+<![CDATA[
+<?php
+ print "<HTML><PRE>";
$conn = OCILogon("scott","tiger");
$sql = "delete from emp where deptno = 10";
$stmt = OCIParse($conn,$sql);
if ( OCIStatementType($stmt) == "DELETE" ) {
- die "You are not allowed to delete from this table<BR>";
+ die "You are not allowed to delete from this table<BR>";
}
OCILogoff($conn);
- print "</PRE></HTML>";
+ print "</PRE></HTML>";
?>
+]]>
</programlisting>
</example>
</para>
@@ -1290,7 +1395,7 @@
<refnamediv>
<refname>OCINewCursor</refname>
<refpurpose>
- Return a new cursor (Statement-Handle) - use to bind ref-cursors.
+ 새로운 커서(구문 핸들)를 리턴한다 - ref-cursor를
+연계하기위함.
</refpurpose>
</refnamediv>
<refsect1>
@@ -1302,14 +1407,14 @@
</funcprototype>
</funcsynopsis>
<para>
- <function>OCINewCursor</function> allocates a new statement handle
- on the specified connection.
+ <function>OCINewCursor</function>함수는 특정 접속점에 관한
+ 새로운 구문 핸들을 할당한다.
</para>
<para>
- <example>
- <title>Using a REF CURSOR from a stored procedure</title>
+ <example> <title>스토어드 프로시저에 REF CURSOR 사용하기</title>
<programlisting>
-<?php
+<![CDATA[
+<?php
// suppose your stored procedure info.output returns a ref cursor in :data
$conn = OCILogon("scott","tiger");
@@ -1328,46 +1433,49 @@
OCIFreeStatement($curs);
OCILogoff($conn);
?>
+]]>
</programlisting>
</example>
</para>
<para>
<example>
- <title>Using a REF CURSOR in a select statement</title>
+ <title>SELECT 구문에 REF CURSOR 사용하기</title>
<programlisting>
-<?php
-print "<HTML><BODY>";
+<![CDATA[
+<?php
+print "<HTML><BODY>";
$conn = OCILogon("scott","tiger");
$count_cursor = "CURSOR(select count(empno) num_emps from emp " .
"where emp.deptno = dept.deptno) as EMPCNT from dept";
$stmt = OCIParse($conn,"select deptno,dname,$count_cursor");
ociexecute($stmt);
-print "<TABLE BORDER=\"1\">";
-print "<TR>";
-print "<TH>DEPT NAME</TH>";
-print "<TH>DEPT #</TH>";
-print "<TH># EMPLOYEES</TH>";
-print "</TR>";
+print "<TABLE BORDER=\"1\">";
+print "<TR>";
+print "<TH>DEPT NAME</TH>";
+print "<TH>DEPT #</TH>";
+print "<TH># EMPLOYEES</TH>";
+print "</TR>";
while (OCIFetchInto($stmt,&$data,OCI_ASSOC)) {
- print "<TR>";
+ print "<TR>";
$dname = $data["DNAME"];
$deptno = $data["DEPTNO"];
- print "<TD>$dname</TD>";
- print "<TD>$deptno</TD>";
+ print "<TD>$dname</TD>";
+ print "<TD>$deptno</TD>";
ociexecute($data[ "EMPCNT" ]);
while (OCIFetchInto($data[ "EMPCNT" ],&$subdata,OCI_ASSOC)) {
$num_emps = $subdata["NUM_EMPS"];
- print "<TD>$num_emps</TD>";
+ print "<TD>$num_emps</TD>";
}
- print "</TR>";
+ print "</TR>";
}
-print "</TABLE>";
-print "</BODY></HTML>";
+print "</TABLE>";
+print "</BODY></HTML>";
OCIFreeStatement($stmt);
OCILogoff($conn);
?>
+]]>
</programlisting>
</example>
</para>
@@ -1390,7 +1498,7 @@
</funcprototype>
</funcsynopsis>
<para>
- <function>OCIFreeStatement</function> 함수는 자원 해제에 성공하면
&true;를
+ <function>OCIFreeStatement</function>함수는 자원 해제에 성공하면
+&true;를
리턴하고, 실패하면 &false;를 리턴한다.
</para>
</refsect1>
@@ -1457,8 +1565,8 @@
사용하는 <parameter>query</parameter>를 해석한다.
질의(query)가 유효하면 구문(statement)를 리턴한다.
그렇지 않으면 &false;를 리턴한다.
- <parameter>query</parameter>인수는 어떤 유효한 SQL 구문(statement)
- 도 될 수 있다.
+ <parameter>query</parameter>인수는 유효한 SQL 구문(statement)이나
+ PL/SQL블록이 될 수 있다.
</simpara>
</refsect1>
</refentry>
@@ -1509,9 +1617,6 @@
</funcprototype>
</funcsynopsis>
<simpara>
- <function>OCIInternalDebug</function> enables internal debug
- output. Set <parameter>onoff</parameter> to 0 to turn debug
- output off, 1 to turn it on.
<function>OCIInternalDebug</function>함수는 내부 디버그 출력을
활성화 시킨다.
<parameter>onoff</parameter>인수를 0으로 놓으면 비활성화 되고,
@@ -1521,6 +1626,366 @@
</refentry>
</reference>
+ <refentry id="function.ocicancel">
+ <refnamediv>
+ <refname>OCICancel</refname>
+ <refpurpose>커서로부터 읽기를 취소한다</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>int <function>OCICancel</function></funcdef>
+ <paramdef>int <parameter>stmt</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ 커서로부터 더이상 데이터를 읽기를 원치않으면,
+ <function>OCICancel</function>함수를 쓰라.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocisetprefetch">
+ <refnamediv>
+ <refname>OCISetPrefetch</refname>
+ <refpurpose>사용할 열의 갯수를 설정한다</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>int <function>OCISetPrefetch</function></funcdef>
+ <paramdef>int <parameter>stmt</parameter></paramdef>
+ <paramdef>int <parameter>rows</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ 사용할 열의 갯수를 설정한다. 기본값은 1열이다.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ociwritelobtofile">
+ <refnamediv>
+ <refname>OCIWriteLobToFile</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>void <function>OCIWriteLobToFile</function></funcdef>
+ <paramdef>object <parameter>lob</parameter></paramdef>
+ <paramdef>string <parameter><optional>filename</optional></parameter></paramdef>
+ <paramdef>int <parameter><optional>start</optional></parameter></paramdef>
+ <paramdef>int <parameter><optional>lenght</optional></parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocisavelobfile">
+ <refnamediv>
+ <refname>OCISaveLobFile</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>string <function>OCISaveLobFile</function></funcdef>
+ <paramdef>object <parameter>lob</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocisavelob">
+ <refnamediv>
+ <refname>OCISaveLob</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>string <function>OCISaveLob</function></funcdef>
+ <paramdef>object <parameter>lob</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ociloadlob">
+ <refnamediv>
+ <refname>OCILoadLob</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>string <function>OCILoadLob</function></funcdef>
+ <paramdef>object <parameter>lob</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocicolumnscale">
+ <refnamediv>
+ <refname>OCIColumnScale</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>int <function>OCIColumnScale</function></funcdef>
+ <paramdef>int <parameter>stmt</parameter></paramdef>
+ <paramdef>int <parameter>col</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocicolumnprecision">
+ <refnamediv>
+ <refname>OCIColumnPrecision</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>int <function>OCIColumnPrecision</function></funcdef>
+ <paramdef>int <parameter>stmt</parameter></paramdef>
+ <paramdef>int <parameter>col</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocicolumntyperaw">
+ <refnamediv>
+ <refname>OCIColumnTypeRaw</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>mixed <function>OCIColumnTypeRaw</function></funcdef>
+ <paramdef>int <parameter>stmt</parameter></paramdef>
+ <paramdef>int <parameter>col</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocinewcollection">
+ <refnamediv>
+ <refname>OCINewCollection</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>string <function>OCINewCollection</function></funcdef>
+ <paramdef>int <parameter>conn</parameter></paramdef>
+ <paramdef>string <parameter>tdo</parameter></paramdef>
+ <paramdef>string <parameter><optional>shema</optional></parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocifreecollection">
+ <refnamediv>
+ <refname>OCIFreeCollection</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>string <function>OCIFreeCollection</function></funcdef>
+ <paramdef>object <parameter>lob</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocicollassign">
+ <refnamediv>
+ <refname>OCICollAssign</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>string <function>OCICollAssign</function></funcdef>
+ <paramdef>object <parameter>collection</parameter></paramdef>
+ <paramdef>object <parameter>object</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocicollappend">
+ <refnamediv>
+ <refname>OCICollAppend</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>string <function>OCICollAppend</function></funcdef>
+ <paramdef>object <parameter>collection</parameter></paramdef>
+ <paramdef>object <parameter>object</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocicollassignelem">
+ <refnamediv>
+ <refname>OCICollAssignElem</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>string <function>OCICollAssignElem</function></funcdef>
+ <paramdef>object <parameter>collection</parameter></paramdef>
+ <paramdef>string <parameter>ndx</parameter></paramdef>
+ <paramdef>string <parameter>val</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocicollgetelem">
+ <refnamediv>
+ <refname>OCICollGetElem</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>string <function>OCICollGetElem</function></funcdef>
+ <paramdef>object <parameter>collection</parameter></paramdef>
+ <paramdef>string <parameter>ndx</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocicollmax">
+ <refnamediv>
+ <refname>OCICollMax</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>string <function>OCICollMax</function></funcdef>
+ <paramdef>object <parameter>collection</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocicollsize">
+ <refnamediv>
+ <refname>OCICollSize</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>string <function>OCICollSize</function></funcdef>
+ <paramdef>object <parameter>collection</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.ocicolltrim">
+ <refnamediv>
+ <refname>OCICollTrim</refname>
+ <refpurpose>Coming soon.</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>string <function>OCICollTrim</function></funcdef>
+ <paramdef>object <parameter>collection</parameter></paramdef>
+ <paramdef>int <parameter>num</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <simpara>
+ Coming soon.
+ </simpara>
+ </refsect1>
+ </refentry>
+
+ </reference>
+
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
@@ -1537,4 +2002,7 @@
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
-->