Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[PL/SQL] Jak sprawdzić w kursorze "for" , że nie pobrało rekordów ?

#1
[PL/SQL] Jak sprawdzić w kursorze "for" , że nie pobrało rekordów ?
Witam , uczę się języka pl/sql i mam taki problem : Utworzyłem kursor sparametryzowany "for" i chciałbym coś ala takiego
Kod PHP:
if(v_cur%notfoundthen raise nie_ma
Wiem , że tak nie mogę bo wtedy :
Kod:
PLS-00324: cursor attribute may not be applied to non-cursor 'V_CUR'
Macie może jakiś pomysł ?
Pozdrawiam
 System operacyjny: windows_seven Przeglądarka: chrome
#2
RE: [PL/SQL] Jak sprawdzić w kursorze "for" , że nie pobrało rekordów ?
Podaj cały kod, bo na kursorze jak najbardziej możesz zrobić coś takiego. Co to jest v_cur?
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#3
RE: [PL/SQL] Jak sprawdzić w kursorze "for" , że nie pobrało rekordów ?
Kod PHP:
SET SERVEROUTPUT ON
declare
  
cursor kursor(dana varchar2
  
is select dana_1,dana_2,dana_3,dana_4
  from tabela

  
v_liczba number(10);
  
nie_ma exception;
begin
  
for v_cur in kursor(:danaloop
    
if(v_cur%notfoundthen raise nie_ma;
    
end if;    
  
end loop;
exception 
when nie_ma then dbms_output
.put_line(' nie występuje');
end

nie jest to pełen kod ale pozostała część jest analogiczna do tego w begin-end
 System operacyjny: windows_seven Przeglądarka: chrome
#4
RE: [PL/SQL] Jak sprawdzić w kursorze "for" , że nie pobrało rekordów ?
Nie mam pod ręką Oracla, ale z tego co pamiętam, to notfound powinieneś sprawdzać na kursorze, a nie rekordzie. W Twoim wypadku to będzie kursor%notfound . Zastanawia mnie jeszcze ta składnia. Co prawda pracowałem na starszych wersjach, ale za moich czasów używało się jeszcze polecenia fetch, którego tutaj nie masz. Wesoły
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#5
RE: [PL/SQL] Jak sprawdzić w kursorze "for" , że nie pobrało rekordów ?
Tak ponieważ chyba od wersji 10 wprowadzono "for" - nie trzeba otwierać,zamykać ani fetchować . For wie , iteruje te wiersze , które kursor zwrócił . Poczytałem trochę o tym i się dowiedziałem że w ten sposób (kursor%notfound) - kursor nie wie czy coś zwrócił czy nie . Tyle tylko , że nadal nie wiem jak mogę to obejść .
 System operacyjny: windows_seven Przeglądarka: chrome
#6
RE: [PL/SQL] Jak sprawdzić w kursorze "for" , że nie pobrało rekordów ?
Zrobiłem to z kursorem fetch :
Kod PHP:
variable dana varchar2(100)
begin
  
:dana:='papier biurowy';
end;
/

declare
  
nie_ma exception;
  
cursor v_cur(dana varchar2is select p_dana from
  tabela where p_dana
=dana;
  
v_dana pozycje.p_dana%type;
  
v_dana2 pozycje.p_dana%type;
begin
  v_dana
:=dana;
  
open v_cur(v_dana);
  
loop
    fetch v_cur into v_dana2
    
if v_cur%notfound then raise nie_ma;
    
end if;
  
end loop;
  
close v_cur;
exception
  when nie_ma then dbms_output
.put_line('nie ma!!!');
end;


Sypie błędem :
Kod:
Error report:
ORA-06550: linia 12, kolumna 5:
PLS-00103: Encountered the symbol "IF" when expecting one of the following:

   . ( , % ; limit
The symbol ";" was substituted for "IF" to continue.
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.

Nie mam pojęcia o co chodzi Płacze
 System operacyjny: windows_seven Przeglądarka: chrome
#7
RE: [PL/SQL] Jak sprawdzić w kursorze "for" , że nie pobrało rekordów ?
Brakuje średnika w linii
Kod:
fetch v_cur into v_dana2;
Piszę poprawnie po polsku
 System operacyjny: windows_seven Przeglądarka: firefox
#8
RE: [PL/SQL] Jak sprawdzić w kursorze "for" , że nie pobrało rekordów ?
Lol , nie zauważyłem . Dziękuję . Niestety po wyeliminowaniu tego błędu pojawia się inny błąd :
Kod:
Error report:
ORA-06550: linia 8, kolumna 14:
PLS-00201: identifier 'DANA' must be declared
ORA-06550: linia 8, kolumna 3:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.

Chociaż deklaruje ją w pierwszych linijkach kodu .
 System operacyjny: windows_seven Przeglądarka: chrome
#9
RE: [PL/SQL] Jak sprawdzić w kursorze "for" , że nie pobrało rekordów ?
Jeśli to jest anonimowy blok kodu to powinno być tak:
Kod:
declare
  nie_ma exception;
  cursor v_cur(dana varchar2) is select p_dana from
  tabela where p_dana=dana;
  v_dana2 pozycje.p_dana%type;
begin
  open v_cur('papier biurowy');
  loop
    fetch v_cur into v_dana2
    if v_cur%notfound then raise nie_ma;
    end if;
  end loop;
  close v_cur;
exception
  when nie_ma then dbms_output.put_line('nie ma!!!');
end;
/
No i ten select w kursorze to chyba nie ma zbyt wiele sensu bo:
Wybierz "papier biurowy" jeśli kolumna p_dana="papier biurowy"

Chyba, że to ma być taki sobie przykład.
Piszę poprawnie po polsku
 System operacyjny: windows_seven Przeglądarka: firefox
Programy: Polecane / Nowe / Inne



Użytkownicy forum szukali:
cursor attribute may notjak sprawdzic czy coś się pobrałokursor mi sie gubi i nie ma tego co pisałempl sql for in (select loop ilość wybranych krotek

Podobne wątki ([PL/SQL] Jak sprawdzić w kursorze "for" , że nie pobrało rekordów ?)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  [SQL]procedura zliczania czasu CTRL85 0 9502 17.02.2018, 12:58
Ostatni post: CTRL85
  SQL zapisanie w rekordzie nazwy zalogowanego użytkownika karlos1323 11 3508 30.12.2017, 11:08
Ostatni post: koneton
  Tutoriale: Tworzenie raportów z wykorzystaniem SQL. Cixi 3 7626 29.03.2017, 08:23
Ostatni post: koneton

Skocz do:


Wybrane wątki ([PL/SQL] Jak sprawdzić w kursorze "for" , że nie pobrało rekordów ?)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  C# pierwsza pusta komórka Excel DonCorleone 0 7981 21.09.2018 16:58
Ostatni post: DonCorleone
  .bat nie kompresuje plików GIENTY 3 8435 06.09.2018 07:20
Ostatni post: broda99
  problem z programem .bat wiktrom12 4 9577 30.08.2018 08:25
Ostatni post: wiktrom12
  Silnik do gier ZigglerGames 1 8258 23.08.2018 09:03
Ostatni post: Szachista
  Chciałbym zrobić prosty plik exe z jedną funkcją densour 4 8994 09.08.2018 16:24
Ostatni post: Ajgor
  Który język wybrać do stworzenia aplikacji synchronizujące pliki z urządzeniem mobiln Elemental 2 2411 18.07.2018 12:05
Ostatni post: Ajgor
  Pomysł napisania programu ROM FireBytes 3 9636 28.06.2018 16:56
Ostatni post: FireBytes
  [VBA] Tworzenie nowego arkusza z danymi z TextBox'a Pioro 4 9952 19.06.2018 23:24
Ostatni post: broda99
  Potwierdzenie na maila po wysłaniu pliku coci 0 9093 13.06.2018 20:37
Ostatni post: coci
  Pieczętowanie Archiwum Jar - Po co? wanhelsing 3 9691 19.05.2018 20:55
Ostatni post: koneton
  Wyszukiwarka w spawnerze nie reaguje na polskie znaki kazik666 0 9503 16.05.2018 12:04
Ostatni post: kazik666
  BASH symulator silnika dawswi1 3 9992 13.05.2018 10:43
Ostatni post: Szachista
  Autohotkey automatyczny zapis TheProgson 0 9601 07.05.2018 21:27
Ostatni post: TheProgson
  VBA Pobieranie wybranych plików z danymi julietta03 1 9857 04.05.2018 08:25
Ostatni post: broda99
  [VBA] Przenoszenie danych między formularzami Pioro 4 10282 23.04.2018 11:48
Ostatni post: broda99