Eu tenho a seguinte consulta de exemplo.
variable pStartDateBegin VARCHAR2(10);
variable pEndDateFinish VARCHAR2(10);
begin
select '01-01-2000', '30-11-2011'
into :pStartDateBegin,:pEndDateFinish
from dual;
end;
-- SELECT :pStartDateBegin,:pEndDateFinish FROM dual;
WITH EXAMPLE
AS
(
SELECT OWNER,TABLE_NAME FROM DBA_TABLES T
WHERE T.LAST_ANALYZED BETWEEN :pStartDateBegin AND :pEndDateFinish
)
SELECT * FROM EXAMPLE;
Quando executo esta consulta usando o TOAD. Ele é executado com sucesso.
XXXX rows selected.
Time End: 06.12.2011 12:05:37
Elapsed Time for Script Execution: 3 secs
No SQL Developer, recebo o seguinte erro.
Error report:
ORA-06550: line 12, column 2:
PLS-00103: Encountered the symbol "WITH"
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
No sqlplus, tenho erro semelhante.
ATILLA@DENEME > @WithAndBindVariablesExample.sql
WITH EXAMPLE
*
ERROR at line 12:
ORA-06550: line 12, column 1:
PLS-00103: Encountered the symbol "WITH"
Se eu usar a seguinte notação
variable pStartDateBegin VARCHAR2(10);
variable pEndDateFinish VARCHAR2(10);
exec :pStartDateBegin := '01-01-2000';
exec :pEndDateFinish := '30-11-2011';
WITH EXAMPLE
AS
(
SELECT OWNER,TABLE_NAME FROM DBA_TABLES T
WHERE T.LAST_ANALYZED BETWEEN to_date(:pStartDateBegin,'DD-MM-YYYY') AND to_date(:pEndDateFinish,'DD-MM-YYYY')
)
SELECT * FROM EXAMPLE;
Ele executa com sucesso todas as três ferramentas.
Parece que me falta um conhecimento básico sobre isso. Gostaria de dicas de tutoriais sobre esse comportamento, explicações etc.
No SQL*Plus e no SQL Developer, você precisa de um
/
no final de um bloco PL/SQL.