Avatar billede michael_stim Ekspert
24. maj 2007 - 15:06 Der er 24 kommentarer og
2 løsninger

Konverter long til varchar.

Skal have konverteret en long to varchar.
Jørn har hjulpet mig et stykke vej, men mangler lige det sidste.

Har et database link:
INSERT INTO ksd_line SELECT * FROM ksd_line@linknavn.
Men der er long datatyper i begge tabeller og kan man jo ikke.

Så er jørn kommet frem til at man skal have en procedure der konverterer og kalde på den i en view på remote serveren, som så derefter kan kaldes på mha linket. Det er det jeg har brug for hjælp med.

Her er det andet spørgsmål.
http://www.eksperten.dk/spm/779788
Avatar billede 0xffff Nybegynder
24. maj 2007 - 15:36 #1
Nu er jeg RET rusten i PL/SQL syntax. Men du skal vel bruge en CAST function, vil jeg tro.

select cast( 1233443 AS varchar2(30) )
from dual;
Avatar billede holdam Nybegynder
24. maj 2007 - 15:46 #2
Du har sandsynligvis ikke adgang til dbms_metadata_util - den tilhører sys, og du skal have grant'et execute permission for at kunne anvende den.

Altså:
connect sys/<pw> as sysdba
grant execute on dbms_metadata_util to <user>

Derefter skulle du kunne kalde funktionen. Men dit kald skal se således ud:

dbms_metadata_util.long2varchar(4000, '<user>.KSD_LINE', 'REMARKS', ROWID)

- altså du skal indsætte dit brugernavn i TABLE-parameteren, eftersom pakken kører som sys (alternativt skal du lave et public synonym på din tabel så sys kan se den direkte). Og der skal stå ROWID, ikke 72 (hvor det så kom fra?)


Angående dit første spørgsmål tror jeg i øvrigt bare der var en syntaksfejl i dit COPY statement. Det ser ca. således ud:

copy from REMOTE_USER/REMOTE_USER_PASSWORD@remotedb -
insert testtab using select * from testtab

Men med 16 millioner rækker er det nok klogt at sætte copycommit og arraysize fornuftigt...
Altså ikke "insert into", bare "insert"
Avatar billede michael_stim Ekspert
24. maj 2007 - 16:59 #3
Nu gav jeg mig rettigheder lokalt bare for at se om det virker, men nu siger den:
ORA-01410: ugyldigt rowid ORA-06512 ved sys.dbms_metadata...

INSERT INTO ksd_line_test SELECT
...
sys.dbms_metadata_util(4000,'KSDCWW.KSD_LINE','REMARKS',ROWID) AS REMARKS,
...
FROM ksd_line@temp
Avatar billede michael_stim Ekspert
24. maj 2007 - 17:22 #4
Og når jeg laver en select rowid as rid, får jeg f ex AABKP/AAHAAAyFtAAM
Avatar billede holdam Nybegynder
24. maj 2007 - 19:27 #5
Nu ved jeg ikke om du har kopieret direkte ud af dit script, for så mangler du "long2varchar" - der står kun et pakkenavn.

Altså: sys.dbms_metadata_util.long2varchar(4000,'KSDCWW.KSD_LINE','REMARKS',ROWID)
Avatar billede michael_stim Ekspert
24. maj 2007 - 19:43 #6
Nej, det var bare mig der glemte det ;o)
Er i gang med at rebuilde alle index der hörer til tabellen.
Avatar billede michael_stim Ekspert
24. maj 2007 - 20:02 #7
Det var heller ikke index. Har du nogle gode idéer holdam?
Avatar billede michael_stim Ekspert
24. maj 2007 - 20:05 #8
Evt en produre hvor man ikke behøver kopiere 16 mill poster til en ny kolonne.
Skal jeg ud i en exp/imp skal jeg køre til ælmhult, hvor serverne står :(
Avatar billede Slettet bruger
24. maj 2007 - 20:08 #9
Hvordan kører du din select - den der giver fejlen 'ugyldigt rowid?'

Har du prøvet at lave selecten, uden insert, for de første 100 rækker (WHERE ROWNUM < 100)? Prøv at gøre det på produktionsserver. Hvis det virker, kan det være fordi du kører på et databaselink: Du bruger måske proceduren long2varchar fra testserver. Da rowid refererer til en række på produktionsserveren vil lpmg2varchar på testserver jo ikke kunne finde rækken med den angivne rowid.
Avatar billede michael_stim Ekspert
24. maj 2007 - 20:14 #10
Det har jeg prøvet og det fungerer.

Hvilket indebærer at jeg skal køre den på proden? Det er bare det at jeg ikke har fået rettigheder til dbms_metadata_util.
Avatar billede Slettet bruger
24. maj 2007 - 20:26 #11
du behøver ikke at køre til ælmhult for at køre exp/imp. Du kan gøre det fra din egen maskine. Du har jo forbindelse derfra til både prod og test?
Avatar billede michael_stim Ekspert
24. maj 2007 - 20:33 #12
Jeg prøvede at køre den syntax jeg fik af dig, men den brokkede sig over at tabellen ikke fandtes.

Gik ind i kommandoprompten. Ledte mig frem til bin-kataloget. kørte:
exp brugerid=bruger/pass@prod.firma.com file=ksd_line_exp.dmp compress=NO log=ksd_line_exp.log tables=(KSD_LINE)
og tables=(SCHEMANAVN.KSD_LINE)
Men de ville ikke.
Avatar billede michael_stim Ekspert
24. maj 2007 - 20:39 #13
EXP-00056: Oracle-fejl 942 fundet
ORA-00942: table or view does not exist
EXP-00000: Mislykket avslutning af export
Avatar billede Slettet bruger
24. maj 2007 - 20:44 #14
jeg har altid svært ved at huske syntaksen. det var hvad 'exp help=y' sagde til mig.
men ifølge http://www.kiyoinc.com/nxtract.html er syntaksen uden paranteser

EXP uid/pswd buffer=32767 file=members.dmp tables=members
Avatar billede michael_stim Ekspert
24. maj 2007 - 20:48 #15
Tror jeg også jeg prøvede. Men tester lige igen.
Avatar billede Slettet bruger
24. maj 2007 - 20:53 #16
Avatar billede michael_stim Ekspert
24. maj 2007 - 21:04 #17
Uha det går over min forstand. Er bare en simpel udvikler ikke dba'er. Men det ser ud til at man skal have sys pass og at den tager hele basen.
Avatar billede Slettet bruger
24. maj 2007 - 21:06 #18
du skal ikke have sys password. prøv at køre den interaktivt. skriv 'exp' og svar på spørgsmålene
Avatar billede michael_stim Ekspert
24. maj 2007 - 21:14 #19
Skal jeg gemme den som en bat-fil og lægge den i bin?
Avatar billede Slettet bruger
24. maj 2007 - 21:33 #20
er det dmp-filen du tænker på? den kan du ligge hvorsomhelst
Avatar billede Slettet bruger
24. maj 2007 - 21:35 #21
jeg logger af nu. Håber at nogen kan hjælpe dig videre. Held og lykke med det
Avatar billede michael_stim Ekspert
25. maj 2007 - 08:57 #22
Har fundet ud af at det formodentlig er catexp.sql der skal köres på serveren. Det hjalp i hvert fald da jeg körte den.
Tak for hjälpen alle sammen. Läg gerne et svar.
Avatar billede holdam Nybegynder
25. maj 2007 - 11:05 #23
Jeg ved ikke hvor meget jeg bidrog til den endelige løsning, men her er da i hvert fald et svar :-)
Avatar billede Slettet bruger
25. maj 2007 - 12:26 #24
jeg har fået point i andet spørgsmål. Men michal_stim: kom du egentlig igennem med det?
Avatar billede michael_stim Ekspert
25. maj 2007 - 13:56 #25
Läg du bare et svar jörn. Så kan du dele med holdam.
Jeg fik det til at fungere lokalt, men fik ikke de nödvendige rettigheder til at göre det på de andre servere. Det er åbenbart et större beaurokrati (hmm, ser fejlstavet ud) man skal igennem.
Avatar billede Slettet bruger
25. maj 2007 - 15:40 #26
tak for pointsene
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