在DB2触发器中,我需要比较CLOB字段的值.就像是:
IF OLD_ROW.CLOB_FIELD != UPDATED_ROW.CLOB_FIELD
Run Code Online (Sandbox Code Playgroud)
但"!="不适用于比较CLOB.
比较它的方法是什么?
编辑添加:
如果在更新期间更改了Clob字段,则我的触发器需要执行某些操作.这就是我需要比较触发器代码中的2个CLOB的原因. 我正在寻找有关如何做到这一点的一些详细信息
我正在尝试从postgreSQL DB中读取一个clob,更改它并将其写回.
我能够使用以下代码成功读取clob:
PreparedStatement statement = connection.prepareStatement("SELECT clob_column from data where id = 1");
ResultSet executeQuery = statement.executeQuery();
executeQuery.next()
Clob fetchedClob = executeQuery.getClob("clob_column");
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用以下新数据创建新clob时:
Clob newClob = connection.createClob();
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
java.lang.AbstractMethodError: com.mchange.v2.c3p0.impl.NewProxyConnection.createClob()Ljava/sql/Clob;
Run Code Online (Sandbox Code Playgroud)
此外,如果我尝试只是编辑获取的clob,使用:
fetchedClob.setString(0, "new string");
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Method org.postgresql.jdbc4.Jdbc4Clob.setString(long,str) is not yet implemented.
Run Code Online (Sandbox Code Playgroud)
任何的想法?
更新:这是表定义
CREATE TABLE数据(id bigint NOT NULL,clob_column text,);
谢谢
尝试将CKEditor(用于CMS - 内容管理系统)的内容插入Oracle数据库 - Oracle 10g时,我遇到以下异常.
Oracle表中的字段是clob类型.
java.lang.AbstractMethodError:oracle.jdbc.driver.T4CPreparedStatement.setCharacterStream(ILjava/io/Reader; J)V
另一方面是当我尝试使用JSON通过AJAX将相同的内容插入数据库时,不会导致此异常.
我正在使用
由于我将Hibernate从3.2.5更改为4.2.0.CR1,因此导致异常
这个链接说
setCharacterStream()方法有3个版本,其中两个是作为JDBC 4.0(Java 1.6)的一部分添加的.您的JDBC驱动程序可能不支持它们:
这个答案建议升级JDBC驱动程序,但这个问题是关于我还没有使用的Oracle 11g.
我不太确定.JDBC 11.x驱动程序是否与Oracle 10g兼容?曾几何时,我曾试过一个,但它没有正常工作.
如何解决这个异常?
编辑:
我刚刚下载了 ojdbc6.jar(之前是ojdbc14.jar上面指定的驱动程序),其中包含Oracle JDBC Driver version - "11.1.0.7.0-Production".
异常异常消失了.请告诉我,如果此驱动程序版本与Oracle 10g完全兼容.
我有一些大型数据对象已使用Boost序列化为字符串/ ostringstream.我想通过一个过程将这些序列化对象与数据类型CLOB一起存储在数据库中.为了做到这一点,我正在创建一个CLOB对象,但我不知道如何"将我的数据放入CLOB(myClob)".
我看过一些例子,但他们都使用了char-pointers,我宁愿不去那条小巷......
下面是我的c ++代码到目前为止.如果您有任何示例或好的提示/链接,我将非常感谢任何帮助.
Thx提前
string qOracleDb::testRunStoredProc(const string& xId, const qTime date, const string& xUsage, int type, const std::ostringstream& data)
{
try
{
Clob myClob;
myClob.setEmpty();
myClob ?????
myStmt=myConn->createStatement("BEGIN DATA.SAVE_DATA_TEMP( :1, :2, :3, :4, :5); END;");
Date asofDate(myEnv, date.year(), date.month(), date.day(),0,0,0);
myStmt->setDate(1, asofDate);
myStmt->setString(2,xId);
myStmt->setString(3,xUsage);
myStmt->setInt(4, type);
myStmt->setClob(5, myClob);
myStmt->execute();
}
catch(SQLException ex)
{
// close nicely
myConn->terminateStatement (myStmt);
return "Exception thrown : "+ ex.getMessage()+", " + qStringUtils::toString(ex.getErrorCode());
}
// close nicely
myConn->terminateStatement (myStmt);
return "succes";
}
Run Code Online (Sandbox Code Playgroud)
更新:由于我找到了解决我问题的代码示例,我想分享解决方案,因为其他人可能有一天也会遇到这个"挑战".我的数据变量已从流变为字符串,我的代码如下:
/* …Run Code Online (Sandbox Code Playgroud) 如何在CLOB类型列中插入超过4000个字符?
--create test table s
create table s
(
a clob
);
insert into s values('>4000 char')
Run Code Online (Sandbox Code Playgroud)
导致错误:
ORA-01704:字符串太长了.
当我想一次插入> 4000的字符串时,该怎么办?有可能吗?
当我阅读Oracle参考时,CLOB可以节省最多4GB(技嘉)?
我有一种情况需要从String中创建Clob对象.问题是我不能在该方法中使用ConnectionManager.
我需要一些实用工具
public Clob getClob(String data){
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我怎样才能做到这一点.
我也有oralce.sql.CLOB.但是它需要Connection来创建对象.
多字节字符给我带来了很多痛苦.
对此问题的任何建议?
我有一个可能包含一些多字节字符的CLOB字段,我需要在SQL中选择并将此字段转换为下游进程的字符串,目前我正在使用:
SELECT DBMS_LOB.SUBSTR( description, 4000, 1 ) FROM table
Run Code Online (Sandbox Code Playgroud)
但上面的4000命令是字符长度,而不是字节.所以我不得不改为3000来处理任何可能已经悄悄进入数据的多字节字符,否则将发生缓冲区大小错误.
问题是对于不包含多字节字符的记录,可能会不必要地截断超出需要的数据.(4000是字符串限制,我们可以/不得不忍受.)
有没有办法做相当于以下的事情:
SELECT DBMS_LOB.SUBSTR( description, 4000bytes, 1 ) FROM table
Run Code Online (Sandbox Code Playgroud)
这样我就可以获得尽可能多的数据.
注意:我不允许创建临时表/视图,不使用PL/SQL,只允许SQL SELECT ...
我正在制作一个存储XML的表.要存储XML,我使用的是CLOB数据类型.我的XML的最大大小为5kb.我应该在创建表时定义CLOB列的大小?
Oracle.ManagedDataAccess.EntityFramework 6.122.1.0库用于从MVC ASP.Net应用程序访问Oracle数据库.这是截至2017年11月14日NuGet的最新图书馆版本
protected override Expression<Func<MyEntity, object>> getSelector()
{
return m => new
{
ID = m.ID,
NAME = m.Name,
LONGSTRING = "Blah-blah-blah-blah...some thousands characters..." +
m.ID + "blah-blah...blah"
};
}
protected override ProblemMethod()
{
var result = db.MyEntity.Select(getSelector()).ToList();
}
Run Code Online (Sandbox Code Playgroud)
有问题.发生这种情况,因为非常长的字符串(几千个字符)被连接进去 LONGSTRING,执行Select抛出下一个异常.
ORA-00932:不一致的数据类型:"'预期CLOB得到了CHAR"
我的班级需要获得Expression与GetSelector()压倒一切的.如何克服错误或绕过它?一种绕过的方法是强制EF Select在客户端上执行.怎么做?
PS:俄语同样的问题.
我应该提出MyEntity
CREATE TABLE MyEntity (ID NUMBER(10), Name VARCHAR2(100));
Run Code Online (Sandbox Code Playgroud) 在 Oracle 19c 中,我创建了表:
create table SAMPLE_TABLE (
id NUMBER not null,
display_name NVARCHAR2(4000), )
Run Code Online (Sandbox Code Playgroud)
当我运行脚本时:
declare
i integer;
p_tmp_clob clob;
begin
select JSON_ARRAYAGG(JSON_OBJECT(t.* )) into p_tmp_clob from SAMPLE_TABLE t;
end;
Run Code Online (Sandbox Code Playgroud)
我收到以下 ORA-40478 异常。ORA-40478: 输出值太大(最大值:4000)