暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 重复调用程序

ASKTOM 2019-06-21
323

问题描述

嗨!

我来到了这个新的工作场所,我试图弄清楚它们是如何工作的。我发现了很多反复调用的过程和软件包,我想知道这种事情是否以及如何影响oracle的性能。

特别是,我在一个函数中遇到了这个字符串:

v_SqlText := 
  'SELECT SIANAGR.ANACODANA  '||LsGlobal.c_LF||
  '  FROM SIANAGR            '||LsGlobal.c_LF||
  ' WHERE SIANAGR.ANAPIVA =  '||LsGlobal.c_APICE||v_CFisc||LsGlobal.c_APICE||LsGlobal.c_LF;


LsGlobal是另一个包,c_LF是规范中的常量: = chr(10),c_APICE另一个常量: = '''' 和v_CFisc是一个in参数。

Oracle每次遇到一个package.variable时,都会进行调用,这是真的吗?如果是真的,这个字符串是一个不好的编码例子?
有没有办法跟踪oracle如何在什么时间解析这个字符串?

非常感谢你的帮助,
盖亚

专家解答

this string is a bad coding example?

这是一个horrendous编码示例。但是出于完全不同的原因。

安全。

这个代码是at risk of SQL injection

真的这个代码应该是:

SELECT SIANAGR。ANACODANA
INTO 。。。
FROM SIANAGR            
WHERE SIANAGR。ANAPIVA =  v_CFisc ;


如果有什么原因absolutely must use dynamic SQL, you should validate the inputs with dbms_assert。

But really, the priority should be switching this to static SQL, like I've shown above。

修复此问题后,如果您担心特定PL/SQL语句的性能,则可以使用探查器来找出它们需要多长时间:

https://oracle-base。com/articles/11g/plsql-hierarchical-profiler-11gr1
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论