在SQL Developer中的脚本中传递和使用参数

时间:2019-05-03 09:00:24

标签: sql oracle-sqldeveloper

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

@"path\to\script.sql" develop

,然后在脚本中使用值develop作为表前缀,如下所示:

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

在SQL Developer中是否可能发生这种情况?

1 个答案:

答案 0 :(得分:1)

请参阅下面的文章。它将回答您的问题。

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开发人员执行 script 。也许最好根据输入给过程的参数来创建一个生成动态SQL的过程。然后,您将在过程内部的动态SQL语句上使用EXECUTE IMMEDIATE。

当执行诸如ETL之类的操作(与查询相对)时,我个人可能会发现该技术更有用。再说一次,我不是专家,那里也许还有更好的解决方案。