Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Jak získat INSERT text pro záznam/y (Oracle)?

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Jak získat INSERT text pro záznam/y (Oracle)?

Autor: grafnev

9:11:52 29.08.2011

No vicemene narazite na vlastnost sql, ze musite stroji dokazat, ze vite co chcete. Takze bud to vyresite nejakym externim udelatkem, nebo to napisete rucne :),

Ono to jde vytvorit i normalnim dotazem a vysledek copy + paste a pustit ... seznam tabulek a sloupecku tam nekde je v nejake systemove tabulce a pak uz jen prace se spojovanim stringu a vyrobeni insertu. Jak dat informace z vice radku do sloupcu tu bylo nedavni take reseno.




Jestly se nepletu, tak nam rikali, ze oracle umi neco jako database dump ... coz
vyrobi skripty, ktere ji znovu vyrobi vcetne techto insertu ... ale to uz vam musi rict nejaky oraklista :)

Citovat příspěvek

 

Re: Jak získat INSERT text pro záznam/y (Oracle)?

Autor: steel

12:33:06 27.08.2011

Plati jednoduche pravidlo, urob si sam. Spravi taku procku co bude robit to co potrebujes je otazka na 10minut roboty.

Je ti vsak jasne, ze pokial chces robit direct insert do Siebel tabulky tak si koledujes o pruser s Oracle supportom, ze?

Citovat příspěvek

 

Re: Jak získat INSERT text pro záznam/y (Oracle)?

Autor: Bojovej commandos pejsek

21:16:31 26.08.2011

Jinak třeba funguje ještě INSERT INTO xx SELECT * from XX where ID=3;
UPDATE XX SET ID=4,S=4 WHERE ID=3 AND ROWNUM<2; commit;

Ale tam je zase problém s PK.

Ideálně bych si představoval, že by Oracle místo "*" umět vyselectovat z tabulky
všechny sloupce kromě některého, třeba takováhle notace "* -ID".

To se zase dá udělat select column_name from all_tab_cols where table_name=s and column_name<>ID ale zase je to příkaz navíc :/

Citovat příspěvek

 

Re: Jak získat INSERT text pro záznam/y (Oracle)?

Autor: Bojovej commandos pejsek

21:12:17 26.08.2011

Ahoj pánové, děkuji za odpovědi.

K té první: ano nemusím, ale jsou sloupce, které mají NOT NULL constraint a ty proste vyplnit musím A často jich je opravdu velké množství - denormalizovaná tabulka, siebel tabulka - atd. Často proste musim vyplnit 20 sloupcu - což je vopruz, člověk tam udělá někde překlep a pak hledej šmudlo, hledej.

Podobně mi zanfuguje třeba SELECT "INSERT INTO xx VALUES(" || sloupce"..

Sice si v INSERTU nemusím vyjmenovat všechny sloupce (a vím to), ale to mi pořád neuspokojuje.
--
David: Děkuji

ROWTYPE znám ale takhle mi nikdy nenapadlo to použít - není to sice to co jsem chtěl úplně přesně ale funkčnost to má stejnou ;)

Dik za tip - asi nemá cenu to nějak rozvádět - tohle se prostě použít dá. Ohledně výkonosti už si pak určí člověk on-line.

Typicky jde o to napsat/zduplikovat/upravit nějaký konfigurační záznam v nějaké cfg tabulce a výkonově to tedy vadit nebude.

-----
P.S. Ale pořád mi nechce snad nikdo tvrdit, že na to Oracle nemá funkci?
Jak řikam, smažu a opačnou operaci (insert) si najdu ve flashback transakcích, jednou insertuju žpět originál a podruhé si to upravím - ale to mi neřikejte ze si musim drbat koule přes hlavu ;)

Citovat příspěvek

 

Re: Jak získat INSERT text pro záznam/y (Oracle)?

Autor: David.Krch

15:40:48 26.08.2011

Pokud vyplnujete jen par sloupcu pak bych pouzil postup co popsal RomanZ.
Pokud kopirujete vetsi mnozstvi zaznamu soucasne, tak je lepsi udelat:
[code]
INSERT INTO tabulka (id, sloupec1, sloupec3)
SELECT mojeseq.nextval, sloupec1, sloupec3
FROM tabulka
WHERE .....
[/code]
(Prvni sloupec - ID - je priklad toho, ze do nekterych sloupcu muzete chtit vlozit jinou hodnotu).

Pokud ale jde o stav, kdy opravdu kopirujete jen 1 zaznam a opravdu ma hodne sloupecku - resp. nechcete resit v aplikaci kolik jich ma, pak bych pouzil PL/SQL a record se strukturou definovanou dle tabulky:

[code]
DECLARE
L_REC tabulka%ROWTYPE;
BEGIN
select * into L_REC from tabulka WHERE .....;
L_REC.DEPARTMENT_ID:=99; -- zde dopocitate/pozmenite nektera policka
insert into tabulka values L_REC;
END;
/
[/code]
Ale je treba si uvedomit, ze delate 2 SQL prikazy tam, kde by nejspis stacil jeden. Rozhodne by nebylo dobre kopirovat 10.000 zaznamu tim, ze tenhle kod spusite ve smycce.

Zapis tabulka%ROWTYPE definuje objekt typu record se stejnou strukturou, jako zminovana tabulka - tj. pridate li nasledne do tabulky dalsi sloupecek, rozsiri se i tento record. Zmenite-li datovy typ, nebo velikost nejakeho sloupecku, zmeni se i pole.

Citovat příspěvek

 

Re: Jak získat INSERT text pro záznam/y (Oracle)?

Autor: RomanZ

12:44:57 26.08.2011

Možná nerozumím otázce.

Nemusíš vkládat všechny sloupce. Vkládej jen ty, které mají smysl:

INSERT INTO tabulka (sloupec1, sloupec3) VALUES (hodnota1, hodnota3)

Takto můžeš mít tabulku se sto sloupci a psát insert, který plní jen dva. Ostatní sloupce se mehou plnit defaultní hodnotou (lze nastavit při vytváření tabulky tam, kde tabulce definuješ sloupce).

Citovat příspěvek

 

Jak získat INSERT text pro záznam/y (Oracle)?

Autor: Bojový commandos pejsek

9:23:02 26.08.2011

Ahoj,
můj dotaz je vcelku jednouduchý - často potřebuji insertnout něco do tabulky, co má hafo sloupců (často stejné hodnoty pro již existující řádky)
a napsat takový insert je dost náročené (řekněme s 85ti sloupci). Co by se mi líbilo by byla funkce/či pseudosloupce (to určitě neexistuje) v tabulce,
která bych poskytl dejmetomu ROWID nebo primární klíč v tabulce a ona by mi vrátila INSERT text. Příklad:

create tableT(X NUMBER PRIMARY KEY, Y VARCHAR2); INSERT INTO tableT VALUES(666,'d'); COMMIT;

A po té hledám nějakou takovouto funkci:

SELECT dbms_neco.fce_neco('tableT',666) FROM DUAL;

A návrat bude text:
INSERT INTO tableT VALUES(666,'d');

Samozřejmě tohle je moje představa, může to vypadat jinak a spokojím se - nicméně chtěl bych v Oracle něco co mi ze záznamu udělá INSERT
(jako třeba v SQL Developeru/Toadu, když dam export a vyberu jako typ INSERTY)
-----------
Možnosti, které znám a neuspokoují mne:
a) Řádek smazat ;) - a najít si to ve FLASHBACK/UNDO transakcích - funguje ale je to drbání si koulí přes hlavu
b) Napsat si tuto funkci sám - umím, ale pevně věřím, že ORCL již něco takového má..

Diky.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: