Magdalena Smętek

Magdalena Smętek Projektant, Asseco
Poland S.A.

Temat: oracle problem z long

cześć mam następujacy problem:
baza a tabela a1 pole a11 typu clob
ma zlinkowaną baze (dblink) b z tabelą b1 z polem b11 typu long
chce zrobic import danych z b.b1 do a.a1 z konwersja pola b11 do a11
chcialam skorzystac z to_clob,to_lob niestety dblink jest tu wąskim gardłem
zalezy mi aby działało na oracle 8 i 9i
za wszelkie sugestie i pomoc dziękujęMagdalena Graczyk edytował(a) ten post dnia 31.07.08 o godzinie 09:05
Wojciech Nowak

Wojciech Nowak Konsultant Systemów
Bankowych | Analityk
Systemowy

Temat: oracle problem z long

czy wykonujesz konwersję z jakiejś procedury pl/sql ?
użycie TO_CLOB w oracle 8 w procedurze pl/sql może się skończyć komunikatem:

PLS-00201: identifier 'TO_CLOB' must be declared

można spróbować obejść poprzez dynamiczne sql, czyli np.:

zamiast:

begin
select to_clob(x).....;
end;

mamy:

begin
execute immediate 'select to_clob(x)....';
end;

konto usunięte

Temat: oracle problem z long

Magdalena Graczyk:
chcialam skorzystac z to_clob,to_lob niestety dblink jest tu wąskim gardłem
zalezy mi aby działało na oracle 8 i 9i

Przez dblink przetransferujesz LONG o maksymalnej długosci bodajze 32kb, albo 64kb, nie pamietam dokładnie.
Grzegorz G.

Grzegorz G. ASE / Systems
Architect, Syniverse

Temat: oracle problem z long

Magda,

takie coś kiedyś wyprodukowałem do zassania trigger_body z dba_triggers po dblinku (czyli problem w sumie taki sam, ściągałem LONG-a do lokalnego CLOB-a). Z tego co pamiętam z różnych względów po prostu się tego nie dało zrobić i trzeba było szatkować po kawałku. Dlaczego kawałek ma 250 - tego nie pamiętam, ale jakiś dobry powód musiał być...

(p_sysview i p_dblink to jakieś z zewnątrz parametry, jeden to DBA_TRIGGERS a drugi to nazwa dblinka)
...
l_cursor INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR;
l_trigger_body CLOB;
l_n INTEGER;
l_long_val VARCHAR2(250);
l_long_len NUMBER;
l_buflen NUMBER := 250;
l_curpos NUMBER := 0;
BEGIN
SELECT '
SELECT trigger_name, trigger_body
FROM ' || p_sysview || DECODE(p_dblink, NULL, ' ', '@' || p_dblink) || '
WHERE owner = :owner
AND trigger_name LIKE :trg_nm_pttrn'
INTO l_stmt
FROM DUAL;

DBMS_SQL.PARSE(l_cursor, l_stmt, dbms_sql.native);
DBMS_SQL.BIND_VARIABLE(l_cursor, ':owner', p_owner);
DBMS_SQL.BIND_VARIABLE(l_cursor, ':trg_nm_pttrn', p_trg_nm_pttrn);
DBMS_SQL.DEFINE_COLUMN(l_cursor, 1, 'VARCHAR2', 30);
DBMS_SQL.DEFINE_COLUMN_LONG(l_cursor, 2);
l_n := DBMS_SQL.EXECUTE(l_cursor);
WHILE(DBMS_SQL.FETCH_ROWS(l_cursor) > 0) LOOP
DBMS_SQL.COLUMN_VALUE(l_cursor, 1, l_trigger_name);
l_trigger_body := NULL;
l_curpos := 0;
LOOP
DBMS_SQL.COLUMN_VALUE_LONG(l_cursor, 2, l_buflen, l_curpos , l_long_val, l_long_len);
l_curpos := l_curpos + l_long_len;
l_trigger_body := CASE l_trigger_body WHEN NULL THEN l_long_val ELSE l_trigger_body || l_long_val END;
EXIT WHEN l_long_len = 0;
END LOOP;
-- tutaj w l_trigger_body jest to co potrzebujesz, czyli rzeczony LONG
END LOOP;

Enjoy!
Wojciech Nowak

Wojciech Nowak Konsultant Systemów
Bankowych | Analityk
Systemowy

Temat: oracle problem z long

Grzegorz, ale pod jaką bazą, w oracle 8 ?Wojciech Nowak edytował(a) ten post dnia 31.07.08 o godzinie 10:21
Magdalena Smętek

Magdalena Smętek Projektant, Asseco
Poland S.A.

Temat: oracle problem z long

import z
9i -> 8
oraz ten sam import
9 -> 9
Grzegorz G.

Grzegorz G. ASE / Systems
Architect, Syniverse

Temat: oracle problem z long

Nie no, bez żartów, 8i to jakiś przeżytek, teraz jest 11g aktualny :-)

A tak na poważnie - na 9i na pewno to działało i działa również na 10g. Pewnie trzeba by sprawdzić na 8ce.

Wojciech,
jaka to konstrukcja Cię niepokoi? DBMS_SQL to zdaje się przedpotopowy pakiet. LOBy chyba były w 8ce. CASE'a łatwo przepisać na DECODE. Hm?
Wojciech Nowak

Wojciech Nowak Konsultant Systemów
Bankowych | Analityk
Systemowy

Temat: oracle problem z long

tak, CASE nie jest supportowany w ora8. Poza tym, koleżanka też pytała o funkcję TO_CLOB, z która w ora8 także są problemy w procedurach pl/sql.
Magdalena Smętek

Magdalena Smętek Projektant, Asseco
Poland S.A.

Temat: oracle problem z long

a slyszeliscie cos o/użytwaliscie dbms_long??Magdalena Graczyk edytował(a) ten post dnia 31.07.08 o godzinie 13:35
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: oracle problem z long

może pomoże:
Ask Tom

Następna dyskusja:

ORACLE problem z LISTENER'em




Wyślij zaproszenie do