[ORACLE] Insert query met de huidige datum

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Lennart_1337
  • Registratie: Juni 2004
  • Laatst online: 09-09 14:56
Ik zit met een basic probleempje maar de oplossingen die ik tegenkom kan ik niet toepassen en krijg ik niet aan de praat.

Ik wil een insert query uitvoeren met als één van values de huidige datum in de veld van het type date.

Als oplossing kom ik tegen:
code:
1
SELECT TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY HH:MI:SS') FROM dual;

Nu neem ik aan dat ik dit als subquery tussen de andere values moet zetten.

Dan wordt het zoiets, maar ik krijg het niet werkend.
code:
1
2
3
4
5
6
7
8
9
10
BEGIN
if :BC_KLANT.KLANT_NR is not null
    and :BC_WERKTYPE.WERKTYPE_NR is not null
    and :BC_MEDEWERKER.MEDEWERKER_NR is not null then
    
    insert into BC_OPDRACHT (KLANT_NR, STATUS, OPDRACHTDATUM)
    values (:BC_KLANT.KLANT_NR,  'NIEUW', (SELECT TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY HH:MI:SS') FROM dual;));
    
end if;
END;


Weten jullie wat er verkeerd gaat en wat wel de juiste syntax is?

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 14:40

Reptile209

- gers -

Ik wordt niet gehinderd door enige kennis van SQL, maar een paar logische vragen stellen kan ik wel. (rhyme not intended :) ) Welke foutmelding krijg je, of wat gebeurt met de oplossing die je nu hebt er en wat dàcht je dat er zou gebeuren?

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

probeer eens:

SQL:
1
2
insert into BC_OPDRACHT (KLANT_NR, STATUS, OPDRACHTDATUM)
    SELECT :BC_KLANT.KLANT_NR,  'NIEUW',  TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY HH:MI:SS') FROM dual;

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

sysdate is wat je zoekt

Who is John Galt?


Acties:
  • 0 Henk 'm!

  • Lennart_1337
  • Registratie: Juni 2004
  • Laatst online: 09-09 14:56
Ik had gehoopt dat ik een nieuwe record zou krijgen met de gegevens uit mijn oracle form, maar zover kom ik niet; hij loopt bij het compileren al vast.

De melding die ik krijg is:
code:
1
2
3
4
5
6
7
8
9
10
Symbol "SELECT" aangetroffen terwijl een van de volgende werd verwacht:
(-+ case mod new not null others <een ID>
<een scheidingsteken-ID tussen dubbele aanhalingstekens>
<een bindvariabele> avg count current excist max min prior
sql stddev sum variance execute forall merge time timestamp
interval date
<een stringtekstconstante met tekenspecificatie>
<een getal> <een SQL-string tussen enkele aanhalingstekens>
pipe
etc etc. (gaat nog enkele regels zo door)

Van deze melding word ik dus niet veel wijzer.

Edit:
Bedankt voor de info ik ben er nu mee aan de slag

[ Voor 4% gewijzigd door Lennart_1337 op 04-01-2011 22:29 ]


Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 11:02
Lennart_1337 schreef op dinsdag 04 januari 2011 @ 22:27:
Van deze melding word ik dus niet veel wijzer.
Waarom niet?

Maar doe je dat SELECTen uit 'dual' nou alleen omdat je die query ergens hebt gevonden, of heb je echt een tabel 'dual'? En je wilt iets in een veld van type date, en dan gebruik je TO_CHAR (die van een date een string/varchar maakt)? Ik ken Oracle verder niet (snel beetje documentatie gegoogeld), maar dat lijkt me vreemd/overbodig.

Acties:
  • 0 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 11-09 15:48
SQL:
1
2
    insert into BC_OPDRACHT (KLANT_NR, STATUS, OPDRACHTDATUM)
    values (:BC_KLANT.KLANT_NR,  'NIEUW', (SELECT TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY HH:MI:SS') FROM dual;));


Nu maak je een paar fouten:
1. Je hebt de volledige Query gekopieerd. Inclusief het teken voor het beeindigen van de query ( ; ). Deze moet je weglaten.
2. Je gaat nu een char reeks opslaan in een datum veld. Die TO_CHAR(datum, format) is niet nodig (resultaat is een string, niet een date ;) ). Zal in veel gevallen wel goed gaan, maar er is een (zeer kleine) kans dat Oracle het resultaat niet (weer) terug kan converteren naar een datum.

De oplossing is hierboven al gezegd: gebruik sysdate
SQL:
1
select sysdate from dual;


B.T.W. de dual 'tabel' is van Oracle en in veel gevallen is het niet nodig dat volledig te gebruiken (veelal alleen bij de losse select queries).
Je query zo er dus zo uit komen te zien:
SQL:
1
2
    insert into BC_OPDRACHT (KLANT_NR, STATUS, OPDRACHTDATUM)
    values (:BC_KLANT.KLANT_NR,  'NIEUW', sysdate);

let the past be the past.


Acties:
  • 0 Henk 'm!

  • Lennart_1337
  • Registratie: Juni 2004
  • Laatst online: 09-09 14:56
Janoz schreef op dinsdag 04 januari 2011 @ 22:25:
probeer eens:

SQL:
1
2
insert into BC_OPDRACHT (KLANT_NR, STATUS, OPDRACHTDATUM)
    SELECT :BC_KLANT.KLANT_NR,  'NIEUW',  TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY HH:MI:SS') FROM dual;
Dit lost de compilatie fouten op, maar in runtime gebeurt er niks.
Ik ben nu aan het uitzoeken hoe ik in runtime kan debuggen, ik krijg namelijk nergens foutmeldingen en de oracle forms debug modus is precies het zelfde als de normale runtime modus lijkt het wel, ik ga hier nog verder achteraan.

Acties:
  • 0 Henk 'm!

  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 27-06 13:00
Ik neem aan dat je kolom opdrachtdatum van het type date is?

Lees goed wat je probeert te inserten:
SQL:
1
TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY HH:MI:SS') FROM dual;


TO_CHAR levert een string op en een string is geen date :)

Wat jouw gekopieerde stukje code doet is de huidige datum (verkregen via de functie CURRENT_DATE) omzetten naar een string van het formaat DD-MON-YYYY HH:MI:SS.

Ik zou dus gewoon CURRENT_DATE inserten in die kolom ;)

Acties:
  • 0 Henk 'm!

  • Lennart_1337
  • Registratie: Juni 2004
  • Laatst online: 09-09 14:56
thx SPee en iedereen

Hier moet het mee gaan lukken:
SQL:
1
2
insert into BC_OPDRACHT (KLANT_NR, STATUS, OPDRACHTDATUM) 
    values (:BC_KLANT.KLANT_NR,  'NIEUW', sysdate);


Krijg in forms het nog niet helemaal werkend dus heb het even in SQL developer getest met een wat gewijzigd script:

SQL:
1
2
insert into BC_OPDRACHT (KLANT_NR, STATUS, OPDRACHTDATUM) 
    values ("1000",  'NIEUW', sysdate);

Dit werkt perfect!

Nu weet ik iig. dat ik een werkend SQL commando heb en kan ik verder met het werkend krijgen in forms.
Bedankt iedereen voor alle bijdrage!

Acties:
  • 0 Henk 'm!

  • winkbrace
  • Registratie: Augustus 2008
  • Laatst online: 24-08 15:17
Oracle Forms? Je moet Oracle Forms leren? Wat al 10 jaar niet meer ondersteund wordt? Verspil hier vooral niet teveel tijd aan! Oracle werkt zelf al jaren alleen nog maar met Java.

Acties:
  • 0 Henk 'm!

  • CyBeRSPiN
  • Registratie: Februari 2001
  • Laatst online: 13:00

CyBeRSPiN

sinds 2001

BazzPsychoNut schreef op woensdag 05 januari 2011 @ 14:10:
Oracle Forms? Je moet Oracle Forms leren? Wat al 10 jaar niet meer ondersteund wordt? Verspil hier vooral niet teveel tijd aan! Oracle werkt zelf al jaren alleen nog maar met Java.
Wie heeft je dat wijsgemaakt?
Vergis je niet hoor, er zijn nog volop (grote) bedrijven die Oracle Forms naar volle tevredenheid gebruiken, er wordt hier en daar ook nog actief aan Forms applicaties ontwikkeld, ook door Oracle zelf. Java is uiteraard de techniek voor nieuwe projecten!

Forms wordt trouwens nog steeds ondersteund, er is zelfs een 11g versie en support voor Foms in de nieuwe Weblogic server. Zie hier voor meer info: http://www.oracle.com/tec...forms/overview/index.html
Pagina: 1