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)
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))||'''';
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.
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)
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'
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.
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;
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 ()
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)