Как объявить и установить переменные в PL / SQL - PullRequest
0 голосов
/ 13 апреля 2020

ПРОБЛЕМА

Я изо всех сил пытаюсь определить переменные в PL / SQL

в T- SQL, легко объявить и установить переменные и ссылки их в запросе выбора (как показано ниже). Но как бы я сделал нечто подобное в PL / SQL?

ЧТО Я «ПОПРОБОВАЛ»

Похоже, это общий вопрос, который задают несколько раз в стеке, но нет четкого ответа! Самая близкая, которую я получил, была Эта ссылка здесь, но даже все еще я не мог заставить ее работать для меня.

МОЙ РАЗЛИЧНЫЙ PL / SQL Попытки

DECLARE
   myname varchar2(20);
BEGIN
     myname := 'Tom';
     dbms_output.print_line(myname);
END;

variable v_date datetime;
exec :v_date := to_date('01/01/2014','mm/dd/yyyy');

var myname varchar2(20);
exec :myname := 'Tom';

T- SQL Пример того, что я пытаюсь сделать

DECLARE 
    @String VARCHAR(10),
    @Date DATE,
    @Integer As INT

SET @String = 'Hello'
SET @Date = '20200413'
SET @Integer = Year(@Date)

SELECT *
FROM TABLE
WHERE 1=1
AND col_a = @String
AND col_b >= @Year

1 Ответ

2 голосов
/ 13 апреля 2020

SQL / Plus & SQL Разработчик

Если вы используете пользовательский интерфейс, поддерживающий команду VARIABLE , вы можете использовать ее для объявления переменные связывания:

VARIABLE string VARCHAR2(10);
VARIABLE dt     DATE;
VARIABLE year   NUMBER;

BEGIN
  :string := 'Hello';
  :dt := DATE '2020-04-13';
  :year := EXTRACT( YEAR FROM :dt );
END;
/

SELECT *
FROM   table_name
WHERE  col_a = :string
AND    col_b = :year;

Однако здесь вы не используете PL / SQL, за исключением средней секции BEGIN ... END.

Другие пользовательские интерфейсы :

Вы можете объявить один блок PL / SQL и использовать переменные PL / SQL:

DECLARE
  v_string VARCHAR2(10) := 'Hello';
  v_dt     DATE         := DATE '2020-04-13';
  v_year   NUMBER(4,0)  := EXTRACT( YEAR FROM v_dt );
  c_cur    SYS_REFCURSOR;
BEGIN
  OPEN c_cur FOR
    SELECT *
    FROM   table_name
    WHERE  col_a = v_string
    AND    col_b = v_year;

  -- Do stuff in PL/SQL with the cursor.
END;
/
...