我可以在纯Oracle SQL中准备语句吗?

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

3GL提供了在执行语句之前准备语句的机制。例如。

 SELECT name
 FROM people
 WHERE age=:AGE

然后可以针对不同年龄执行相同的查询。但是这样的声明是否也可以在“普通”的Oracle SQL客户端中编写?也可以在例如SQL或dbForge Studio for Oracle,如Java或C#或支持预准备语句的任何其他编程语言?

sql oracle oracle11g prepared-statement
2个回答
3
投票

在dbForge Studio for Oracle中,可以使用命名参数,前面是冒号:

SELECT *
FROM people
WHERE name=:name

然后可以使用SQL工具栏中的“编辑参数”对话框填充参数。


-1
投票

我知道你没有问过PostgreSQL而是关于Oracle。但值得注意的是,PostgreSQL在其SQL语言中具有此功能。

SQL标准包含PREPARE语句,但它仅用于嵌入式SQL。 PostPSQL版本的PREPARE语句的工作方式如下:

PREPARE nameByAge(number) AS
  SELECT name
    FROM People
   WHERE age=$1;

你像这样使用它:

EXECUTE nameByAge(18);

EXECUTE nameByAge(50);

所以不幸的是,对于Oracle SQLPlus,答案似乎是否定的,而不是绑定变量。但SQLPlus有替换变量,类似于shell脚本。您将它们用作&1,&2,&3,......并从调用SQLPlus脚本的方式获取它们的参数。

sqlplus user/password @script.sql 18

sqlplus user/password @script.sql 50

使用script.sql

SELECT name 
  FROM People
 WHERE age=&1;

这会起作用,即使它没有绑定。但是,你真的关心重复解析时间的轻微节省吗?实际上,Oracle散列SQL语句并且已经使用绑定变量替换常量,以便能够更好地重用查询计划。因此,使用PREPARE和BIND可以节省的成本实际上是微不足道的。

© www.soinside.com 2019 - 2024. All rights reserved.