Avatar billede pierrehusted Nybegynder
27. september 2006 - 13:36 Der er 8 kommentarer og
1 løsning

Konvertere LONG til CLOB (8.1.6)

Jeg har en tabel, hvor en leverandør lægger data. Jeg har lavet en trigger, som når der kommer noget i tabellen, skal overføre det til en anden tabel.

Mit problem er så at tabellen, hvor dataene kommer ind ligger den store tekst i et LONG felt - og i tabellen det skal lande i er det tilsvarende felt et CLOB.


Min trigger ser sådan her ud (har klippet en masse ud, så der kun er det essentielle tilbage):

CREATE OR REPLACE TRIGGER INDDATA_TIL_DRIFT_INS
AFTER INSERT
ON SCHEMA1.INDDATA
REFERENCING NEW AS NEW
FOR EACH ROW
    BEGIN
        INSERT INTO SCHEMA2.DRIFT
        (
        ARTICLE_ID, CREATION_TIME, UPLOADING_TIME,
        HEADER, TEXT, LIST_HEADER
        )
        VALUES
        (
        SCHEMA2.articles_seq.nextval, :NEW.infotime, sysdate,
        :NEW.headline, TO_CLOB(:NEW.text), :NEW.headline
        );
    END


Hvordan får jeg konverteret dataene fra LONG til CLOB??

Hverken TO_CLOB eller TO_LOB virker nemlig. Jeg får følgende fejl:
PLS-00201: identifier 'TO_CLOB' must be declared
Avatar billede kjulius Novice
27. september 2006 - 23:16 #1
Jeg må indrømme, at jeg ikke er inde i Oracle syntax, så jeg kan ikke forklare hvad der foregår i de to proceducer, men måske kan du gennemskue det. Linken skulle i hvert fald vise, hvordan man konverterer en LONG til en CLOB:

http://www.psoug.org/reference/long2clob.html
Avatar billede pierrehusted Nybegynder
28. september 2006 - 09:47 #2
Ja, udfra eksemplet kan jeg også godt få konverteret fra LONG til CLOB.

CREATE TABLE t1 (x INT, y LONG);
INSERT INTO t1 VALUES (1, RPAD('*',100,'*'));
INSERT INTO t1 VALUES (2, RPAD('*',100,'$'));
COMMIT;

CREATE GLOBAL TEMPORARY TABLE t2 (x INT, y CLOB)
ON COMMIT DELETE ROWS;

INSERT INTO t2  SELECT x, TO_LOB(y) FROM t1;

select * from t2;

Så får jeg pænt posterne ud af t2 tabellen - konverteret.


Men når jeg sætter den samme kode ind i en trigger får jeg fejlen:
PLS-00201: identifier 'TO_LOB' must be declared
Avatar billede kjulius Novice
28. september 2006 - 17:19 #3
Jeg har fundet lidt information på siden
http://www.mid.main.vsu.ru/docs/oracle/appdev.816/a76940/adl09p15.htm
som muligvis kan være til nytte:

If the target table (the table with the lob column) has a trigger -- such as BEFORE INSERT or INSTEAD OF INSERT -- the :NEW.lob_col variable can't be referenced in the trigger body.
Avatar billede pierrehusted Nybegynder
19. oktober 2006 - 08:59 #4
Hmm...  det er tilsyneladende ikke muligt at lave en trigger, som kan gøre det. ØV!

Hvis du vil have point kjulius, så lav et svar.
Avatar billede kjulius Novice
21. oktober 2006 - 00:46 #5
Nej, hvis mit svar/kommentar, skal du ikke betale.. :¤}
Avatar billede kjulius Novice
21. oktober 2006 - 00:47 #6
Nej hvis du ikke kunne bruge mit svar/kommentar, skal du ikke betale... :¤}
Avatar billede pierrehusted Nybegynder
23. oktober 2006 - 09:08 #7
Nej, dit svar gjorde ikke at jeg løste opgaven. Men at jeg nåede frem til at det desværre ikke kunne løses (og jeg måtte prøve andre løsninger).

Jeg vil gerne giev dig point for
Avatar billede pierrehusted Nybegynder
23. oktober 2006 - 09:09 #8
Det skulle have sluttet med:

Jeg vil gerne give dig point for forsøget på at hjælpe. Det er vel det siden her handler om.
Avatar billede kjulius Novice
26. oktober 2006 - 00:36 #9
Tak for tanken!

Jo, det er da til en vis grad også initiativet og indsatsen man skal præmiere. Så hvis jeg nu havde lagt et stort arbejde og mange indlæg i forsøget på at løse dit problem, og du stadig ikke kunne bruge det, så ville jeg også synes, at jeg havde fortjent nogle point. I dette tilfælde har jeg dog ikke ydet nogen særlig indsats, ud over at have søgt på google, og anført et link til en artikel, som beskrev en metode, som i mine øjne kunne ligne en løsning på opgaven i henhold til din beskrivelse af dit problem.

I øvrigt er snakken jo lidt teoretisk, da spørgsmålet er lukket ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester