首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将查询结果插入由变量命名的表中

将查询结果插入由变量命名的表中
EN

Stack Overflow用户
提问于 2013-08-21 09:45:52
回答 2查看 300关注 0票数 0

我有一个存储过程,它运行许多查询并获得许多值,并将其存储在变量中。我希望这个过程能够将查询结果插入到用户提供的表中。我会将给定的表名存储为varchar参数,但是如何将其插入到这个表中呢?

在编译时,Oracle表示该表不存在。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-21 10:36:25

据推测,它是在告诉您使用的变量名称的表不存在,当然不存在。实际的表在编译时可能存在,也可能不存在;因为它是灵活的,所以假设它可能不存在可能更安全。无论哪种方式,您都不知道会发生什么,因此需要使用动态SQL来实现这一点。

正如对另一个答案的注释中提到的,您必须小心SQL注入。通常,您希望在动态SQL中使用绑定变量,但不能将绑定用于对象名称,因此必须将其连接起来。希望您使用的是11g,其中包括dbms_assert包。

下面是一个简单的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create or replace procedure p42 (table_name varchar2) as
begin
  execute immediate 'insert into '
    || dbms_assert.qualified_sql_name(table_name)
    || ' select * from dual';
end;
/

然后,我可以在该过程已经存在之后创建一个表,并成功地调用该过程:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table t42 (dummy varchar2(1));

exec p42('t42');

select * from t42;

DUMMY
-----
X     

您的真正查询显然要复杂得多,并且应该将绑定变量与目标表名称一起用于传递的任何筛选值。

dbms_assert调用的优点是,如果传入一些非法的内容,并且传递了一些令人讨厌的东西,它就会出错:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exec p42('t42 select ''Y'' from dual union all');

ORA-44004: invalid qualified SQL name
ORA-06512: at "SYS.DBMS_ASSERT", line 207
ORA-06512: at "STACKOVERFLOW.P42", line 3
ORA-06512: at line 1

如果过程只是连接传递的值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  execute immediate 'insert into ' || table_name || ' select * from dual';

..。然后,相同的调用将在表中插入两行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exec p42('t42 select ''Y'' from dual union all');

select * from t42;

DUMMY
-----
Y     
X

如果数据完整性对您来说是很重要的话,这是值得担心的事情。如果您不能使用dbms_assert,那么您可以尝试检查传入的名称是否确实存在于all_tables中,并且不包含任何类似于union之类的内容,但更安全的做法是,您不会考虑所有可能的攻击,并让内置函数为您做艰苦的工作。

票数 5
EN

Stack Overflow用户

发布于 2013-08-21 09:51:09

试着做这样的事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exec ('insert into ' + @tblname + ' (col) values (123)')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18364280

复制
相关文章
如何修复WordPress内容更新和发布失败错误
如果您的WordPress网站在您尝试进行更改时返回诸如“更新失败”或“发布失败”之类的错误消息,那么结果不仅令人沮丧,而且还会阻止访问者访问他们需要的内容。
青梅煮码
2023/01/14
5.5K0
如何修复WordPress内容更新和发布失败错误
WordPress 版本更新
WordPress 是一个内容管理系统 (WCM),即它是一种以最佳方式组织创建、存储和展示 Web 内容的整个过程的工具。WordPress 作为一种改进工具开始了它的旅程,以增强日常写作的常规排版。但它被视为一种博客工具,当我们进入今年最后一个季度时,WordPress 成为最常用的 WCM 系统,而且不仅在博客社区中也是如此。
海拥
2023/01/01
2.7K0
WordPress 版本更新
如何修复WordPress更新失败/发布失败错误,您可能已掉线
WordPress CMS是一个完全开源的工具,对用户免费,但是,由于插件等原因,有时会出现一些奇怪的错误消息,这些WordPress错误可能会影响网站的效果,也可能会给网站带来意想不到的后果。
晓得博客
2021/04/07
8K0
错误——持续更新
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/48551789
用户1451823
2018/09/13
1.8K0
错误——持续更新
WordPress更新文章 显示最近更新时间
子比主题为了防止更新后失效 请在目录内新建func.php 文件 插入上方代码即可
残浔
2023/05/11
6740
wordpress 5.8更新,支持webp
  wordpress 5.8刚刚发布更新,支持webp格式的图片上传,如下图所示。WebP 是一种现代图像格式,可为网络上的图像提供改进的无损和有损压缩。WebP 图像比它们的 JPEG 或 PNG 等效图像平均小 30% 左右,从而使网站速度更快,使用的带宽更少。
ytkah
2021/07/23
2.2K0
WordPress 发布 4.0.1 安全更新,强烈建议更新
WordPress 4.0.1 发布,这是一个非常关键的安全修复版本,强烈建议每位用户都升级到最新版本!
Denis
2023/04/15
4330
ubuntu更新源出现错误
有的小伙伴出现了残留源错误,有的人说重装,有的人说改sourcelist,这些方法诚然好使,但都是高射炮打蚊子:小题大作。 现在来说解决方法: 先选右下九个点
全栈程序员站长
2022/08/27
1.3K0
ubuntu更新源出现错误
如何禁用WordPress升级更新通知
WordPress 提供的更新通知对于了解新的可用更新和跟踪站点上的自动更新很有用。但是也有像子凡我这样希望禁用它们以减少 WordPress 仪表板或电子邮件收件箱中的混乱情况。或者,这可能是因为你使用不同的方式来管理更新,从而使通知变得多余。当然子凡我只是因为当 WordPress 核心有升级时,普通的作者编辑人员后台也有提示,这就造成了不需要的通知,所以最直接的方式就是除了管理员其它用户没必要看到 WordPress 的升级更新通知。
张子凡
2023/01/09
1.8K0
如何禁用WordPress升级更新通知
WordPress 技巧:禁止插件更新提醒
这个技巧会阻止 WordPress 检查插件是否有有更新,这个技巧对于给客户建的网站非常有帮助,因为很可能你已经修改了插件,插件的更新将会让整个网站不能正常运行。
Denis
2023/04/15
4750
实用WordPress插件收集(更新中)
wordpress里面的页面的显示顺序是无法控制的。你无法控制某个页面排在前面或者排在后面。 而有时候,我们又确实需要控制某些页面的显示顺序,那么就可以用My Page Order这个wordpress插件了。
星哥玩云
2022/06/11
4720
WordPress 网站怎么关闭自动更新和更新提示
WordPress 网站怎么关闭自动更新和更新提示?之前不是因为 WordPressP 自动更新导致主题无法正常使用,首页出现“空白模板:索引”。原文:《WordPress 自动更新后出现“空白模板:索引”的解决方法》但是我操作之后发现首页依然是“空白模板”,第一反应会不会是系统又自动更新了。故有此教程。
主机教程网2bcd.com
2022/10/17
1.2K0
禁用WordPress致命错误(WSOD)处理
WordPress 5.2内置了一个新功能,当检测到插件或主题发生错误时,自动发送邮件通知网站管理员,即使在后端完全无法访问的情况下(例如发生所谓的“白屏死机”),管理员仍然有机会登录并对此问题采取措施。
可定
2020/04/20
6020
[已解决]如何修复另一个更新正在进行中WordPress升级错误
在使用WordPress建站时,是否遇到过 WordPress 网站当前正在进行另一个更新的错误?此错误会阻止您更新 WordPress 版本,没有正在进行的核心、主题或插件的更新,重新启动更新过程也会导致出现相同的通知,显然是有某种 WordPress 更新锁阻止更新初始化。在本文中,我们晓得博客将向您展示如何修复另一个更新正在进行中WordPress升级错误。
晓得博客
2021/08/12
3.7K0
WordPress 手动升级更新方法
魏艾斯博客有个 wordpress 站很久没有更新版本了,每次 WordPress 升级都会对已发行问题进行安全修复,所以还是尽量的升级到最新版本。前几天上去看了一下最新版本 4.73,点击现在更新后,页面提示:请重试。然后就在这里反复循环了。试过了很多办法比如删除数据库中的版本更新锁定命令行也无效,干脆就手动更新吧。 WordPress 的主题和插件众多,如果你用的主题是比较简单的那还好说,我们不考虑这方面的情况而盲目设置自动升级,很容易导致升级之后出现错误,严重的会导致网站页面变空白、不兼容等问题。所以
魏艾斯博客www.vpsss.net
2018/06/01
4.7K0
点击加载更多

相似问题

自定义javascript确认框

11

angularjs自定义确认框

72

自定义警报/确认框

21

使用TypeScript自定义确认框

10

自定义确认对话框

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文