如何使用 OCI 将回车符 return/line 提要添加到要插入到 CLOB 中的条目?
How to add carriage return/line feed to an entry being inserted into a CLOB using OCI?
我在我的 Oracle table 中建立了一个配置为 CLOB 的列。该列的用途是包含最终用户输入的状态更新。
我使用以下代码通过 PHP/OCI 成功添加了更新:
if (!empty($lastUpdate)) {
$stid5 = oci_parse($connect, "UPDATE service_status SET ss_update_details = '$lastUpdate' || ss_update_details WHERE ss_id = $tableID");
$r = oci_execute($stid5);
}
您会注意到我使用串联方法将更新添加到列中,因此列中可以存在很多更新。
当我在 HTML 页面中使用此 PHP/OCI 代码检索要查看的数据时...
$stid1 = oci_parse($connect, "SELECT * FROM service_status WHERE ss_id = $tableID");
$r = oci_execute($stid1);
while (($row = oci_fetch_array($stid1, OCI_BOTH+OCI_RETURN_LOBS))!= false)
{
echo '<h3>Last Update Time and Action Taken:</h3>
<p>'.$row['SS_UPDATE_DETAILS'].'</p>';
}
...结果捆绑在一起,条目之间没有回车 return 或换行符。视觉上不令人愉悦...我知道这是预期的行为。
我的问题是:如何在每个条目的末尾添加一行 feed/carriage return 以便更 "user friendly" 阅读 CLOB 的内容?
我试过将字母 Z 作为 "dummy" 字符添加到我的 UPDATE 语句中,就像这样...
UPDATE service_status SET ss_update_details = '$lastUpdate Z' || ss_update_details WHERE ss_id = $tableID"
...然后使用 TRANSLATE...
将其与修改后的 SELECT 语句相结合
SELECT TRANSLATE(ss_update_details, 'Z', CHR(10)) FROM service_status WHERE ss_id = $tableID"
这导致没有行被 returned。不确定我使用的 oci_fetch_array 是否对我的翻译尝试感到满意?
非常感谢对此的任何帮助。
连接 CHR(10) 怎么样?这是一个例子:
SQL> create table test (col clob);
Table created.
SQL>
SQL> insert into test (col) values
2 ('$lastUpdate on ' || to_char(sysdate, 'hh24:mi') || chr(10) ||
3 '- updated by ' || 'Littlefoot' || chr(10) ||
4 '- while anwering the question on Whosebug' || chr(10) ||
5 'The End'
6 );
1 row created.
SQL> select * From test;
COL
--------------------------------------------------------------------------------
$lastUpdate on 18:34
- updated by Littlefoot
- while anwering the question on Whosebug
The End
SQL>
感谢@Littlefoot 提供指导。为了看到我的 CLOB 记录显示在 HTML 页面上,中间有换行符,我将 <br />
标记连接到每个正在更新的记录,如下所示:
UPDATE service_status SET ss_update_details = '$lastUpdate' || '<br />' || ss_update_details WHERE ss_id = $tableID"
我在我的 Oracle table 中建立了一个配置为 CLOB 的列。该列的用途是包含最终用户输入的状态更新。
我使用以下代码通过 PHP/OCI 成功添加了更新:
if (!empty($lastUpdate)) {
$stid5 = oci_parse($connect, "UPDATE service_status SET ss_update_details = '$lastUpdate' || ss_update_details WHERE ss_id = $tableID");
$r = oci_execute($stid5);
}
您会注意到我使用串联方法将更新添加到列中,因此列中可以存在很多更新。
当我在 HTML 页面中使用此 PHP/OCI 代码检索要查看的数据时...
$stid1 = oci_parse($connect, "SELECT * FROM service_status WHERE ss_id = $tableID");
$r = oci_execute($stid1);
while (($row = oci_fetch_array($stid1, OCI_BOTH+OCI_RETURN_LOBS))!= false)
{
echo '<h3>Last Update Time and Action Taken:</h3>
<p>'.$row['SS_UPDATE_DETAILS'].'</p>';
}
...结果捆绑在一起,条目之间没有回车 return 或换行符。视觉上不令人愉悦...我知道这是预期的行为。
我的问题是:如何在每个条目的末尾添加一行 feed/carriage return 以便更 "user friendly" 阅读 CLOB 的内容?
我试过将字母 Z 作为 "dummy" 字符添加到我的 UPDATE 语句中,就像这样...
UPDATE service_status SET ss_update_details = '$lastUpdate Z' || ss_update_details WHERE ss_id = $tableID"
...然后使用 TRANSLATE...
将其与修改后的 SELECT 语句相结合SELECT TRANSLATE(ss_update_details, 'Z', CHR(10)) FROM service_status WHERE ss_id = $tableID"
这导致没有行被 returned。不确定我使用的 oci_fetch_array 是否对我的翻译尝试感到满意?
非常感谢对此的任何帮助。
连接 CHR(10) 怎么样?这是一个例子:
SQL> create table test (col clob);
Table created.
SQL>
SQL> insert into test (col) values
2 ('$lastUpdate on ' || to_char(sysdate, 'hh24:mi') || chr(10) ||
3 '- updated by ' || 'Littlefoot' || chr(10) ||
4 '- while anwering the question on Whosebug' || chr(10) ||
5 'The End'
6 );
1 row created.
SQL> select * From test;
COL
--------------------------------------------------------------------------------
$lastUpdate on 18:34
- updated by Littlefoot
- while anwering the question on Whosebug
The End
SQL>
感谢@Littlefoot 提供指导。为了看到我的 CLOB 记录显示在 HTML 页面上,中间有换行符,我将 <br />
标记连接到每个正在更新的记录,如下所示:
UPDATE service_status SET ss_update_details = '$lastUpdate' || '<br />' || ss_update_details WHERE ss_id = $tableID"