To jest kod

 declare
 a integer;
 begin
  select to_char(to_date('1/1/2017 ','mm/dd/yyyy') + level -1) into a from dual 
   connect by level <=365;
   for a in 1..3 loop
  dbms_output.put_line(a);
  end loop;
 end; 

Występowanie błędów jest dokładny zażądany więcej nie więcej wierszy, proszę o pomoc

0
Abhijith 16 luty 2017, 07:59

2 odpowiedzi

Najlepsza odpowiedź

Próbujesz uzyskać wiele wartości w zmiennej skalarnej.

Spróbuj tego:

begin
    for i in (select to_char(to_date('1/1/2017 ','mm/dd/yyyy') + level -1) col
                    from dual 
                    connect by level <=365) loop
        for j in 1..3 loop
            dbms_output.put_line(i.col);
        end loop;
    end loop;
end; 
/
0
Gurwinder Singh 16 luty 2017, 05:04

I wszystkie, należy pamiętać o tym, że zadeklarowałeś "A" zmienną jako liczbę całkowitą, ale następnie przypisujesz do niego Varchar2. 2nd, testowałem kod i wydaje się, że występuje problem z level <= 365. Zmieniłem to do level = 365 i wydawało się, że zwraca oczekiwany wynik.

declare
 a integer;
 begin
  select to_char(to_date('1/1/2017 ','mm/dd/yyyy') + level -1) into a from dual 
  -- connect by level <= 365;
  connect by level = 365;
   for a in 1..3 loop
  dbms_output.put_line(a);
  end loop;
 end; 
0
mikcutu 16 luty 2017, 05:22