Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 用于检查字符串中的无效字符的PL/SQL函数_Oracle_Plsql_Oracle Apex - Fatal编程技术网

Oracle 用于检查字符串中的无效字符的PL/SQL函数

Oracle 用于检查字符串中的无效字符的PL/SQL函数,oracle,plsql,oracle-apex,Oracle,Plsql,Oracle Apex,我试图在pl/sql中创建一个函数,该函数将接受一个字符串,并将该字符串拆分为一个数组,然后将拆分后的字符串数组与存储在数据库中的无效字符进行比较 我仍在试验中,因为遇到以下错误,所以没有测试apex_string.split: 错误7,1:PLS-00103:在预期以下情况之一时遇到符号DECLARE:begin function pragma procedure子类型current cursor delete在符号begin被替换为DECLARE继续之前存在 错误38:PLS-00103:在

我试图在pl/sql中创建一个函数,该函数将接受一个字符串,并将该字符串拆分为一个数组,然后将拆分后的字符串数组与存储在数据库中的无效字符进行比较

我仍在试验中,因为遇到以下错误,所以没有测试apex_string.split: 错误7,1:PLS-00103:在预期以下情况之一时遇到符号DECLARE:begin function pragma procedure子类型current cursor delete在符号begin被替换为DECLARE继续之前存在

错误38:PLS-00103:在预期以下情况之一时遇到文件结尾符号:begin case declare end EXCEPT for goto if loop mod null pragma raise return select update with with with 删除DECLARE关键字,因为它不是必需的

要使用以下命令迭代数组:

FOR splitcount IN 1 .. wordarray.COUNT LOOP
您不需要声明splitcount变量

不能多次读取光标。使用“选择”代替光标。。。大量收集到。。。并将无效值收集到一个集合中,您可以多次读取该集合

但是,看起来您可以将其简化很多:

在varchar2中创建无效的函数\u checkerinword 返回布尔值 是 有无效的整数; 开始 选择1 进了医院 从…起 选择SUBSTRinword,LEVEL,1作为ch 来自双重 逐级连接 删除DECLARE关键字,因为它不是必需的

要使用以下命令迭代数组:

FOR splitcount IN 1 .. wordarray.COUNT LOOP
您不需要声明splitcount变量

不能多次读取光标。使用“选择”代替光标。。。大量收集到。。。并将无效值收集到一个集合中,您可以多次读取该集合

但是,看起来您可以将其简化很多:

在varchar2中创建无效的函数\u checkerinword 返回布尔值 是 有无效的整数; 开始 选择1 进了医院 从…起 选择SUBSTRinword,LEVEL,1作为ch 来自双重
按级别连接我看到了这个问题并想,为什么要调用PL/SQL呢?这可以用SQL来回答

CREATE TABLE InvalidCharacter ( invalidchar ) AS
SELECT 'A' FROM DUAL UNION ALL
SELECT 'C' FROM DUAL UNION ALL
SELECT 'E' FROM DUAL;

select * from apex_string.split('ORACLE','')
where column_value not in (select invalidchar from invalidcharacter);

Result Sequence
---------------
O
R
L

我看到这个问题就想,为什么要调用PL/SQL呢?这可以用SQL来回答

CREATE TABLE InvalidCharacter ( invalidchar ) AS
SELECT 'A' FROM DUAL UNION ALL
SELECT 'C' FROM DUAL UNION ALL
SELECT 'E' FROM DUAL;

select * from apex_string.split('ORACLE','')
where column_value not in (select invalidchar from invalidcharacter);

Result Sequence
---------------
O
R
L

简单地删除declare,它是不需要的。简单地删除declare,它是不需要的。此SQL的准确部署将取决于您拥有的特定需求/输入,但它表明它可以在没有PL/SQL的情况下绑定。此SQL的准确部署将取决于您拥有的特定需求/输入,但它证明了它可以在没有PL/SQL的情况下绑定。