Hjälp med SQL och Oracle

Santo

Fuck You Burnout
Gick med
17 Dec 2003
Ort
Stockholm
Hoj
R1 2007
Ok, efter uppmaning av korvgubbe bör det finnas mycket kunskap i sql här. Här kommer frågan jag postade i ett engelskt forum. Orkar inte skriva om på svenska men det ska väl inte var anågra problem...


Hi!

I have a big problem making a procedure and thought that maybe someone could help me.

1. I am working in Oracle. Is there a way to se the compilation errors? I'm only getting this message and it doesn't tell me much, only that there are some problems: Warning: Procedure created with compilation errors.

2. I have theese tables:
sale(debit, item, quantity)
debit(key, sdate, employee, account)

3. Now I have to create a procedure that creates a sale. The procedure takes a costomer account, an item number, a quantity of the item sold, the employee resposable of the transaction and the transaction number as arguments.

A transaction can be related to several sales. A new transaction should be created when the first sale of this transaction is created.

4. I have been strugeling with this code for days now and I'm getting quite desperate:

Code:

create OR replace procedure sale_add (aid IN number, item_number IN number, quantity IN number, empid IN number, transaction_number IN number)
AS BEGIN
IF (some statement that checks if a transaction (select key from debit) exists)
INSERT INTO sale (debit, item, quantity) VALUES (transaction_number, item_number, quantity);
ELSE
INSERT INTO debit (key, sysdate, employee, account, null) VALUES (transaction_number, empid, aid);
NSERT INTO sale (debit, item, quantity) VALUES (transaction_number, item_number, quantity);
END IF;
end




Again, I only get this message: Warning: Procedure created with compilation errors.

What can I do to find out what the compilation errors are?
Does somebody see the errors in the code?
 
Santo skrev:
INSERT INTO debit (key, sysdate, employee, account, null) VALUES (transaction_number, empid, aid);

Nu har jag iofs aldrig jobbat med Oracle men i den här INSERT-satsen anger du fyra fält (plus "null"??) men skickar bara in tre värden...

Sätt in i tabell - debit
Fältnamn:
-key
- sysdate,
- employee,
- account
- null(???)
Värden
- transaction_number
- empid
- aid

I mina ögon borde det ge kompileringsfel...

Edit.. HAde jag skrivit hade det nog snarare sett ut något i stil med


INSERT INTO debit (key, sysdate, employee, account) VALUES (transaction_number,'NOW',empid, aid);
 
Last edited:
korvgubbe skrev:
Nu har jag iofs aldrig jobbat med Oracle men i den här INSERT-satsen anger du fyra fält (plus "null"??) men skickar bara in tre värden...

INSERT INTO debit (key, sysdate, employee, account) VALUES (transaction_number,'NOW',empid, aid);

oj null ska inte vara där... fan vad klantigt av mig att bara skicka in tre värden :huvet

Har suttit och ändrat en miljon gånger i denna sats... alltid något som blir fel.


Hur som helst... finns det ngt kommando/variabel som automatiskt sätter datumet?

Edit: jag tror att datumet automatiskt skapas när en ny rad skapas... kommer bara inte ihåg hur man kollar infon om variablerna. Vad kan jag skicka in för att den inte ska ta hänsyn till datumet?

Edit2: Now var visst en inbyggd funktion :tummenupp
 
Last edited:
Santo skrev:
Vad kan jag skicka in för att den inte ska ta hänsyn till datumet?
Vill du inte sätta sysdate i din insert är det bara att utesluta det i listan med kolumner.

INSERT INTO debit (key, employee, account) VALUES (transaction_number, empid, aid);
 
Zormin skrev:
Vill du inte sätta sysdate i din insert är det bara att utesluta det i listan med kolumner.

INSERT INTO debit (key, employee, account) VALUES (transaction_number, empid, aid);

Precis!
...Du anger bara de kolumner som du faktiskt ska pula in ett värde i.

Däremot skulle du kunna ha ett defaultvärde på fältet sysdate i tabellen. Dafaultvärdet skulle kunna vara motsvarande 'Now'. Då kommer alla nya poster får stundens datum och klockslag om du inte explicit skickar in ett annat värde.
 
Back
Top