我有一个 Oracle 过程,它接受参数 (v_MessageText) 来更新表上名为 message_text 的列。message_text 列是 CLOB。我希望能够替换输入中的文本,因此如果用户输入 testABC ,它会将 testXYZ 输出到 message_text 列中。起初,这看起来很简单。我尝试在我的程序中运行下面的代码,但出现错误:
SELECT REPLACE (v_MessageText, 'ABC', 'XYZ') from dual;
Run Code Online (Sandbox Code Playgroud)
Oracle 给我的错误是:“PLS-00428:此 select 语句中需要一个 INTO 子句”。为什么?我在这里做错了什么?
有一个值列表,我从shell获得输出.该列表每行包含一个"名称",如下所示.它有超过300行,预计会更长.
BeforeArchive_Field
BeforeArchive_Reservoir
BeforeArchive_Well
BeforeArchive_Wellbore
BeforeArchive_WellboreCompletion
BeforeArchive_WellboreContactInterval
ba_organization_part0
ba_organization_part2
Run Code Online (Sandbox Code Playgroud)
我需要将此列表传递给pl/sql过程,以便它可以解析它并操作每个单独的"名称".由于列表的长度,我想到创建一个存储过程,它将此列表作为CLOB参数.
这两个问题是:
这是处理列表的最佳方式(格式)吗?
如果是这样,有没有一种直接解析这个clob的地狱的方法?
我通过pl\sql 回答逐行阅读这个 阅读clob,但是在某些情况下,事情可能会更简单.
我不熟悉这种LOB格式,并希望得到任何帮助.
我是 XML 和 Clob 的新手。我已经阅读了大量有关该主题的帖子。我正在尝试从此 clob 中提取 studentID 值。我正在使用 Oracle 11.2
<OcXml xmlns="http://oc.csr.com/xml">
<OcSharedXml>
<Templates>
<Template ns:TemplateId="130" ns:TemplateName="Student Graduation Fees" ns:TemplateFilename="Student_Graduation_Fees_1.doc" ns:TemplateSequence="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns="http://oc.rsi.com/xml">
<Sections>
<Section ns:SectionId="146" ns:SectionName="Main" ns:SectionSequence="1" ns:MaxRepeat="1">
<Elements>
<Element ns:ElementId="134" ns:ElementName="CurrentDt" ns:FieldName="DateOfNotice" ns:DefaultValue="" ns:Editable="false" ns:ElementSequence="1" ns:ElementType="ElmProc" ns:Mandatory="false" ns:Shared="true" ns:DataType="String" ns:Format="NoFmt" ns:RecipientId="" ns:Multiline="false" ns:RecipientAddressFlag="false">
<ElementValue>2/19/2015</ElementValue>
</Element>
<Element ns:ElementId="24" ns:ElementName="InvoiceNo" ns:FieldName="InvoiceNo" ns:DefaultValue="" ns:Editable="true" ns:ElementSequence="2" ns:ElementType="ElmProc" ns:Mandatory="false" ns:Shared="true" ns:DataType="String" ns:Format="NoFmt" ns:RecipientId="" ns:Multiline="false" ns:RecipientAddressFlag="false">
<ElementValue>352</ElementValue>
</Element>
<Element ns:ElementId="16" ns:ElementName="StudentID" ns:FieldName="StudentID" ns:DefaultValue="" ns:Editable="true" ns:ElementSequence="3" ns:ElementType="ElmProc" ns:Mandatory="false" ns:Shared="true" ns:DataType="String" ns:Format="NoFmt" ns:RecipientId="" ns:Multiline="false" ns:RecipientAddressFlag="false"> …Run Code Online (Sandbox Code Playgroud) 我正在尝试从Java Spring项目中的Oracle数据库中检索Clob字段,但我遇到了问题.
首先,我使用名为SqlRowSet的Spring对象进行了查询:
String query = sqlQueries.getProperty("THE_QUERY");
SqlRowSet rs = select.queryForRowSet(query, new HashMap<String, Object>());
Run Code Online (Sandbox Code Playgroud)
之后,我遍历对象并开始从字段中获取信息:
while (rs.next()) {
String name = rs.getString("name");
}
Run Code Online (Sandbox Code Playgroud)
当我得到查询结果时,我会得到这样的结果:
name=javax.sql.rowset.serial.SerialClob@435dc43
Run Code Online (Sandbox Code Playgroud)
我尝试了几件事,但是我无法从字段中获取信息,最后是字符串(不确定为什么数据库创建者使用clob作为数据类型).
有人知道如何获取这些信息吗?
我的表中有一个包含XML的CLOB列.我想在特定标签之后获取xml到其结束标签即
CLOB列中的完整XML
<ParentTag>
<Location>ABC XYZ ....</Location>
<Person>
<Name>Mohsin</Name>
<Age>23</Age>
</Person>
</ParentTag>
Run Code Online (Sandbox Code Playgroud)
我想要获取的是这样的:
<Person>
<Name>Mohsin</Name>
<Age>23</Age>
</Person>
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用dbms_lob.substr和dbms_lob.getlength,但这并没有帮助,因为子XML可能包含<Person>在不同场景中以不同字节开始的标记.
任何帮助将不胜感激.谢谢
我有一个启用了 AES 加密的 H2 数据库。它有一个 CLOB 类型的列。该列包含带有换行符的长文本(有时)。当我在 H2 控制台中检查表格时,我得到所有插入新行的输出,但是当我查询表格时,没有新行字符。我正在使用此代码将 CLOB 对象转换为 String 对象:
public String clobToString(Clob data) {
StringBuilder sb = new StringBuilder();
try {
Reader reader = data.getCharacterStream();
BufferedReader br = new BufferedReader(reader);
String line;
while(null != (line = br.readLine())) {
sb.append(line);
}
br.close();
} catch (SQLException | IOException e) {
e.printStackTrace();
}
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
我觉得这里有事。有没有其他有效的方法来进行这种 CLOB 到字符串的转换。
希望有人能够对我目前使用Oracle数据库的问题有所了解 - 我确信这很简单!
我已经设法在一个示例中重新创建了这个,所以这里是数据库结构:
CREATE TABLE MyTable(
ixMyTable NUMBER,
clobData CLOB
)
/
CREATE OR REPLACE PACKAGE PKGTEST
AS
PROCEDURE DoSomething(
cur_OUT OUT SYS_REFCURSOR
);
END PKGTEST;
/
CREATE OR REPLACE PACKAGE BODY PKGTEST
AS
PROCEDURE DoSomething(
cur_OUT OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN cur_OUT FOR
SELECT ixMyTable, clobData
FROM MyTable;
END;
END PKGTEST;
/
GRANT EXECUTE ON PKGTEST TO TEST_ROLE
/
BEGIN
FOR i IN 1 .. 7000 LOOP
insert into mytable values (i, TO_CLOB('123456'));
END LOOP;
END;
/ …Run Code Online (Sandbox Code Playgroud) 我有下表:

问题是,当我尝试使用JDBC在此字段中插入字符串时,总是会收到以下错误:
java.sql.SQLException: Data size bigger than max size for this type: 6019
Run Code Online (Sandbox Code Playgroud)
我现在应该怎么做?
生成INSERT的Java代码如下:
Connection conn2 = null;
if(connection==null||connection.isClosed())
{
System.out.println("Connection is null");
conn2 = connectDB();
}
//REPLACE is non-standard SQL from MySQL, it's counter part of INSERT IGNORE
String sql = "";
sql = "INSERT INTO TEST."+tablename+" ("+fields+") VALUES ("+fields.replaceAll("[^,]+", "?")+")";
System.out.println("SQL: "+sql);
PreparedStatement pstmt = conn2.prepareStatement(sql);
// start parsing
int event = r.getEventType();
while (true) {
// for each wanted element
if (event == XMLStreamConstants.START_ELEMENT
&& r.getName().toString().equalsIgnoreCase("row")) …Run Code Online (Sandbox Code Playgroud) 我需要你的帮助以下sql:
SELECT
substr(nd.nne_def,4,3) as bzn
FROM
core_def.nne_def nd
group by substr(nd.nne_def,4,4);
Run Code Online (Sandbox Code Playgroud)
我收到了错误:
ORA-00932: 00932. 00000 - "inconsistent datatypes: expected - got CLOB"
Run Code Online (Sandbox Code Playgroud)
我需要sql只是为了分析而不是生产代码.
如何通过属于CLOB的子字符串进行分组?
谢谢你的帮助.
斯特凡
我目前正在使用oracle.sql.CLOB绑定到 Oracle Clob。
使用有什么好处吗
java.sql.Clob clob = con.createClob();
Run Code Online (Sandbox Code Playgroud)
而不是使用创建临时 Clob
oracle.oracle.sql.CLOB.createTemporary(oracleConn, false, oracle.sql.CLOB.DURATION_SESSION);
Run Code Online (Sandbox Code Playgroud)
我们正在使用 Java 6。
下面的代码抛出一个错误:“ORA-06502: PL/SQL: 数字或值错误 ORA-06512: 在第 24 行”。
DECLARE
v_clob CLOB;
CURSOR cur_a
IS
SELECT
device_num,
Account_number,
CustomerName,
Prem_address ,
contact_phone ,
W_status ,
A_status ,
"12-1 AM" Twelve21,
"1-2 AM" One22,
"2-3 AM" Two23,
"3-4 AM" Three24,
CIn4Hrs
FROM account a
WHERE 1 =1 ;
BEGIN
DBMS_LOB.CreateTemporary( v_clob, true );
FOR rec IN cur_a
LOOP
v_clob := v_clob ||rec.device_num|| ',' ||rec.Account_number|| ',' ||rec.contact_phone || ',' ||rec.W_status|| ',' ||rec.A_status|| ',' ||rec.Twelve21|| ',' ||rec.One22|| ',' ||rec.Two23|| ',' ||rec.Three24|| ',' ||rec.CIn4Hrs|| ',' ||SUBSTR(rec.CustomerName,1,15)|| …Run Code Online (Sandbox Code Playgroud)