Oracle 有关DBMS_SQL.PARSE的问题

Oracle 有关DBMS_SQL.PARSE的问题,oracle,plsql,Oracle,Plsql,我有一个类似的问题 queryStr := 'SELECT col1, col2, col3, col4 FROM Table1 WHERE date_created >= '; 然后我看到下面的陈述 DBMS_SQL.PARSE (cursor_handle, queryStr || ':date', DBMS_SQL.NATIVE); DBMS_SQL.BIND_VARIABLE (cursor_handle, 'date', dateVariable); 现在我的问题是,为什么d

我有一个类似的问题

queryStr := 'SELECT col1, col2, col3, col4 FROM Table1 WHERE date_created >= ';
然后我看到下面的陈述

DBMS_SQL.PARSE (cursor_handle, queryStr || ':date', DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE (cursor_handle, 'date', dateVariable);

现在我的问题是,为什么dbms_sql.parse使用变量:date,因为查询中没有:date占位符,即queryStr

您的代码与此等效:

DBMS_SQL.PARSE (cursor_handle,
                'SELECT col1, col2, col3, col4 
                   FROM Table1 
                  WHERE date_created >= :date', 
                DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE (cursor_handle, 'date', dateVariable);

在第一条语句中解析查询。此语句有一个绑定变量(:date)。这个bind变量的值在第二条语句中给出。

但我的问题是dbms\u sql.parse为什么知道:date将成为一个占位符??我的意思是原始查询中没有:date-placeholder。原始查询刚刚结束于**日期\u创建>=**。这是自动完成的吗?其次,当我绑定:date变量时,可以使用任何其他名称,如:date\u check或:random\u date或:placeholder。。。解析后它会绑定吗?@alee那么,
:date
是一个绑定变量,因为它的前缀是“:”,我不知道还能说什么
dbms\u sql.parse
知道前缀为“:”的元素是绑定变量,这是
dbms\u sql
@alee规范的一部分:您可以使用任何其他名称(很可能限制为30个字符),只要在查询中也使用该名称。如果您的查询是
SELECT:other\u date FROM DUAL
,则必须绑定“other\u date”才能运行此查询。显然,错误绑定会导致错误(尝试绑定“date”而不是“other_date”)@Alee:当您调用
dbms_sql.parse
时,使用参数
queryStr | |“:date'
传递的
queryStr
字符串与字符串
':date'
串联
dbms\u sql.parse本身无权访问
queryStr