procedura w pl/sql

0

Mam zadanie domowe:

W tabeli ORD w kolumnie TOTAL przechowywana jest całkowita wartość
zamówienia, powinna być ona równa sumie wszystkich zamówionych produktów
przechowywanych w tabeli ITEM (price*quantity) dla konkretnego zamówienia.
Napisz procedurę ORD_ITEM_CHECK, która będzie sprawdzała czy dane w obu
tabelach są równe. Jeśli wartości dla zamówienia będą się różniły, proszę wyświetlić
nr zamówienia, wartość zamówienia z tabeli ORD, wartości price * quantity dla
danego zamówienia oraz SUME dla danego zamówienia z tabeli ITEM. Proszę także
wyświetlić różnicę wartości z obydwu tabel

napisalem cos takiego, ale nie dziala. :( Gdzie mam blad i jak to naprawic ?

Kopiuj
create or replace procedure ord_item_check is
cursor i_price is select price from item;
cursor i_quantity is select quantity from item;
cursor o_total is select total from ord;
uv_ilosc number;
uv_total o_total%ROWTYPE;
begin
open i_price;
open i_quantity;
loop 
fetch i_price*i_quantity into uv_ilosc; 
EXIT WHEN i_price%NOTFOUND;
EXIT WHEN i_quantity%NOTFOUND;
loop 
open o_total
fetch o_total into uv_total;
when uv_total!=uv_ilosc
DBMS_OUTPUT.PUT_LINE('rozne');
DBMS_OUTPUT.PUT_LINE('rozne');
end loop;
close o_total;
end loop;
close i_price;
close i_quantity;
end;
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0

znaczy jak będą różne to gdzie się to ma wyświetlić? SP w oracle dopiero od wersji 10 może zwracać coś na kształt tabeli.

ten sql powinien Ci zwrócić wszystkie zamówienia, gdzie jest różnica

Kopiuj
SELECT 
  o.id,
  MAX(o.total), 
  SUM(i.price * quantity) tot
FROM
  ord o,
  item i
WHERE
  o.id = i.id
GROUP BY
  o.id
HAVING
  MAX(o.total) <> SUM(i.price * quantity)

- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
0

Hmm tylko ze to ma byc procedura ... a jesli wpisze to w 'cialo' procedury, to tez zadziala ?

0

Przepraszam za poprzednie glupie pytanie :P

Napisalem cos takiego - jednak nie wykonuje sie, a ja juz nie mam pojecia, gdzie szukac bledu :(

0

create or replace procedure ORD_ITEM_CHECK is
cursor c_ord is
select total from ord;
cursor c_item_p is
select price from item;
cursor c_item_q is
select quantity from item;

uv_total c_ord%rowtype;
uv_priceItem c_item_p%rowtype;
begin
open c_ord;
open c_item_p;
open c_item_q;
loop
fetch c_ord into uv_total;
fetch c_item_p*c_item_q into uv_priceItem;
if uv_price_item <> uv_total then
end loop;
close c_ord;
close c_item_p;
close c_item_q;
end;

VT
  • Rejestracja:ponad 16 lat
  • Ostatnio:6 miesięcy
  • Postów:167
0

po 1- co nie działa? chcesz, żeby wyświetlało dane? w którym miejscu Twoja procedura wyświetla dane? nie pisz, że masz błąd, tylko że nie wiesz jak się za to zabrać.

po 2-
Jeśli wartości dla zamówienia będą się różniły, proszę wyświetlić
nr zamówienia, wartość zamówienia z tabeli ORD, wartości price * quantity dla
danego zamówienia oraz SUME dla danego zamówienia z tabeli ITEM. Proszę także
wyświetlić różnicę wartości z obydwu tabel

na moje:
albo robiusz zapytanie grupujące ktore zwroci Ci wszystkie bledne zamowienia i dane o nich:
select tabela1.id,.... from tabela1, tabela2
group by tabela1.id
having tabela1.total<>sum(tabela2)

albo kursor po wszystkich zamowieniach, i dla każdego zamówienia w pętli zliczasz pozycje dla danego zamowienia
FOR R1 IN C1 LOOP
select sum(..) into suma_pozycji from ..
if(suma_pozycji<>R1.total) then
dbms_output.putline('blabla');
end if;
end loop;

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)