0

我正在尝试使用大字符串 (>4Kb) 更新 oracle Clob 字段。我正在使用 phpBB 的 (3.0) 数据库抽象类来执行查询,这些查询实际上包含大于 4000 个字符的查询代码。但是,当我尝试执行下面的查询时,正则表达式类无法捕获更新查询。你能告诉我这个正则表达式有什么问题吗?

$query = "UPDATE table_x
   SET id = '4',
       type_id = '77',
       holder = '99999',
       year = '2012',
       period = '1',
       rel_year = '2013',
       start = '14/01/2013',
       finish = '15/02/2013',
       total_days = '120',
       total_units = '1042',
       answered = '865',
       non_response = '174',
       na = '3',
       sent = '1',
       assessments = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse semper pulvinar nunc, nec fringilla mauris ultrices et. Mauris urna metus, laoreet quis viverra vel, venenatis in enim. Vivamus suscipit ultrices venenatis. Proin sed augue dolor. Donec quam magna, ornare eget varius quis, dignissim sed diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque convallis gravida augue, rutrum commodo lectus semper sit amet. Curabitur ac lorem non leo ultricies malesuada ut in leo. Ut vitae enim felis, at vehicula arcu.
Phasellus diam augue, molestie at adipiscing vitae, semper in massa. Suspendisse ac urna et sem vehicula fringilla id ac ligula. Nunc feugiat dolor nec leo mollis interdum. Nam consectetur, diam malesuada vestibulum rutrum, neque neque porttitor nisi, in molestie metus orci in mauris. Cras in est lectus, in luctus mi. Etiam suscipit elit et odio viverra nec vehicula orci cursus. Nullam ornare, arcu eget condimentum ullamcorper, nulla mauris rhoncus nisi, sed dapibus velit leo at nisi. Nullam interdum feugiat enim, ut vulputate enim fringilla mattis. Donec eget neque nisl, laoreet tincidunt ante. Etiam ac urna libero, nec suscipit mauris. Etiam ullamcorper, erat sed tempus aliquet, dui erat vehicula sem, et congue dolor elit malesuada justo. Nunc sodales ipsum at tellus posuere eu pretium elit mattis. Quisque velit sem, egestas et placerat quis, semper non arcu.
Ut dignissim adipiscing nunc, nec eleifend nisi tincidunt eu. Ut aliquet rhoncus cursus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis viverra dui sit amet ipsum lobortis ornare. Integer odio lacus, volutpat id euismod ut, tincidunt vitae nibh. Vivamus elit nisi, ornare et vulputate a, egestas et libero. Mauris eros urna, faucibus ut imperdiet ac, commodo in libero. Vestibulum ac tellus at nulla malesuada placerat nec tempus mauris. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris nulla ligula, tempor non congue non, dictum eget arcu. Donec et urna tortor. Pellentesque neque tortor, adipiscing id sodales condimentum, fringilla vel erat. Phasellus nibh magna, varius ut imperdiet sit amet, ultricies vitae eros. Aenean interdum luctus ipsum. Aenean mauris eros, accumsan eget auctor in, imperdiet ut arcu.
Donec aliquet sodales lorem eu varius. Nulla facilisi. Vestibulum ut dolor nisl. Fusce feugiat vulputate est, vel auctor lorem gravida eget. Ut nec aliquam lorem. Vestibulum mattis elit tortor. Praesent et rutrum metus.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed placerat sollicitudin mauris, et euismod ligula tincidunt sed. Nullam ut dui dolor, ut egestas augue. Curabitur eget ultrices nunc. Cras dapibus, metus at lobortis consectetur, sapien augue pharetra odio, a suscipit velit sem a tellus. Vivamus porttitor cursus magna at convallis. Vivamus neque justo, lobortis sit amet facilisis sed, auctor in justo. Phasellus venenatis felis at orci volutpat non viverra nisl ultricies. Sed sed lectus dui, a dignissim neque. Morbi posuere, dui nec varius laoreet, nunc velit tempor lacus, eget placerat nibh augue ac lacus. Sed mauris nulla, ultrices eget dignissim et, viverra sagittis justo. Suspendisse sem lorem, blandit nec pretium sed, tristique ac tellus. Sed vestibulum lorem sit amet odio scelerisque eu blandit nisl ornare. Pellentesque urna justo, condimentum a rutrum vitae, tincidunt at odio. Proin et est leo.
Nunc porta risus non erat sollicitudin tincidunt. Sed pellentesque varius risus mattis hendrerit. Donec nec ipsum ut sem aliquam lacinia lacinia eu libero. Nulla commodo tellus in lacus semper porta. Nulla eros odio, pulvinar non ultrices a, tempus hendrerit purus. Aliquam erat eros, lacinia non sodales a, varius at augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;
Maecenas risus ante, sollicitudin molestie eleifend ut, vestibulum sit amet magna. Maecenas quis urna a augue facilisis tristique et eget lacus. Cras non augue ante. Vestibulum non rutrum nunc. Vivamus imperdiet, elit vitae convallis dictum, nisi magna rhoncus odio, nec ornare tortor dolor in magna. Sed accumsan, leo imperdiet tincidunt scelerisque, est arcu interdum nibh, id mattis quam mi in dui. Quisque vitae risus sagittis odio consequat varius. Etiam quis risus in magna pretium rutrum. Aenean ac elementum metus. Vestibulum a orci non nulla elementum tincidunt. Morbi '
 WHERE id = '20'";

if (preg_match_all('/^(UPDATE [\\w_]++\\s+SET )([\\w_]++\\s*=\\s*(?:\'(?:[^\']++|\'\')*+\'|[\d-.]+)(?:,\\s*[\\w_]++\\s*=\\s*(?:\'(?:[^\']++|\'\')*+\'|[\d-.]+))*+)\\s+(WHERE.*)$/s', $query, $data, PREG_SET_ORDER))
4

1 回答 1

1

在 Oracle 中,除非使用 PL/SQL,否则不能修改字符串长度超过 4000 个字符的 CLOB 列。例如,您需要定义一个 CLOB 变量,将您的字符串分配给您的变量,然后执行您的 DML。

DECLARE
  l_str CLOB;
BEGIN
  l_str := 'My really long string....';
  UPDATE table_x SET assessments = l_str WHERE id = 20;
  COMMIT; --Or not commit until your transaction is complete
END;

我不熟悉如何在 phpBB 中处理 DML 语句,但 Oracle 数据库希望您使用 PL/SQL 处理超过 4000 个字符的 CLOBS。看看是否可以通过 PL/SQL 块作为$query.

于 2013-03-07T19:37:40.773 回答