更新如果您想查看很长的原始问题,请查看编辑。这是问题的更清晰的简短版本......
我需要查看GroupA(并非总是如此GroupA,这会改变每次循环迭代)是否存在于 200 个左右的组的 [list,varray,temp table,whatever] 中。我如何存储这 200 个组完全由我控制。但是我想将它们存储在一个结构中,该结构适合于进行最快的“存在”检查,因为我将不得不在循环中针对不同的值(并非总是GroupA)多次检查此列表。那么什么是 PL/SQL 中最快的,检查一个列表......
IF 'GroupA' IN ('GroupA','GroupB') THEN...
或使用 MEMBER OF ... 检查 VARRAY
IF 'GroupA' MEMBER OF myGroups THEN
Run Code Online (Sandbox Code Playgroud)
或以这种方式检查 VARRAY...
FOR i IN myGroups.FIRST .. myGroups.LAST
LOOP
IF myGroups(i) = 'GroupA' THEN
v_found := TRUE;
EXIT;
END IF;
END LOOP;
Run Code Online (Sandbox Code Playgroud)
或检查关联数组...
will test this tomorrow
更新:来自每个人的建议的最终测试结果
谢谢大家。我运行了这些测试,循环了 1000 万次,使用 a 的逗号分隔字符串LIKE似乎是最快的,所以我想这些点必须归于@Brian McGinity(时间在下面的评论中)。但由于时间都如此接近,所以我采用哪种方法可能并不重要。我想我会使用该VARRAY MEMBER OF方法,因为我可以用一行代码(批量收集)加载数组,而不必循环游标来构建字符串(感谢 @Wernfried 引起MEMBER OF我的注意)... …
我只需要接受符合这些规则的输入......
一些有效条目的示例:
一些无效条目的示例:
我知道RegEx是一种模式匹配语言,因此它对于范围,小于和大于检查并不是很好.所以要检查它是否小于或等于24意味着我必须找到一个模式,对吧?所以有24种可能的模式可以使这个很长的RegEx,我能正确理解吗?我可以使用ColdFusion进行检查以确保它在0-24范围内.如果我在这部分使用ColdFusion,那么这不是世界末日,但如果它不会导致它过长,那么将它全部放入RegEx会很好.这是我到目前为止:
^\d{0,2}((\.(0|00|25|5|50|75))?)$
除了0-24范围检查或仅检查零之外,它几乎可以处理所有这些操作.我会继续关注它,但任何帮助将不胜感激.谢谢!
我有IIS(Microsoft-IIS/7.5)返回403禁止,我无法弄清楚为什么.我把它缩小到了,%2F但只有当它前面有一个字母时.知道是什么原因引起的吗?
这些工作......
但是如果你把任何一个字母放在%2F它前面那就失败了403.
这些失败......
谢谢!
更新:我排除了ColdFusion,因为这给出了相同的403:http://example.com/mySite123/indexdotcfm? x = a%2F
更新:
Top Level IIs:
Checked:
Allow unlisted file name extensions
Allow unlisted verbs
Allow high-bit characters
Unchecked:
Allow double escaping
Request Limits:
Maximum allowed content length (Bytes): 30000000 Maximum URL length (Bytes):
4096 Maximum query string (Bytes): 2048
Sites
mySite123:
Checked:
Allow unlisted verbs
Allow high-bit characters
Unchecked:
Allow unlisted file name …Run Code Online (Sandbox Code Playgroud) 我必须在 PL/SQL 中验证 IPv6 地址。我从这里想出了正则表达式:Regular Expression (RegEx) for IPv6 Different from IPv4
我收到ORA-12733: regular expression too long错误。有没有办法解决?
if ( REGEXP_LIKE(v,'^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]1{0,1}[0-9]){0,1}[0-9]))$') ) then
self.success := 1;
self.message := null;
return;
else
self.success := 0;
self.message := 'Invalid IPv6 address. Example of a valid format: 2001:0db8:0000:0000:0000:ff00:0042:8329';
return;
end if;
Run Code Online (Sandbox Code Playgroud)
限制是512(/sf/answers/188588361/),我在657。我想不出有什么办法可以把它分开。
将 java 类导入 Oracle 是唯一的方法吗?https://community.oracle.com/thread/1149462?start=0&tstart=0
更新:我正在尝试这个,但是当我运行来select测试它时,它会抛出ORA-29531: no method isProperIPv6Address in class ipv6. 我以前没有在 Oracle 中搞过 java,所以我不确定我是否已经接近或者这是否是一个坏主意。(摘自https://community.oracle.com/message/8648095 …
我似乎无法找出为什么这个正则表达式不起作用PL/SQL.
if ( REGEXP_LIKE(v,'/^(?>(?>([a-f0-9]{1,4})(?>:(?1)){7}|(?!(?:.*[a-f0-9](?>:|$)){8,})((?1)(?>:(?1)){0,6})?::(?2)?)|(?>(?>(?1)(?>:(?1)){5}:|(?!(?:.*[a-f0-9]:){6,})(?3)?::(?>((?1)(?>:(?1)){0,4}):)?)?(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?>\.(?4)){3}))$/iD') ) then
Run Code Online (Sandbox Code Playgroud)
这是用于验证IPv4和IPv6,它来自这里:https://stackoverflow.com/a/1934546/3112803
不确定这是否与它有关但我也问过这个问题关于最后的D标志:这个正则表达式(RegEx)标志意味着什么/ iD
出于某种原因,这个正则表达式适用于我在本网站上的大部分测试:http://regex101.com/但在PL/SQL一切都无效.
我的意思最的是,有一些情况下,我觉得很失败,但我一直在寻找了几天,这是最好的一个我能找到的是在512个字符(512是限制使用时REGEXP_LIKE的PL/SQL)
我很感激任何帮助.谢谢!
这些是我正在使用的测试用例......
{1: Initial address, regex should say valid/match}
select isValid('2001:0db8:0000:0000:0000:ff00:0042:8329','ipv6') from dual;
{2: After removing all leading zeroes, regex should say valid/match}
select isValid('2001:db8:0:0:0:ff00:42:8329','ipv6') from dual;
{3: After omitting consecutive sections of zeroes, regex should say valid/match}
select isValid('2001:db8::ff00:42:8329','ipv6') from dual;
{4: The loopback address, regex …Run Code Online (Sandbox Code Playgroud) 我第一次玩MySql Events.这是活动......
DELIMITER $$
CREATE EVENT testEvent
ON SCHEDULE EVERY 1 minute STARTS '2014-01-01 03:00:00'
DO BEGIN
/*
INSERT INTO test(text) VALUES ('text');* <- THIS WORKS JUST FINE
*/
SET @exec_var = sys_exec('c:\wamp\bin\php\php5.4.12\php c:\mySite\testit.php');
END $$
DELIMITER;
Run Code Online (Sandbox Code Playgroud)
sys_exec()对php 的调用似乎不起作用,我无法弄清楚为什么.互联网上没有太多关于此的内容.我知道php脚本有效,因为当我c:\wamp\bin\php\php5.4.12\php c:\mySite\testit.php在命令行运行时,我得到了结果.testit.php只是执行与事件中注释掉的完全相同的插入.任何想法为什么sys_exec()不运行我的脚本?或者,如果有错误,我将如何记录或查看它们?
(我知道可能存在安全问题以及我还没有想到的其他事情.这只是概念内容的初步证明.但如果你看到任何理由我不应该沿着这条路走下去并使用PHP守护进程代替我我会对原因感兴趣.这种方式似乎比起学习/设置PHP守护进程要简单得多.
谢谢!
这就是testit.php脚本中的所有内容......
try
{
$dbh = new PDO("mysql:host=********;dbname=********", ********, ********);
$dbh->setAttribute( PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true );
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
}
catch(PDOException $e) { echo $e->getMessage(); }
$q1 = $dbh->prepare("INSERT INTO test(text) VALUES ('text')");
$q1->execute();
Run Code Online (Sandbox Code Playgroud) 在我的测试盒上,我有ColdFusion 10并且只分配了1gig:"最大JVM堆大小(以MB为单位)= 1024".
我有一个循环大约1000次的过程.每次循环迭代都会调用自定义标记〜200次.所以大约有200,000个电话.这个过程永远不会结束,我最终耗尽了记忆.我确定这是我在标签里面做的问题,而不是标签本身.但我想证明这一点.我跑这个测试,似乎ColdFusion的功能要快得多2.7secs,而不是14.6secs.测试只增加一个数字.
我的问题是:这似乎是一个有效的测试吗? 如果功能如此之快,那么尽可能使用它们而不是自定义标签是经验法则吗?
检测结果:
x = 0
Running good customtag 1000000 times...
x = 1000000
Time to complete: 14627
x = 0
Running good function 1000000 times...
x = 1000001
Time to complete: 2793
Run Code Online (Sandbox Code Playgroud)
good.cfm自定义标签:
<cfparam name="ATTRIBUTES.x" type="numeric" default="0">
<cfif thisTag.ExecutionMode eq "end">
<cfset request.x = ATTRIBUTES.x+1>
<cfset thistag.generatedcontent = "">
</cfif>
Run Code Online (Sandbox Code Playgroud)
测试代码:
<cffunction name="good" output="false" returntype="Numeric" access="private">
<cfargument name="numIn" type="numeric" required="true">
<cfset var x = 0>
<cfset x = arguments.numIn + …Run Code Online (Sandbox Code Playgroud) 假设ColdFusion 10,0,13,287689和Oracle Database 11g企业版11.2.0.2.0 - 64位生产.
有了这个例子......
<cfquery name="q" datasource="ds">
update someTable set
#form.col#label = <cfqueryparam cfsqltype="cf_sql_varchar" value="#x#">
where id = <cfqueryparam cfsqltype="cf_sql_decimal" value="#id#">
</cfquery>
Run Code Online (Sandbox Code Playgroud)
还假设没有数据验证检查#form.col#,如何利用它?显然,它们可能会导致查询失败并显示无效列,但由于多个语句无法在单个语句中运行,因此我没有看到任何更恶意的行为<cfquery>.所以像这样的东西不起作用......
#form.col#:
id = 1; delete from users; --comment everything else out...
Run Code Online (Sandbox Code Playgroud)
我知道使用SELECT会更容易利用联合来获取您无权查看的数据,但我对这个特定的更新语句很好奇.
coldfusion ×4
oracle ×4
plsql ×3
regex ×3
sql ×2
custom-tag ×1
daemon ×1
function ×1
iis ×1
ipv6 ×1
java ×1
memory ×1
mysql ×1
performance ×1
php ×1