首页 > 解决方案 > 在 SQL Developer 的脚本中传递和使用参数

问题描述

在 SQL Developer 中,我想调用这样的脚本:

@"path\to\script.sql" develop

并使用develop我的脚本中的值作为表前缀,如下所示:

SELECT * FROM <parameter>_table;然后应该评估为SELECT * FROM develop_table

在 SQL Developer 中这样的事情可能吗?

标签: sqloracle-sqldeveloper

解决方案


请参阅下面的文章。它会回答你的问题。

https://blogs.oracle.com/opal/sqlplus-101-substitution-variables#2_7

我会根据那篇博客文章为你举一个例子。

创建一个虚拟表:

CREATE TABLE t(x NUMBER, t VARCHAR2(255));
INSERT INTO t(x, t) VALUES (1, 'Example');
COMMIT;

下面的脚本已保存在C:\Users\William中。文件名是example.sql

SELECT *
  FROM &1
;

现在,从 SQL Developer,我执行:

@C:\Users\William\example.sql t

请注意,当您将参数传递给这样的脚本时,您传递的是存储在隐式命名的替换变量中的文本值。替换变量根据其顺序命名(例如,&1 然后 &2 然后 &3 等)。

这是脚本输出:

old:SELECT *
  FROM &1

new:SELECT *
  FROM t

 X T         
-- ----------
 1 Example   

您可能应该花一些时间来考虑您正在解决的问题的其他解决方案。您可能不需要通过 SQL 开发人员执行脚本。也许您最好根据您提供给该过程的参数创建一个生成动态 SQL 的过程。然后,您将在过程中的动态 SQL 语句上使用 EXECUTE IMMEDIATE。

在执行诸如 ETL 之类的操作(而不是查询)时,我个人可能会发现该技术更有用。再说一次,我不是专家,而且可能有更好的解决方案。


推荐阅读