Como declaro e uso variáveis ​​no Oracle?

18

Minhas principais habilidades são com o SQL Server, mas me pediram para fazer alguns ajustes em uma consulta Oracle. Eu escrevi o seguinte SQL:

declare @startDate int
select @startDate = 20110501

E eu recebo este erro:

declare @startDate int
select @startDate = 20110501
Error at line 1
ORA-06550: line 1, column 9:
PLS-00103: Encountered the symbol "@" when expecting one of the following:

   begin function package pragma procedure subtype type use
   <an identifier> <a double-quoted delimited-identifier> form
   current cursor

Como declaro e uso variáveis ​​no Oracle?

Mark Allison
fonte

Respostas:

18

Bloco pl / sql interno:

declare
 startdate number;
begin
  select 20110501 into startdate from dual;
end;
/

usando uma variável de ligação:

var startdate number;
begin
  select 20110501 into :startdate from dual;
end;
/

Procedimento PL / SQL concluído com sucesso.

SQL> print startdate

 STARTDATE
----------
  20110501

em uma consulta:

select object_name 
from user_objects 
where created > to_date (:startdate,'yyyymmdd');  /*prefix the bind variable wïth ":" */
ik_zelf
fonte
Infelizmente, isso não funciona para mim. var meu_num NUMBER; BEGIN SELECT 12345 INTO my_num FROM dual; FIM; / selecione * de minha_tabela sa onde sa.my_col =: meu_num;
Matthew
que erro você recebe? (acabei de testar e funciona) #
9337 ik_zelf
Na verdade, tentei a solução postada por Jon da All Trades e que funcionou perfeitamente para minhas necessidades - ou seja, usando DEFINE e referenciando a variável com &.
Matthew
3

O SQL * Plus suporta um formato adicional:

DEFINE StartDate = TO_DATE('2016-06-21');
DEFINE EndDate   = TO_DATE('2016-06-30');

SELECT
    *
FROM
    MyTable
WHERE
    DateField BETWEEN &StartDate and &EndDate;

Observe os e comerciais em que as substituições devem ser executadas na consulta.

Jon de todos os comércios
fonte
Isso funcionou para mim no Toad for Oracle ao usar qualquer uma destas funções: Execute as script ou Execute via Toad script runnerou Execute via SQL*Plus. No entanto, se você tentar executá- Execute/compile statement at caretlo, ele retornará uma mensagem de erro: "ORA-009000: instrução SQL inválida".
SherlockSpreadsheets