Oracle

在 TOAD、sqlplus 和 SqlDeveloper 中使用 Bind 變數的區別

  • August 30, 2016

我有以下範例查詢。

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;

當我使用 TOAD 執行此查詢時。它執行成功。

XXXX rows selected.
Time End: 06.12.2011 12:05:37
Elapsed Time for Script Execution: 3 secs

在 SQL Developer 中,我收到以下錯誤。

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:

在 sqlplus 中,我有類似的錯誤。

ATILLA@DENEME > @WithAndBindVariablesExample.sql
WITH EXAMPLE
*
ERROR at line 12:
ORA-06550: line 12, column 1:
PLS-00103: Encountered the symbol "WITH"

如果我使用以下符號

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;

它成功執行所有三個工具。

看來我缺乏這方面的基本知識。我想要有關此行為、解釋等的教程的指針。

在 SQL*Plus 和 SQL Developer 中,您需要/在 PL/SQL 塊的末尾添加一個。

variable pStartDateBegin VARCHAR2(10);
variable pEndDateFinish VARCHAR2(10);

begin
     select '01-01-2000', '30-11-2011'

     into :pStartDateBegin,:pEndDateFinish
       from dual;


end;
/

[...]

引用自:https://dba.stackexchange.com/questions/8820