Hoe een CLOB-kolom opvragen in Oracle

Ik probeer een query uit te voeren met een paar kolommen die een CLOB-gegevenstype zijn. Als ik de query zoals normaal uitvoer, hebben al die velden gewoon (CLOB)als waarde.

Ik heb geprobeerd DBMS_LOB.substr(column) te gebruiken en ik krijg de foutmelding

ORA-06502: PL/SQL: numeric or value error: character string buffer too small

Hoe kan ik de CLOB-kolom opvragen?


Antwoord 1, autoriteit 100%

Dit werkt

select DBMS_LOB.substr(myColumn, 3000) from myTable

Antwoord 2, autoriteit 62%

Bij het ophalen van de substring van een CLOB-kolom en het gebruik van een query-tool die grootte-/bufferbeperkingen heeft, moet u soms de BUFFER op een grotere grootte instellen. Gebruik bijvoorbeeld tijdens het gebruik van SQL Plus de SET BUFFER 10000om deze in te stellen op 10000, aangezien de standaardwaarde 4000 is.

Door de opdracht dbms_lob.substruit te voeren, kunt u ook het aantal tekens specificeren dat u wilt retourneren en de offset waarvan. Dus het gebruik van DBMS_LOB.substr(column, 3000)kan het beperken tot een hoeveelheid die klein genoeg is voor de buffer.

Zie orakeldocumentatievoor meer informatie over het substr-commando

  DBMS_LOB.SUBSTR (
    lob_loc IN CLOB KARAKTER SET ANY_CS,
    bedrag IN INTEGER := 32767,
    offset IN INTEGER := 1)
   RETURN VARCHAR2 KARAKTERSET lob_loc%CHARSET;

Antwoord 3, autoriteit 11%

Ik kwam een ​​andere aandoening tegen met HugeClob in mijn Oracle-database. De dbms_lob.substrstond alleen een waarde van 4000 toe in de functie, bijvoorbeeld:

dbms_lob.substr(column,4000,1)

dus voor mijn HughClob die groter was, moest ik twee aanroepen gebruiken in select:

select dbms_lob.substr(column,4000,1) part1, 
       dbms_lob.substr(column,4000,4001) part2 from .....

Ik belde vanuit een Java-app, dus ik heb gewoon deel1 en deel2 samengevoegd en als e-mail verzonden.


Antwoord 4, autoriteit 8%

Als het een CLOB is, waarom kunnen we de kolom dan niet_charen en dan normaal zoeken?

Maak een tafel

CREATE TABLE MY_TABLE(Id integer PRIMARY KEY, Name varchar2(20), message clob);

Maak enkele records in deze tabel

INSERT INTO MY_TABLE VALUES(1,'Tom','Hi This is Row one');
INSERT INTO MY_TABLE VALUES(2,'Lucy', 'Hi This is Row two');
INSERT INTO MY_TABLE VALUES(3,'Frank', 'Hi This is Row three');
INSERT INTO MY_TABLE VALUES(4,'Jane', 'Hi This is Row four');
INSERT INTO MY_TABLE VALUES(5,'Robert', 'Hi This is Row five');
COMMIT;

Zoeken in de clob-kolom

SELECT * FROM MY_TABLE where to_char(message) like '%e%';

Resultaten

ID   NAME    MESSAGE   
===============================  
1    Tom     Hi This is Row one         
3    Frank   Hi This is Row three
5    Robert  Hi This is Row five

Antwoord 5

Voor grote CLOB-selecties kan ook worden gebruikt:

SELECT dbms_lob.substr( column_name, dbms_lob.getlength(column_name), 1) FROM foo

Other episodes