Keresés

Részletes keresés

F1DO Creative Commons License 2014.10.17 0 0 5135

Sziasztok,

 

Ötletet, tanácsot, útbaigazítást szeretnék kérni a következő dologgal kapcsolatban:

adott egy view, ami favágó módon az alábbi - két eltérő elem kivételével többszörösen, sok helyen ugyanazt a szerkezetet tartalmazza: (ez csak egy részlete aview-nak)

 

SELECT azonos_oszlop_1,

             azonos_oszlop_2,

             VÁLTOZÓ_OSZLOP,

            azonos_számítási_művelet

FROM azonos_tábla
WHERE VÁLTOZÓ FELTÉTEL

     AND azonos_feltétel
GROUP BY azonos_oszlop_1

 

UNION ALL

 

SELECT azonos_oszlop_1,

             azonos_oszlop_2,

             VÁLTOZÓ_OSZLOP,

            azonos_számítási_művelet

FROM azonos_tábla
WHERE VÁLTOZÓ FELTÉTEL

     AND azonos_feltétel
GROUP BY azonos_oszlop_1

 

UNION ALL

 

SELECT azonos_oszlop_1,

             azonos_oszlop_2,

             VÁLTOZÓ_OSZLOP,

            azonos_számítási_művelet

FROM azonos_tábla
WHERE VÁLTOZÓ FELTÉTEL

     AND azonos_feltétel
GROUP BY azonos_oszlop_1

 

 

A kérdés az, hogy függvény alkalmazásával megoldható lenne, hogy a függvény bemenő paraméterei legyenek pl változóba téve VÁLTOZÓ_OSZLOP és VÁLTOZÓ_FELTÉTEL?

dorog.zultan Creative Commons License 2014.10.13 0 0 5134

Szia, nincs mit, örülök, hogy jó lett! :)

Előzmény: spiler0078 (5127)
spiler0078 Creative Commons License 2014.10.13 0 0 5133

Igen, ez is jó!!!!

 

Csak te máshogy fűzted. Én meg már annyi verziót próbáltam, hogy tutkó elírtam valamit és azért nem működött!

 

:)

 

köszi!

Spiler

Előzmény: halaloszto (5125)
halaloszto Creative Commons License 2014.10.13 0 0 5132

na azért :-)

Előzmény: spiler0078 (5131)
spiler0078 Creative Commons License 2014.10.13 0 0 5131

Okés. Leesett....

 

Nem értettem, hogy miért így hívod meg a ',Trunc(sysdate),' -et...

Aztán rájöttem, hogy benéztem a string határokat....

 

Szóval egy egyszerű összefűzés az egész...

Most már értem is :) :)

 

köszi!

Előzmény: halaloszto (5130)
halaloszto Creative Commons License 2014.10.13 0 0 5130

"Bár ezt nem teljesen értem"

 

most akkor érted vagy sem? nem lehet csak úgy elsunnyogni.

 

Vajk

Előzmény: spiler0078 (5129)
spiler0078 Creative Commons License 2014.10.13 0 0 5129

Bocsánat, akkor átsiklottam fölötte.

 

Neked is köszönöm mint mindenkinek, mert sokat segítettél!!!!!

 

 

Még egyszer köszi!

Előzmény: halaloszto (5128)
halaloszto Creative Commons License 2014.10.13 0 0 5128

pedig én leírtam

Előzmény: spiler0078 (5127)
spiler0078 Creative Commons License 2014.10.13 0 0 5127

Szia dorog.zultan!

 

Igen, a te megoldásod működik!!!! :)

Köszönöm a segítséget.

 

Bár ezt nem teljesen értem, hogy miért nem elég csak összefűzni, mint a változókat és a page itemeket. Na mind1.

 

Szóval ez a teljesen jó megoldás:

 

sqlp1:='INSERT INTO '||boltnev||' (meboazon,meusazon,mefelvdate,meveazon,meteazon,memenny)

VALUES (' || valt4 || ',' || vusazon || ', TRUNC(SYSDATE),' || :P6_XVEVO2 || ',' || :P6_XTERMEK2 || ',' || :P6_XMENNY || ')';

 

Még egyszer köszönöm mindenkinek a segítséget, szerintem elég keményen kiveséztük a problémát....

 

spiler

Előzmény: dorog.zultan (5126)
dorog.zultan Creative Commons License 2014.10.13 0 0 5126

így biztosan működik, kipróbáltam:
... vusazon || ',TRUNC(SYSDATE),' || :P6_XVEVO2 ...

Előzmény: halaloszto (5125)
halaloszto Creative Commons License 2014.10.13 0 0 5125

... vusazon || ',' || TRUNC(SYSDATE) || ',' || :P6_XVEVO2 ... helyett a 

 

ez azert nem jo, mert behelyettesites utan ez lesz belole:

 

... 1232423,2014-Október-13 00:00:00, 12312324

 

és ezt nem fogja megenni. ha ezt irna:

 

... vusazon || ',''' || TRUNC(SYSDATE) || ''',' || :P6_XVEVO2 ... helyett a 

 

akkor ez lenne belole:

 

... 1232423,'2014-Október-13 00:00:00', 12312324

 

es ennek van eselye mukodni, de nem elegans

 

Vajk

Előzmény: dorog.zultan (5124)
dorog.zultan Creative Commons License 2014.10.13 0 0 5124

A trunc(sysdate)-t nem kell "előre" végrehajtani, csak a execute immediate során,
ezért a

           ... vusazon || ',' || TRUNC(SYSDATE) || ',' || :P6_XVEVO2 ... helyett a
           ... vusazon || ',TRUNC(SYSDATE),' || :P6_XVEVO2 ...             lesz jó.

 

Az execute immediate-ben futtatott string így néz ki:
INSERT INTO EU_MEGR_B02 (meboazon,meusazon,mefelvdate,meveazon,meteazon,memenny)
VALUES (1,2,TRUNC(SYSDATE),3,4,5)

Előzmény: halaloszto (5123)
halaloszto Creative Commons License 2014.10.13 0 0 5123

megen 15 perccel utannad . . . 

tul sok dolgot csinalok egyszerre

Előzmény: dorog.zultan (5121)
halaloszto Creative Commons License 2014.10.13 0 0 5122

sqlp1:='INSERT INTO ' || boltnev || ' (meboazon,meusazon,mefelvdate,meveazon,meteazon,memenny)
VALUES (' || valt4 || ',' || vusazon || ',' || TRUNC(SYSDATE,''DD'') || ',' || :P6_XVEVO2 || ',' || :P6_XTERMEK2 || ',' || :P6_XMENNY || ')';

 

Ezt asszem megfejtettem. Ezzel az a helyzet, hogy itt a trunc az idezojelen kivul van. Egyreszt emiatt szimpla karom kell a dd-hez. De pluszban igy az tortenik, hogy eloall a levagott datum, az stringge alakul az nls beallitasoknak megfeleloen, es ez a string konkatenalodik be az insert statement-be. Nem lesz korulotte karom, es egyebkent sem egeszseges implicit string-datum konverziora kenyszerinteni az insertet.

 

Ez jo kell legyen:

sql:='insert into table t (datum_mezo) values (trunc(sysdate))';

 

Ez is, de ilyet nem irnek:

sql:='insert into table t (datum_mezo) values ('''||trunc(sysdate))||'''';

 

 

Vajk

Előzmény: givons2 (5113)
dorog.zultan Creative Commons License 2014.10.13 0 0 5121

Szia!

 

A sysdate-t bele kell tenni a végrehajtandó string-be, ez így szerintem már jó lesz:

 

sqlp1:='INSERT INTO '||boltnev||' (meboazon,meusazon,mefelvdate,meveazon,meteazon,memenny)

VALUES (' || valt4 || ',' || vusazon || ', TRUNC(SYSDATE),' || :P6_XVEVO2 || ',' || :P6_XTERMEK2 || ',' || :P6_XMENNY || ')';

 

üdv

Előzmény: spiler0078 (5112)
halaloszto Creative Commons License 2014.10.13 0 0 5120

page paraméterek. a lapon vannak input mezők, amik jó sok réteg után a logikának megírt pl/sql-ben így hivatkozhatóak. külön vicces hogy van vagy 4 féle szintaxis amivel hivatkozni lehet, van ahol így van ahol úgy.

 

Vajk

Előzmény: NevemTeve (5119)
NevemTeve Creative Commons License 2014.10.13 0 0 5119

És honnan jönnek a bindváltozók (:P6_XVEVO2, :P6_XTERMEK2, :P6_XMENNY)?

Előzmény: halaloszto (5118)
halaloszto Creative Commons License 2014.10.13 0 0 5118

Az APEX egy webes fejlesztoeszkoz webes idevel es  rad hozzaallassal. Szinte pure pl-sql.

 

Vajk

Előzmény: NevemTeve (5117)
NevemTeve Creative Commons License 2014.10.13 0 0 5117

Most kellene átmenni a p***.hu-ra, mert a formázatlan HTML-ben nem lehet forráskódot átlátni... (mondjuk én már ott elakadtam, hogy nem tudom, mi az az APEX; ha mondjuk Pro*C vagy OCI lenne, talán tudnék mondani valamit)

halaloszto Creative Commons License 2014.10.13 -1 0 5116

szerintem macskakorombe irtad a DD-t. a peldaban az nem macskakorom, hanem ketto darab aposztrof. oracle-ban a string az aposztrofban van: 'alma' . ha a stringbe akarsz aposztrofot irni, akkor ugy kell escapeelni hogy duplan irod. 'a gyors munka erdekeben brazil ''gepsort'' alkalmaztunk'

 

Vajk

Előzmény: spiler0078 (5114)
givons2 Creative Commons License 2014.10.13 0 0 5115

 A D elé és mögé két egyszeres idézőjelet tettél ?

Nálam ez lefutott.

 

SQL> declare
    sqlp1 VARCHAR2(32000);
begin
   sqlp1:='INSERT INTO EU_MEGR_B02 (meazon, meboazon,meusazon,mefelvdate,meveazon,meteazon,memenny) VALUES (2,2,2,TRUNC(SYSDATE,''DD''), 2, 2, 500)';
   execute immediate sqlp1;
end;  2    3    4    5    6
  7  /

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

SQL> select * from EU_MEGR_B02
  2  /

    MEAZON   MEBOAZON   MEUSAZON MEFELVDAT   MEVEAZON   METEAZON MERAZON                 MEMENNY
---------- ---------- ---------- --------- ---------- ---------- -------------------- ----------
         2          2          2 12-OCT-14          2          2                             500

SQL>

Előzmény: spiler0078 (5114)
spiler0078 Creative Commons License 2014.10.13 0 0 5114

Szia!

 

Hibával elszáll.

  • ORA-06550: line 17, column 64: PLS-00103: Encountered the symbol "DD" when expecting one of the following: ) , * & = - + < / > at in is mod remainder not rem=> <an exponent (**)> <> or != or ~= >= <= <> and or like like2 like4 likec between || multiset member submultiset The symbol ", was inserted before "DD" to continue.

 

Előzmény: givons2 (5113)
givons2 Creative Commons License 2014.10.12 0 0 5113

És ez ?

 

 

sqlp1:='INSERT INTO ' || boltnev || ' (meboazon,meusazon,mefelvdate,meveazon,meteazon,memenny)
VALUES (' || valt4 || ',' || vusazon || ',' || TRUNC(SYSDATE,''DD'') || ',' || :P6_XVEVO2 || ',' || :P6_XTERMEK2 || ',' || :P6_XMENNY || ')';

 

a DD előtt és után meg van kettőzve a szimpla időjel...

Előzmény: spiler0078 (5112)
spiler0078 Creative Commons License 2014.10.12 0 0 5112

Szia!

 

Itt a tábla felépítése

 

CREATE TABLE "EU_MEGR_B02"
( "MEAZON" NUMBER(10,0),
"MEBOAZON" NUMBER(10,0),
"MEUSAZON" NUMBER(10,0),
"MEFELVDATE" DATE,
"MEVEAZON" NUMBER(10,0),
"METEAZON" NUMBER(10,0),
"MERAZON" VARCHAR2(20),
"MEMENNY" NUMBER(10,0),
CONSTRAINT "EU_MEGR_B02_PK" PRIMARY KEY ("MEAZON")
USING INDEX ENABLE
)
/

CREATE OR REPLACE TRIGGER "BI_EU_MEGR_B02"
before insert on "EU_MEGR_B02"
for each row
begin
if :NEW."MEAZON" is null then
select "EU_MEGR_B02_SEQ".nextval into :NEW."MEAZON" from sys.dual;
end if;
end;

/
ALTER TRIGGER "BI_EU_MEGR_B02" ENABLE
/

 

köszi!

 

spiler

Előzmény: dorog.zultan (5111)
dorog.zultan Creative Commons License 2014.10.11 0 0 5111

Tedd be ide, vagy küldd el a tábla sql-jét, így látatlanban elég nehéz kitalálni mi lehet a gond.

Előzmény: spiler0078 (5110)
spiler0078 Creative Commons License 2014.10.10 0 0 5110

Szia!

 

Szerintem a sqlp1 string összerakásánál kell valahogy másképp a dátumot befűzni.

Abból gondolom, hogy ha kiszedem a mefelvdate mező kitöltését a TRUNC(SYSDATE)-el akkor kitölti a sorokat.

 

tehát ez így müxik ha nincs dátum feltöltés /de hát az is kéne valahogy.../:

 

sqlp1:='INSERT INTO ' || boltnev || ' (meboazon,meusazon,meveazon,meteazon,memenny)
VALUES (' || valt4 || ',' || vusazon || ',' || :P6_XVEVO2 || ',' || :P6_XTERMEK2 || ',' || :P6_XMENNY || ')';

 

EXECUTE IMMEDIATE sqlp1;

 

Ha viszont benne van a mefelvdate feltöltése TRUNC(SYSDATE)-el akkor már nem fut le.

 

Létrehoztam egy egyszerű pl sql blokkot amiben csak egy egyszerű INSERT van az lefut...

 

INSERT INTO EU_MEGR_B02 (mefelvdate) VALUES (TRUNC(SYSDATE)); -- tehát itt működik a TRUNC(SYSDATE)

 

 

Előre is köszi a segítségeket, no meg az eddigit is :)

 

spiler

Előzmény: dorog.zultan (5106)
halaloszto Creative Commons License 2014.10.10 0 0 5109

sysdate elobb volt mint fuggvenyeg egyaltalan. ezert ilyen a szinaxisa.


Vajk

Előzmény: tanárnéni kedvence (5108)
tanárnéni kedvence Creative Commons License 2014.10.10 0 0 5108

A SYSDATE az bizony függvény, de az Oracle eléggé következetlen abban, hogy mikor kell/szabad zárójelezni a különböző függvényeket.

Előzmény: halaloszto (5100)
NevemTeve Creative Commons License 2014.10.10 0 0 5107

esetleg próbálj sk konverálni stringre: to_char (sysdate, 'YYMMDD')

Előzmény: spiler0078 (5105)
dorog.zultan Creative Commons License 2014.10.10 0 0 5106

Valami formátum probléma lesz, hasonlítsd össze a mefelvdate deklarációját és a TRUNC(SYSDATE) eredményét.

Előzmény: spiler0078 (5105)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!