Keresés

Részletes keresés

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)
spiler0078 Creative Commons License 2014.10.10 0 0 5105

Szia!

 

Köszi a segítséget! Működik!

Viszont most valami miatt a TRUNC(SYSDATE) -et nem eszi meg.

Eddig nem volt ilyen gondom, de most nem tudom miért nem fogadja el....

 

Azt mondja ORA-01898: túl sok számpontosság megadás.

Szerinted mi lehet a bibi?

 

 

Köszi

spiler

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

Szia, 

 

próbáld meg így:

 

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 (5101)
spiler0078 Creative Commons License 2014.10.10 0 0 5103

Szia!

 

ORACLE APEX PL SQL Anonymus Block-ban kéne hogy fusson, de hibával elszáll...


Azt szeretném, hogy egy SQL scriptben ki tudjam olvasni a táblanevet egy változóból.

 

pl:

INSERT INTO &táblaneve (mezo1,mezo2) VALUES (valtozo1,valtozo2);

 

 

 

 

köszi

spiler

Előzmény: NevemTeve (5102)
NevemTeve Creative Commons License 2014.10.10 0 0 5102

Ennek Sql*Plus-ban kellene mennie, vagy esetleg valamilyen programba van beágyazva (Pro*C, pl)?

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

Szia!

 

A valt4 és a vusazon két változó.

Az első egy szám: boltazonosító; a második is szám és az az ügyfél azonosító.

A :P6_XVEVO2,:P6_XTERMEK2 select list-ek.

 

kimásoltam az egész scriptet, hátha így érthetőbb:

Amit meg szeretnék oldani, az az hogy egy változóban rakom össze a táblák nevét ahova be akarok szúrni adatokat... 

 

DECLARE
  valt4 NUMBER;
  boltnev VARCHAR2(255);
  vusazon NUMBER;
  sqlp1 varchar2(1000);

 

BEGIN
  vusazon:=GET_USER_ID(:APP_USER);  -- ez a függvény a bejelentkezett felhasználó id-t adja visza

  valt4:=GET_USER_BOLT(:APP_USER);  -- ez pedig a hozzá kapcsolt bolt id-t
 

  SELECT botanev INTO boltnev FROM eu_bolt WHERE boazon=valt4;

 

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

  EXECUTE IMMEDIATE sqlp1;

END;

 

 

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

mi az a valtnev meg vusazon? ha az ket valtozo, akkor vagy azok is kettospontos bind valtozok kellene legyenek, vagy azokat is be kellene konkatenalni. (utobbi erosen ellenjavallt, lasd sql injection attack)

 

az execute-kor meg kellene adni a bind valtozok ertekeit, kulonben hogyan hajtsa vegre?

 

execute immediate sqlp1 using 'pisti','vasszog',3;

 

aprosagok: ez plsql? a kapcsoszarojel oda tuti nem kell. a sysdate az nem fuggveny, nem kell utanna ()

 

Vajk

 

 

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

Sziasztok!

 

Szeretnék egy kis segítséget kérni. 

Egy egyszerű insertálást szeretnék egy adott táblába végrehajtani úgy hogy a tábla nevét előtte egy változóban ( boltnev  VARCHAR2(255);) rakom össze, de mindig azzal a hibával száll el, hogy nem megengedett tábla név.

Hogyan tudom apexben egy pl sql anonymus block-ban (after submitban) ezt összerakni?

 

Ez a kódom:

 

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

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

EXECUTE IMMEDIATE sqlp1;

 

egy másik kóddal pedig annyit ír, hogy "hiányzik a csukó zárójel":

 

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

EXECUTE IMMEDIATE sqlp1;

 

Tudna valaki segíteni, hogy mit rontok el

köszi

Spiler

halaloszto Creative Commons License 2014.10.09 0 0 5098

ugyanezt fogja csinálni az is, kíváncsi vagyok az eredményre, de meg leszek lepve ha gyorsabb.

 

Vajk

Előzmény: dorog.zultan (5097)
dorog.zultan Creative Commons License 2014.10.09 0 0 5097

Szia,

 

igen, nagyon macerás, és nagy adattömegnél lassú is.

A "DBMS_REDEFINITION"-t kipróbálom, köszönöm!

 

üdv

Előzmény: halaloszto (5096)
halaloszto Creative Commons License 2014.10.09 0 0 5096

nincs mas modszer. 

egyszerunek tunik: create table new as select from old ; drop old; rename new to old

valojaban az indexeket, constraintokat, foreign keyeket, grantokat meg a fene tudja meg mi mindent meg kell tartani, ami egesz maceras.

 

DBMS_REDEFINITION eleg regota van, ugyanezt csinalja, csak rendesen osszeszedtek mi mindenre kell figyelni es meg is csinalja neked.

 

Vajk

Előzmény: dorog.zultan (5095)

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