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
。