ďťż
 
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?= ďťż
 
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=



Karlo - 14-12-2006 16:08
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
  Witam

Od jakiego? czasu borykam si? z nast?puj?cym problemem:

Mam w bazie utworzon? pewn? kolekcj?. Chcia?bym warto?ci tej kolekcji
przepisa? do tabeli. Próbuj? to wykona? w nast?puj?cy sposób:

INSERT INTO TMP_CLAS_PATH_OCCURRENCE
(
CPO_TEMPLT_CLAS_ID,
CPO_ROOT_NODE_ID,
CPO_NODE_ID,
CPO_VALID_FROM,
CPO_VALID_TO,
CPO_PATH,
CPO_PATH_LENGTH,
CPO_PARENT_NODE_ID,
CPO_PARENT_VALID_FROM,
CPO_PARENT_VALID_TO
)
SELECT
PathOcc.TemplateClassID,
PathOcc.RootNodeID,
PathOcc.NodeID,
PathOcc.VFrom,
PathOcc.VTo,
PathOcc.Path,
PathOcc.PathLength,
PathOcc.ParentNodeID,
PathOcc.ParentVFrom,
PathOcc.ParentVTo
FROM TABLE(PAR_PathOcc) PathOcc;

TMP_CLAS_PATH_OCCURRENCE to tabela w bazie danych, PAR_PathOcc to moja
kolekcja typu TABLE_PathOccurrence. Typ ten jest zadeklarowany globalnie
w nast?puj?cy sposób:

create or replace type REC_Pathoccurrence AS OBJECT
(
TemplateClassID NUMBER(12),
RootNodeID NUMBER(12),
NodeID NUMBER(12),
VFrom DATE,
VTo DATE,
Path VARCHAR2(256),
PathLength NUMBER(12),
ParentNodeID NUMBER(12),
ParentVFrom DATE,
ParentVTo DATE
);

create or replace TYPE TABLE_PathOccurrence AS TABLE OF REC_PathOccurrence;

Niestety, w trakcie wykonania zapytania otrzymuj? nast?puj?cy b??d:
ORA-22905: cannot access rows from a non-nested table item

Pomó?cie prosz?, bo ju? nie wiem, co robi?. Googlanie nic nie da?o. :(

Pozdrawiam,
Karlo





aasat - 14-12-2006 16:08

  hej

INSERT INTO TMP_CLAS_PATH_OCCURRENCE
SELECT * FROM TABLE(CAST v_pathoccurence AS TABLE_PathOccurrence)

gdzie v_pathoccurence to jest zmienna ktora deklarujesz tak:
v_pathoccurence TABLE_PathOccurrence := TABLE_PathOccurrence();

a potem wstawiasz wartosci

pozdrawiam
wojtek




Karlo - 14-12-2006 16:08

  aasat wrote:
> hej
>
> INSERT INTO TMP_CLAS_PATH_OCCURRENCE
> SELECT * FROM TABLE(CAST v_pathoccurence AS TABLE_PathOccurrence)
>
>
> gdzie v_pathoccurence to jest zmienna ktora deklarujesz tak:
> v_pathoccurence TABLE_PathOccurrence := TABLE_PathOccurrence();
>
> a potem wstawiasz wartosci
>
> pozdrawiam
> wojtek
>
>
Nic z tego. :( Dostaj? b??d:
ORA-14551: cannot perform a DML operation inside a query

Procedura wygl?da nast?puj?co:
PROCEDURE Create_PathOccTempTable(PAR_PathOcc TABLE_PathOccurrence)
IS
v_pathoccurence TABLE_PathOccurrence := TABLE_PathOccurrence();
BEGIN
v_pathoccurence:=PAR_PathOcc;
INSERT INTO TMP_CLAS_PATH_OCCURRENCE
SELECT * FROM TABLE(CAST v_pathoccurence AS TABLE_PathOccurrence);
END Create_PathOccTempTable;

Mo?e jeszcze jakie? porady? Ja chyba czego? nie rozumiem. :(
Wzoruj?c si? na przyk?adzie z ksi??ki "Oracle 9i PL/SQL. Poradnik
programisty" zmieni?em moj? procedur?, która teraz wygl?da tak:

FOR i IN PAR_PathOcc.FIRST..PAR_PathOcc.LAST LOOP
INSERT INTO TMP_CLAS_PATH_OCCURRENCE
VALUES (
PAR_PathOcc(i).TemplateClassID,
PAR_PathOcc(i).RootNodeID,
PAR_PathOcc(i).NodeID,
PAR_PathOcc(i).VFrom,
PAR_PathOcc(i).VTo,
PAR_PathOcc(i).Path,
PAR_PathOcc(i).PathLength,
PAR_PathOcc(i).ParentNodeID,
PAR_PathOcc(i).ParentVFrom,
PAR_PathOcc(i).ParentVTo
);
END LOOP;

Czyli niemal przepisa?em przyk?ad ze str. 319 w/w ksi??ki. I co? I d...
Znowu komunikat "ORA-14551: cannot perform a DML operation inside a query".

Pozdrawiam i z niecierpliwo?ci? czekam na kolejne pomys?y,
Karlo




ThomasO@cpas.com - 14-12-2006 16:08
=?iso-8859-2?q?Re:_Oracle_PL/SQL_Wstawianie_wynik=F3w_kolekcji_do_tabeli?=
 
Karlo wrote:
> Witam
>
> Od jakiego? czasu borykam si? z nast?puj?cym problemem:
>
> Mam w bazie utworzon? pewn? kolekcj?. Chcia?bym warto?ci tej kolekcji
> przepisa? do tabeli. Próbuj? to wykona? w nast?puj?cy sposób:
>
> INSERT INTO TMP_CLAS_PATH_OCCURRENCE
> (
> CPO_TEMPLT_CLAS_ID,
> CPO_ROOT_NODE_ID,
> CPO_NODE_ID,
> CPO_VALID_FROM,
> CPO_VALID_TO,
> CPO_PATH,
> CPO_PATH_LENGTH,
> CPO_PARENT_NODE_ID,
> CPO_PARENT_VALID_FROM,
> CPO_PARENT_VALID_TO
> )
> SELECT
> PathOcc.TemplateClassID,
> PathOcc.RootNodeID,
> PathOcc.NodeID,
> PathOcc.VFrom,
> PathOcc.VTo,
> PathOcc.Path,
> PathOcc.PathLength,
> PathOcc.ParentNodeID,
> PathOcc.ParentVFrom,
> PathOcc.ParentVTo
> FROM TABLE(PAR_PathOcc) PathOcc;
>
> TMP_CLAS_PATH_OCCURRENCE to tabela w bazie danych, PAR_PathOcc to moja
> kolekcja typu TABLE_PathOccurrence. Typ ten jest zadeklarowany globalnie
> w nast?puj?cy sposób:
>
> create or replace type REC_Pathoccurrence AS OBJECT
> (
> TemplateClassID NUMBER(12),
> RootNodeID NUMBER(12),
> NodeID NUMBER(12),
> VFrom DATE,
> VTo DATE,
> Path VARCHAR2(256),
> PathLength NUMBER(12),
> ParentNodeID NUMBER(12),
> ParentVFrom DATE,
> ParentVTo DATE
> );
>
> create or replace TYPE TABLE_PathOccurrence AS TABLE OF REC_PathOccurrence;
>
> Niestety, w trakcie wykonania zapytania otrzymuj? nast?puj?cy b??d:
> ORA-22905: cannot access rows from a non-nested table item
>
> Pomó?cie prosz?, bo ju? nie wiem, co robi?. Googlanie nic nie da?o. :(
>
> Pozdrawiam,
> Karlo
Karlo,
Versja Oracle ?
Thomas





ThomasO@cpas.com - 14-12-2006 16:08
=?iso-8859-2?q?Re:_Oracle_PL/SQL_Wstawianie_wynik=F3w_kolekcji_do_tabeli?=
 
Karlo wrote:
> aasat wrote:
> > hej
> >
> > INSERT INTO TMP_CLAS_PATH_OCCURRENCE
> > SELECT * FROM TABLE(CAST v_pathoccurence AS TABLE_PathOccurrence)
> >
> >
> > gdzie v_pathoccurence to jest zmienna ktora deklarujesz tak:
> > v_pathoccurence TABLE_PathOccurrence := TABLE_PathOccurrence();
> >
> > a potem wstawiasz wartosci
> >
> > pozdrawiam
> > wojtek
> >
> >
> Nic z tego. :( Dostaj? b??d:
> ORA-14551: cannot perform a DML operation inside a query
>
> Procedura wygl?da nast?puj?co:
> PROCEDURE Create_PathOccTempTable(PAR_PathOcc TABLE_PathOccurrence)
> IS
> v_pathoccurence TABLE_PathOccurrence := TABLE_PathOccurrence();
> BEGIN
> v_pathoccurence:=PAR_PathOcc;
> INSERT INTO TMP_CLAS_PATH_OCCURRENCE
> SELECT * FROM TABLE(CAST v_pathoccurence AS TABLE_PathOccurrence);
> END Create_PathOccTempTable;
>
> Mo?e jeszcze jakie? porady? Ja chyba czego? nie rozumiem. :(
> Wzoruj?c si? na przyk?adzie z ksi??ki "Oracle 9i PL/SQL. Poradnik
> programisty" zmieni?em moj? procedur?, która teraz wygl?da tak:
>
> FOR i IN PAR_PathOcc.FIRST..PAR_PathOcc.LAST LOOP
> INSERT INTO TMP_CLAS_PATH_OCCURRENCE
> VALUES (
> PAR_PathOcc(i).TemplateClassID,
> PAR_PathOcc(i).RootNodeID,
> PAR_PathOcc(i).NodeID,
> PAR_PathOcc(i).VFrom,
> PAR_PathOcc(i).VTo,
> PAR_PathOcc(i).Path,
> PAR_PathOcc(i).PathLength,
> PAR_PathOcc(i).ParentNodeID,
> PAR_PathOcc(i).ParentVFrom,
> PAR_PathOcc(i).ParentVTo
> );
> END LOOP;
>
> Czyli niemal przepisa?em przyk?ad ze str. 319 w/w ksi??ki. I co? I d...
> Znowu komunikat "ORA-14551: cannot perform a DML operation inside a query".
>
> Pozdrawiam i z niecierpliwo?ci? czekam na kolejne pomys?y,
> Karlo
Karlo
W versjach Oracle 9,10 INSERT ... SELECT nie moze uzywac "table
collection expression", tylko subquery.
Przyklad ktory podajesz uzywa LOOP i INSERT
Inna metoda to uzyj FORALL.
HTH
Thomas




Karlo - 14-12-2006 16:08

  ThomasO@cpas.com wrote:

>
> Karlo
> W versjach Oracle 9,10 INSERT ... SELECT nie moze uzywac "table
> collection expression", tylko subquery.
> Przyklad ktory podajesz uzywa LOOP i INSERT
> Inna metoda to uzyj FORALL.
> HTH
> Thomas
>

Dzi?ki, Thomas. Ju? doszed?em, co jest nie tak. Kiedy testowa?em
procedur?, to u?ywa?em jej prostego wywo?ania. I dostawa?em b??d.
Natomiast, kiedy umie?ci?em to w bloku BEGIN...END; wszystko zacz??o hula?.

Pozdrawiam i dzi?kuj?,

Karlo
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle 19g +Insert +Insert +Insert... MSSQL Express czy Oracle Express Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?= [Oracle, Toad] Zaladowanie obiektu w TOAD [Oracle][Reports30] 10G nie dziala razem z Reports3.0 klient oracle (zmiana domyslna klienta oracla) [oracle] [xml] XML na bazie istniejacej struktury ? [Oracle] W jaki sposób skopiować całą zawartość schemy jednego użytkownika do nowo utworzonego użytkownika? klient Oracle 10g SE a Windows 98 SE Oracle Standard Edition One - czym sie rozni od wersji standard iexpress?
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • shanti.opx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com