Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dodaj instrukcję JEŻELI ELSE

Jeśli chodzi o to, jak radzić sobie z tego rodzaju problemem składni jako początkujący, sugeruję, abyś poćwiczył upraszczanie go do najmniejszego możliwego przykładu, aby nie rozpraszać się logiką łączenia.

Możesz na przykład szybko to przetestować i zobaczyć, że nie zadziała :

declare
    rc sys_refcursor;
begin
    open rc for
        case
            when 1 = 1 then select * from dual  -- not valid
        end;
end;

co nie powiedzie się z

ORA-06550: line 6, column 29:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...

ponieważ open rc for select składnia musi być pojedynczą instrukcją i nie może być podzielona za pomocą logiki warunkowej.

Zwróć uwagę, że nie ma create function , parametry lub złączenia itp., aby skomplikować sprawy. Możesz dodać je wszystkie z powrotem, gdy już wyprostujesz składnię. case składnia instrukcji to tutaj . (Zauważ, że istnieje kilka różnych rodzajów case .) Musi być albo

declare
    rc sys_refcursor;
begin
    case
        when 1 = 1 then
            open rc for select * from dual;
    end case;
end;

lub odpowiednik przy użyciu if :

declare
    rc sys_refcursor;
begin
    if 1 = 1 then
        open rc for select * from dual;
    end if;
end;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę sortować według kolumny tabeli w różnych przypadkach (Oracle)

  2. ORA-00907 Problem z brakiem prawego nawiasu - wybierz z kolejnością za pomocą zapytania wstawianego wewnątrz

  3. Funkcja potokowa wywołująca inną funkcję potokową

  4. Od XML do listy ścieżek w środowisku Oracle PL/SQL

  5. Niepowodzenie prostej procedury Oracle