Oracle
在 TOAD、sqlplus 和 SqlDeveloper 中使用 Bind 變數的區別
我有以下範例查詢。
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; / [...]