Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: John 07. 07. 2016, 09:19:41
-
Dobrý den všem,
už jednou jste mi zde moc pomohli, tak se na Vás opět obracím s problémem. Mám problém s vyřešením jednoho prac. úkolu. Díky tomu, že se v tom nepohybuji a je to jen jednorázový úkol, který je potřeba v brzkém čase vyřešit, tak se obracím na Vás.
Jedná se o toto: 1.: Vytvořit web. službu (proceduru), která dovolí nahrát soubor ve formátu .csv. („připravené“) 2.: Dále vytvořit další (navazující) proceduru, která po nahrání daného .csv, toto csv rozparsuje (vždy stejná struktura) a vloží do připravené tabulky na serveru. Věřím, že se pro se bude jednat o banalitu. Bohužel se teprve rozkoukávám a rychlé splnění je nutné. Předem Vám děkuji za případnou pomoc. Jedná se mi hlavně o to rozparsování.
1.:
procedure upload_csv is
begin
htp.htmlOpen;
htp.headOpen;
htp.p('<meta charset="UTF-8">');
htp.title('Odeslání souboru');
htp.headClose;
htp.bodyOpen;
htp.p('<FORM ACTION="test.zpracuj_upload_csv" METHOD="post" ENCTYPE="multipart/form-data">');
htp.p('<INPUT TYPE="file" NAME="soubor" SIZE="50">');
htp.p('<INPUT TYPE="submit" VALUE="Ulož">');
htp.p('</FORM>');
htp.bodyClose;
htp.htmlClose;
end;
2.: Zde jsem ztracen a nevím, jak tuto proceduru uchopit... Našel jsem si např. toto: https://slobaray.com/2014/05/28/loading-csv-files-into-oracle-tables-using-plsql/ , ale o moc moudřejší nejsem.
Struktura .csv, vždy bude: ID (varchar2 – díky číselné řadě a písmennému označení); DatumPočátku (date – zde by měla být i kontrola na validnost data); DatumKonce (date) – data prozatím null * možná se ani vyplňovat nebudou; DatumVložení (date – aktuální datum); Poznámka (varchar2). Vše odděleno „;“
Bohužel nemohu použít žádné jiné jazyky (ruby, python, java,...) a dané csv musí být rozparsováno přímo v proceduře (pl/sql).
Nemohl by někdo napsat nějaký mustr, či na něj poslat odkaz, abych se ho mohl chytit?
Ještě jednou děkuji za případnou pomoc.
-
Neuvedl jsi, v cem je problem (umis plsql, neumis plsql?), jake jsou naroky na vykon apod. trivialni postup je parsovat vstup podle oddelovacu (instr, substr), tim ziskat radky a na nich jednotlive sloupce, ty validovat a ukladat do databaze.
-
To lanyz: Přiznám se, bohužel s PL/SQL ještě neumím. Chtěl a měl bych se naučit, ale toto je na mě v tuto chvíli asi moc.
Nároky na výkon prozatím neřešíme. Jedná se o jednorázové nahrávání csv souboru jednou za čas.
-
Dobrý den všem,
už jednou jste mi zde moc pomohli, tak se na Vás opět obracím s problémem. Mám problém s vyřešením jednoho prac. úkolu. Díky tomu, že se v tom nepohybuji a je to jen jednorázový úkol, který je potřeba v brzkém čase vyřešit, tak se obracím na Vás.
Jedná se o toto: 1.: Vytvořit web. službu (proceduru), která dovolí nahrát soubor ve formátu .csv. („připravené“) 2.: Dále vytvořit další (navazující) proceduru, která po nahrání daného .csv, toto csv rozparsuje (vždy stejná struktura) a vloží do připravené tabulky na serveru. Věřím, že se pro se bude jednat o banalitu. Bohužel se teprve rozkoukávám a rychlé splnění je nutné. Předem Vám děkuji za případnou pomoc. Jedná se mi hlavně o to rozparsování.
1.:
procedure upload_csv is
begin
htp.htmlOpen;
htp.headOpen;
htp.p('<meta charset="UTF-8">');
htp.title('Odeslání souboru');
htp.headClose;
htp.bodyOpen;
htp.p('<FORM ACTION="test.zpracuj_upload_csv" METHOD="post" ENCTYPE="multipart/form-data">');
htp.p('<INPUT TYPE="file" NAME="soubor" SIZE="50">');
htp.p('<INPUT TYPE="submit" VALUE="Ulož">');
htp.p('</FORM>');
htp.bodyClose;
htp.htmlClose;
end;
2.: Zde jsem ztracen a nevím, jak tuto proceduru uchopit... Našel jsem si např. toto: https://slobaray.com/2014/05/28/loading-csv-files-into-oracle-tables-using-plsql/ , ale o moc moudřejší nejsem.
Struktura .csv, vždy bude: ID (varchar2 – díky číselné řadě a písmennému označení); DatumPočátku (date – zde by měla být i kontrola na validnost data); DatumKonce (date) – data prozatím null * možná se ani vyplňovat nebudou; DatumVložení (date – aktuální datum); Poznámka (varchar2). Vše odděleno „;“
Bohužel nemohu použít žádné jiné jazyky (ruby, python, java,...) a dané csv musí být rozparsováno přímo v proceduře (pl/sql).
Nemohl by někdo napsat nějaký mustr, či na něj poslat odkaz, abych se ho mohl chytit?
Ještě jednou děkuji za případnou pomoc.
Oracle má externí tabulky použijet něco takového CREATE TABLE roster_data (
student_no CHAR(5),
name CHAR(20),
grade CHAR(2))
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir
ACCESS PARAMETERS (FIELDS TERMINATED BY ',')
LOCATION ('info.dat'));
a v dokumentaci k db heldejte heslo EXTERNAL_TBL
-
A zde podrobněji rozepsané https://oracle-base.com/articles/9i/external-tables-9i
-
To lanyz: Přiznám se, bohužel s PL/SQL ještě neumím. Chtěl a měl bych se naučit, ale toto je na mě v tuto chvíli asi moc.
Nároky na výkon prozatím neřešíme. Jedná se o jednorázové nahrávání csv souboru jednou za čas.
Tak to je trochu blocker pokud plati podminka, ze to musi byt v PL/SQL, To se asi budes muset zaklady naucit. Pokud to nemusi byt v PL/SQL, tak je samozrejme spousta jinych metod, na "jednorázové nahrávání csv souboru jednou za čas" bych pouzil sqlloader, ale zalezi na tom, jestli to musi bezet na webu, co se kde muze nainstalovat, jak se maji resit pripadne chyby v datech atd.
-
To Ivan Nový: Děkuji, mrknu na to, jestli je to vhodné pro naše řešení.
To lanyz: Úplné základy trochu zvládám, ale toto spojování procedur ještě ne. Požadavek je opravdu jen PL/SQL, bez možnosti instalace dalších rozšíření DB. "sqlloader" běžně využívám, ale toto má být webová aplikace přístupná běžným zaměstnancům (ne mně), do které se např.: 1x za měsíc nahraje dané csv a dále jak jsem popisoval (automat. rozparsování a vložení do připravené tabulky).
-
To Ivan Nový: Děkuji, mrknu na to, jestli je to vhodné pro naše řešení.
To lanyz: Úplné základy trochu zvládám, ale toto spojování procedur ještě ne. Požadavek je opravdu jen PL/SQL, bez možnosti instalace dalších rozšíření DB. "sqlloader" běžně využívám, ale toto má být webová aplikace přístupná běžným zaměstnancům (ne mně), do které se např.: 1x za měsíc nahraje dané csv a dále jak jsem popisoval (automat. rozparsování a vložení do připravené tabulky).
Mělo by to fungovat tak, že soubor nahrajete do určeného adresáře, a tím se automaticky stane čitelným přes onu vytvořenou tabulku.
-
robit toto v SQL je ciste ZLO!
-
robit toto v SQL je ciste ZLO!
Máte-li ale rozsáhlý soubor dat, tak načíst to k tomu určeným SQL příkazem do databáze je často jediná schůdná cesta (MySQL LOAD DATA, Postgress COPY, Oracle EXTERNAL_TBL).
-
robit toto v SQL je ciste ZLO!
Máte-li ale rozsáhlý soubor dat, tak načíst to k tomu určeným SQL příkazem do databáze je často jediná schůdná cesta (MySQL LOAD DATA, Postgress COPY, Oracle EXTERNAL_TBL).
predpokladam ze ked tam chce nieco nahravat cez web, tak to nebudu 500MB CSV.
a ked uz nieco ladujem do DB, tak si chcem osetrit data uz na vstupe a nie cakat na DB error.
Bulk insertom sa daju veci celkom rychlo naladovat ak sa bavime aj o 10k+ riadkoch
-
robit toto v SQL je ciste ZLO!
Máte-li ale rozsáhlý soubor dat, tak načíst to k tomu určeným SQL příkazem do databáze je často jediná schůdná cesta (MySQL LOAD DATA, Postgress COPY, Oracle EXTERNAL_TBL).
predpokladam ze ked tam chce nieco nahravat cez web, tak to nebudu 500MB CSV.
a ked uz nieco ladujem do DB, tak si chcem osetrit data uz na vstupe a nie cakat na DB error.
Bulk insertom sa daju veci celkom rychlo naladovat ak sa bavime aj o 10k+ riadkoch
Ten soubor si vygenerujete z ošetřených dat.
-
Hmm, nevidím v tom žádný problém v prostředí, které znám (mysql, mssql, php).
Řešení 1. webový formulář, natažení csv, skript v PHP rozparseruje, zpracuje a uloží do databáze.
Řešení 2. pokud to má fungovat automatizovaně, tak vyloučit lidský faktor, což je u csv exportů běžnější.
Tady spíš cítím, že byl zadavateli slíben rozsah schopností a znalostí, které nejsou realitou... Snad se dílo zdaří, ale je to dost hazard do toho jít s těmito výchozími podmínkami...
-
To Ivan Nový, bacil, gl: Děkuju za názory.
To PepaN: Také děkuji za názor. Nikomu jsem nic nesliboval. Pracoval jsem na jiné práci a toto byl pouze požadavek, jestli bych to nemohl zkusit vyřešit. Řekl jsem, že to zkusím, ale že nic neslibuji.
Lidský faktor tam musí být pouze při nahrávání, zbytek by se mělo obstarat samo.
-
Dobrý den všem,
už jednou jste mi zde moc pomohli, tak se na Vás opět obracím s problémem. Mám problém s vyřešením jednoho prac. úkolu. Díky tomu, že se v tom nepohybuji a je to jen jednorázový úkol, který je potřeba v brzkém čase vyřešit, tak se obracím na Vás.
Jedná se o toto: 1.: Vytvořit web. službu (proceduru), která dovolí nahrát soubor ve formátu .csv. („připravené“) 2.: Dále vytvořit další (navazující) proceduru, která po nahrání daného .csv, toto csv rozparsuje (vždy stejná struktura) a vloží do připravené tabulky na serveru. Věřím, že se pro se bude jednat o banalitu. Bohužel se teprve rozkoukávám a rychlé splnění je nutné. Předem Vám děkuji za případnou pomoc. Jedná se mi hlavně o to rozparsování.
1.:
procedure upload_csv is
begin
htp.htmlOpen;
htp.headOpen;
htp.p('<meta charset="UTF-8">');
htp.title('Odeslání souboru');
htp.headClose;
htp.bodyOpen;
htp.p('<FORM ACTION="test.zpracuj_upload_csv" METHOD="post" ENCTYPE="multipart/form-data">');
htp.p('<INPUT TYPE="file" NAME="soubor" SIZE="50">');
htp.p('<INPUT TYPE="submit" VALUE="Ulož">');
htp.p('</FORM>');
htp.bodyClose;
htp.htmlClose;
end;
2.: Zde jsem ztracen a nevím, jak tuto proceduru uchopit... Našel jsem si např. toto: https://slobaray.com/2014/05/28/loading-csv-files-into-oracle-tables-using-plsql/ , ale o moc moudřejší nejsem.
Struktura .csv, vždy bude: ID (varchar2 – díky číselné řadě a písmennému označení); DatumPočátku (date – zde by měla být i kontrola na validnost data); DatumKonce (date) – data prozatím null * možná se ani vyplňovat nebudou; DatumVložení (date – aktuální datum); Poznámka (varchar2). Vše odděleno „;“
Bohužel nemohu použít žádné jiné jazyky (ruby, python, java,...) a dané csv musí být rozparsováno přímo v proceduře (pl/sql).
Nemohl by někdo napsat nějaký mustr, či na něj poslat odkaz, abych se ho mohl chytit?
Ještě jednou děkuji za případnou pomoc.
Oracle má externí tabulky použijet něco takového CREATE TABLE roster_data (
student_no CHAR(5),
name CHAR(20),
grade CHAR(2))
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir
ACCESS PARAMETERS (FIELDS TERMINATED BY ',')
LOCATION ('info.dat'));
a v dokumentaci k db heldejte heslo EXTERNAL_TBL
csv umi i carky ktere jsou soucasti bunky, ne oddelovace viz. https://cs.wikipedia.org/wiki/CSV
ujiste te se, ze tam nic takoveho neni, jinak ten radek bude rozhozeny
pokud to je politicky pruchozi (dokazu si predstavit, ze nemusi byt), tak k pl/sql pridejte i jiny jazyk (groovy, python, ...) tam uz byste mohl pouzit knihovny, ktere parsovani csv souboru resi a nemusite se starat o carky uprostred bunky.
-
Dobrý den všem.
Po nějaké době, kdy byl čas na "důležitější" věci, se opět vracím k tomuto tématu. Opravu děkuji všem za rady/podněty, které jsem si prošel a zkonzultoval. Ale přesto bych se na Vás ještě jednou obrátil, jestli byste mi nedokázali pomoci.
Když se lehce vrátím, tak:
"EXTERNAL TABLES" by mohlo být jedno z řešení, jen kdyby byl přístupný filesystém, což bohužel není. Co jsem ale naopak zjistil, tak je možné využít JavaScript.
Tzn. možné řešení jsou pomocí:
-PL/SQL;
-JavaScriptu.
A v čem mám tedy problém? Nalezeným řešeným příkladům jakž takž rozumím. První část bych také měl připravenou, ale propojit ji s druhou, ke které sice příklady jsou, ale řeší jen možnost uploadu souboru přímo z PC, neřeší možnost propojení z web službou.
Pro zopakování se mi jedná o (z pohledu uživatele): "Na stránce kliknu a vyberu CSV soubor a odešlu ho ke zpracování (viz. 1. procedura) - 2. procedura soubor automaticky převezme a rozparsuje do předem dané tabulky - uživatel vidí svá data v DB."
Pokud by byl někdo schopen/ochoten pomoc, tak bych byl moc vděčný. Děkuji.
S pozdravem
John
-
!OPRAVA!
Je možné použít Javu.
Dobrý den všem.
Po nějaké době, kdy byl čas na "důležitější" věci, se opět vracím k tomuto tématu. Opravu děkuji všem za rady/podněty, které jsem si prošel a zkonzultoval. Ale přesto bych se na Vás ještě jednou obrátil, jestli byste mi nedokázali pomoci.
Když se lehce vrátím, tak:
"EXTERNAL TABLES" by mohlo být jedno z řešení, jen kdyby byl přístupný filesystém, což bohužel není. Co jsem ale naopak zjistil, tak je možné využít JavaScript.
Tzn. možné řešení jsou pomocí:
-PL/SQL;
-JavaScriptu.
A v čem mám tedy problém? Nalezeným řešeným příkladům jakž takž rozumím. První část bych také měl připravenou, ale propojit ji s druhou, ke které sice příklady jsou, ale řeší jen možnost uploadu souboru přímo z PC, neřeší možnost propojení z web službou.
Pro zopakování se mi jedná o (z pohledu uživatele): "Na stránce kliknu a vyberu CSV soubor a odešlu ho ke zpracování (viz. 1. procedura) - 2. procedura soubor automaticky převezme a rozparsuje do předem dané tabulky - uživatel vidí svá data v DB."
Pokud by byl někdo schopen/ochoten pomoc, tak bych byl moc vděčný. Děkuji.
S pozdravem
John
-
Jak koukám, je to pracovní úkol - takže bych čekal, že společnost se plácne přes kapsu a poskytne něco málo financí na konzultace nebo něco více financí na napsání udělátka nebo celou hromadu na naplacení zahraniční konzultační firmy pro projekt na 6 měsíců...
Není něco z toho cesta?
-
!OPRAVA!
Je možné použít Javu.
A opet se tu vnucuje otazka - umis Javu? Asi neprekvapi, ze odpoved je docela zasadni z hlediska dalsiho postupu, respektive moznosti profitovat z teto nove informace.
-
Dobrý den všem.
Po nějaké době, kdy byl čas na "důležitější" věci, se opět vracím k tomuto tématu. Opravu děkuji všem za rady/podněty, které jsem si prošel a zkonzultoval. Ale přesto bych se na Vás ještě jednou obrátil, jestli byste mi nedokázali pomoci.
Když se lehce vrátím, tak:
"EXTERNAL TABLES" by mohlo být jedno z řešení, jen kdyby byl přístupný filesystém, což bohužel není. Co jsem ale naopak zjistil, tak je možné využít JavaScript.
Tzn. možné řešení jsou pomocí:
-PL/SQL;
-JavaScriptu.
A v čem mám tedy problém? Nalezeným řešeným příkladům jakž takž rozumím. První část bych také měl připravenou, ale propojit ji s druhou, ke které sice příklady jsou, ale řeší jen možnost uploadu souboru přímo z PC, neřeší možnost propojení z web službou.
Pro zopakování se mi jedná o (z pohledu uživatele): "Na stránce kliknu a vyberu CSV soubor a odešlu ho ke zpracování (viz. 1. procedura) - 2. procedura soubor automaticky převezme a rozparsuje do předem dané tabulky - uživatel vidí svá data v DB."
Pokud by byl někdo schopen/ochoten pomoc, tak bych byl moc vděčný. Děkuji.
S pozdravem
John
Nápověda zde https://oracle-base.com/articles/misc/xml-over-http, je to pro xml, ale v csv je to o to jednodušší.a zajímavé je taky toto https://github.com/mortenbra/alexandria-plsql-utils