Avatar billede aslan Nybegynder
11. januar 2006 - 09:54 Der er 11 kommentarer

Indlæse insert sætninger med en CLOB kolonne?

Jeg har en fil med ca. 50 insert sætninger hvor den ene kolonne har datatypen CLOB. Disse vil jeg gerne have indlæst i en tabel indeholdene samme kolonner. Men det har hverken virket med Toad eller Sql plus pågrund af CLOB kolonnen.

Har nogen et forslag til hvordan jeg kan få løst dette problem?
Avatar billede aslan Nybegynder
11. januar 2006 - 10:35 #1
Jeg skal faktisk have flyttet en tabels indhold fra en tabel til en anden tabel på en anden database. Og det er CLOB kolonnen der driller. Alle forslag er velkomne :-)
Avatar billede pgroen Nybegynder
11. januar 2006 - 11:08 #2
Det kommer lidt an på hvor stor din CLOB er, og hvilken Oracle-version du kører...


Til inspiration har Tom Kyte et glimrende eksempel på

http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:4084920819312

declare
  l_clob clob;
begin
  insert into t values ( empty_clob() ) returning clob_col into l_clob;

  for i in 1 .. 10
  loop
      dbms_lob.writeAppend( l_clob, 32000, rpad( '*', 32000, '*' ) );
  end loop;
  commit;
end;
/
Avatar billede pgroen Nybegynder
11. januar 2006 - 11:44 #3
For nu at være lidt mere præcis:

hvis CLOB'en er for lang, og du i øvrigt ikke har mere end 50 inserts, kunne du overveje følgende 'bondeløsning':

DECLARE
  vClob  CLOB;
BEGIN
  vClob := 'Meget lang tekststreng';

  INSERT INTO en_eller_anden_tabel (en_eller_anden_clob_kolonne)
      VALUES (vClob);

  vClob := 'En anden, meget lang tekststreng';

  INSERT INTO  en_eller_anden_tabel (en_eller_anden_clob_kolonne)
      VALUES (vClob);

  -- osv, osv.
END;


Det burde virke med tekster op til 32K, selv i Oracle 7...
Avatar billede aslan Nybegynder
11. januar 2006 - 12:34 #4
Problemet er at det skal kopiers fra en database over i en anden database og det kan man ikke bare få lov til med datatypen clob. Man skal vist nok bruge noget dbms_lob
Avatar billede pgroen Nybegynder
11. januar 2006 - 14:14 #5
Du siger du har en fil med 50 insert-sætninger.
Hvorfor kan du ikke bare fyre den af, når du er logget på den anden database?
Avatar billede arne_v Ekspert
11. januar 2006 - 20:30 #6
hvorfor et SQL tool ?

hvorfor ikke en applikation f.eks. i Java ?
Avatar billede aslan Nybegynder
11. januar 2006 - 22:06 #7
pgroen, clob kolonnen indeholder tegn som æ som gør at når jeg kører det på toad så tror den at det er variable og ber om en værdi. I Oracles SQL+ fejler den helt.

arne jeg har overvejet det, men havde håbet jeg kunne gøre det uden at bruge for meget tid på det.
Avatar billede pgroen Nybegynder
12. januar 2006 - 09:49 #8
Aha, jamen det har jo ikke noget med CLOB'en at gøre;

prøv i SQL*plus at skrive 'SET DEFINE OFF' før du fyrer dine inserts af...
Avatar billede aslan Nybegynder
12. januar 2006 - 12:52 #9
pgroen

Når jeg kører :

set define off
@C:\inserts.sql

i sql plus, giver den en masse fejl
Avatar billede pgroen Nybegynder
12. januar 2006 - 13:05 #10
1: Hvilke fejl kommer den med ?
2: Hvordan ser dine inserts ud ?
Avatar billede pgroen Nybegynder
14. marts 2006 - 12:32 #11
Hallooo ?
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



IT-JOB