在 oracle 中创建视图时 to_date 未验证用户输入值

com*_*oid 0 sql oracle view to-date

我正在 Oracle 12.2.0.1.0 中创建一个视图,并在我的视图中添加以下条件:

WHERE trunc(whenmodified) = TO_DATE('&userinput', 'DDMMYYYY')
Run Code Online (Sandbox Code Playgroud)

whenmodified 是日期类型。

当用户输入不是 'DDMMYYYY' 格式时,我希望得到一个错误。但是像14142020这样的输入没有错误,并且正在创建视图。我期待以下错误:ORA-01843:无效月份

01843. 00000 -  "not a valid month"
*Cause:    
*Action:
Run Code Online (Sandbox Code Playgroud)

我正在使用 SQL DEVELOPER。

小智 5

您输入的日期不会根据 DDL 进行验证,而是根据从该视图中进行的选择进行验证:

SQL> create or replace view td as select sysdate sd,dummy from dual where trunc(sysdate)=to_date('&az','ddmmyyyy');
Enter value for az: 12131444
old   1: create or replace view td as select sysdate sd,dummy from dual where trunc(sysdate)=to_date('&az','ddmmyyyy')
new   1: create or replace view td as select sysdate sd,dummy from dual where trunc(sysdate)=to_date('12131444','ddmmyyyy')

View created.

SQL> select * from td;
select * from td
               *
ERROR at line 1:
ORA-01843: not a valid month


SQL> set long 2000
SQL> select text from user_views where view_name='TD';

TEXT
--------------------------------------------------------------------------------
select sysdate sd,dummy from dual where trunc(sysdate)=to_date('12131444','ddmmyyyy')
Run Code Online (Sandbox Code Playgroud)

如您所见,视图文本按原样使用,没有验证。使用视图时完成验证。