sql - 在 SQL Developer 的脚本中传递和使用参数
问题描述
在 SQL Developer 中,我想调用这样的脚本:
@"path\to\script.sql" develop
并使用develop
我的脚本中的值作为表前缀,如下所示:
SELECT * FROM <parameter>_table;
然后应该评估为SELECT * FROM develop_table
在 SQL Developer 中这样的事情可能吗?
解决方案
请参阅下面的文章。它会回答你的问题。
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 之类的操作(而不是查询)时,我个人可能会发现该技术更有用。再说一次,我不是专家,而且可能有更好的解决方案。
推荐阅读
- python - 数据清理(地址)Python
- c - Cython:从类型化的 memoryview 数组中读取值的最快方法是什么?
- r - !包 inputenc 错误:Unicode 字符 λ (U+03BB) (inputenc) 未设置为与 LaTeX 一起使用。尝试在 RMD 中编织时
- where-clause - `IN` 指令如何影响 Druid SQL 请求?
- python - Abaqus 6.14-2 脚本中的 KeyError
- sql - mysql合并两个触发器
- r - 将网络要素服务读入 R data.frame
- python - 函数调用它对全局变量有副作用
- android - onBindViewHolder 方法只接受第一个参数
- authentication - 使用 oauth 对烧瓶 API 进行身份验证?