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

Как да декларирам и използвам променливи в PL/SQL, както правя в T-SQL?

Ревизиран отговор

Ако не извиквате този код от друга програма, опция е да пропуснете PL/SQL и да го направите стриктно в SQL, като използвате променливи за свързване:

var myname varchar2(20);

exec :myname := 'Tom';

SELECT *
FROM   Customers
WHERE  Name = :myname;

В много инструменти (като Toad и SQL Developer), пропускането на var и exec операторите ще накарат програмата да ви подкани за стойността.

Оригинален отговор

Голяма разлика между T-SQL и PL/SQL е, че Oracle не ви позволява имплицитно да върнете резултата от заявка. Резултатът винаги трябва да бъде изрично върнат по някакъв начин. Най-простият начин е да използвате DBMS_OUTPUT (приблизително еквивалентно на print ), за да изведете променливата:

DECLARE
   myname varchar2(20);
BEGIN
     myname := 'Tom';

     dbms_output.print_line(myname);
END;

Това обаче не е особено полезно, ако се опитвате да върнете набор от резултати. В този случай или ще искате да върнете колекция, или рекурсор. Въпреки това, използването на някое от тези решения ще изисква обвиване на вашия код във функция или процедура и стартиране на функцията/процедурата от нещо, което е в състояние да консумира резултатите. Функция, която работи по този начин, може да изглежда така:

CREATE FUNCTION my_function (myname in varchar2)
     my_refcursor out sys_refcursor
BEGIN
     open my_refcursor for
     SELECT *
     FROM   Customers
     WHERE  Name = myname;

     return my_refcursor;
END my_function;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свързване към групи от обекти чрез (ВЪНШНО ПРИЛОЖЕНИЕ) oracle 11.2.0.3.0 не поддържа прилагане

  2. Как да активирате режима на архивен дневник в Oracle Database 19c

  3. Как да форматирате дати в Oracle

  4. Oracle:ПРИ АКТУАЛИЗИРАНЕ НА ДУБЛИРАН КЛЮЧ

  5. java.lang.ClassCastException:oracle.sql.TIMESTAMP не може да бъде прехвърлен към java.sql.Timestamp