Oracle
 sql >> база данни >  >> RDS >> Oracle

Добавяне на оператор IF ELSE

Относно това как да се справите с този вид синтактичен проблем като начинаещ, предлагам ви да се упражнявате да го опростявате до възможно най-малкия пример, така че да не се разсейвате от логиката на свързване.

Например, можете бързо да тествате това и да видите, че няма да работи :

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

което се проваля с

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

защото open rc for select синтаксисът трябва да бъде един израз и не може да бъде разделян с условна логика.

Забележете как няма create function , параметри или съединения и т.н., за да усложните нещата. Можете да добавите всички тези обратно, след като сте изяснили синтаксиса. case синтаксисът на израза е тук . (Забележете, че има няколко различни вида case .) Трябва да бъде или

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

или еквивалент с помощта на 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. попълване на колони въз основа на 2 колони

  2. Изпълнете pl/sql функция с OracleCommand

  3. ORA-04076:невалидна НОВА или СТАРА спецификация - PL/SQL - Oracle Trigger

  4. Как да изберете редове с 4-байтови UTF-8 символи в Oracle DB?

  5. Най-популярните заявки за намиране на Patch, приложен в приложенията на Oracle