oracle - 在 Oracle 过程中将模式名称作为变量引用
问题描述
有没有办法在 oracle 过程中将模式名称设置为变量?
创建或替换过程测试是 v_schema varchar2(30);
开始
插入 v_schema.tab_a (a, b) 从 xyz 中选择 (a, b);
结尾; /
谢谢
解决方案
您需要使用动态 SQL
create or replace procedure test
is
v_schema varchar2(30);
v_sql varchar2(1000);
begin
v_sql := 'insert into ' || v_schema || '.tab_a( a, b ) ' ||
'select a, b from xyz';
dbms_output.put_line( 'About to execute the statement ' || v_sql );
execute immediate v_sql;
end;
几点
- 您几乎肯定希望在本地变量中构建 SQL 语句,您可以在执行之前打印和/或记录它。否则,当出现语法错误时,您将很难进行调试。
- 您几乎从一开始就不想求助于动态 SQL。您有一个过程,您知道要将所有行插入
xyz
到名为的表中tab_a
,但您不知道该表所在的模式是一个危险信号。这是不寻常的,通常表明您的设计存在问题。当您需要额外的灵活性时,非常非常偶尔动态 SQL 是一个很好的工具。但是,当您考虑一个问题时,动态 SQL 往往是您想要重新考虑该问题的答案。
推荐阅读
- electron - 包括 PepperFlash 在内的电子在生产中无法正常工作
- java - 在没有 maven/Gradle 的情况下创建可执行的 WAR 文件 springboot
- performance - GL_REPEAT 与高分辨率图像?
- ffmpeg - FFMPEG 覆盖图像上带有黑色背景的视频无法正常工作且没有任何错误
- python - 如何仅对匹配模式的文本执行替换
- excel - 从 Excel 中的 INDEX 函数返回数组?
- c++ - boost program_option 不区分大小写的配置文件解析
- sql - 调试访问 SQL
- java - 无法检索文档 - Castexception ParameterizedType
- r - 如何在 GLS 中为 Shiny 应用程序传递反应模型语句