SQL * Plus:在运行时提供绑定变量的值,例如在Toad / SQL-Developer中

问题描述 投票:0回答:1

亲爱的技术人员,

我们的应用程序非常频繁地触发如下查询。

select name,emp_id,prod_id,prod_name, .... from appuser.table where emp_id=:1 and prod_id=:2;

当收到有问题的SQL_TEXT时,我们通常会花费大量时间查找SQL_ID。在SQL * Plus中,我们为emp_id,prodnum等变量提供了一个选项。如下所示

VARIABLE emp_id NUMBER; EXEC :emp_id := 101;

但是,我们有:1,:2作为绑定变量名称,在运行SQL之前无法设置它们,因为它们仅仅是数字(尽管被Oracle视为绑定变量)。我们不能要求应用程序供应商重建所有删除这些编号的绑定变量的查询。

所以,我在SQL * Plus中寻找以下任何选项:

  1. 在运行SQL之前如何声明/定义这样的绑定变量(:1、2等)?
  2. 我们可以以任何方式绕过绑定值并将此SQL发送到Oracle中的游标缓存吗?看起来很困难,但仍然想尝试一下。
  3. 我们可以像在Toad&SQL Developer中一样在运行时传递这些绑定变量的值(:1,:2等。)?这样,我们可以从游标(v $ sql)跟踪正确的SQL_ID。

我一直在尝试并寻找各种选择,但没有具体针对我的选择。在这方面的任何帮助将不胜感激。可以解决此问题的任何版本的Oracle数据库都可以。

oracle oracle12c sqlplus oracle18c bind-variables
1个回答
0
投票

在SQLPlus中,您可以使用&声明一个替换变量,例如:

select name, emp_id, prod_id, prod_name, .... 
from appuser.table 
where emp_id = &emp_id and prod_id = &prod_id;

这将使SQLPlus在执行时为每个变量发出提示,要求您提供一个值,例如:

Enter value for emp_id:
© www.soinside.com 2019 - 2024. All rights reserved.