当我执行以下查询时,它将返回C507, 但是当我将其用作存储过程之一的子查询时,它仅返回C。
SELECT *
FROM ( SELECT MAX (REGEXP_SUBSTR ('C507|C507',
'[^|]+',
1,
LEVEL))
serial
FROM DUAL
CONNECT BY LEVEL <=
LENGTH ('C507|C507')
- LENGTH (REPLACE ('C507|C507', '|', ''))
+ 1);
答案 0 :(得分:0)
我没看到任何问题(如果您的方式不同,请告诉我们):
null
hi
null
答案 1 :(得分:0)
猜测您的实际工作有点困难(因为您发布了具有不同输入数据的不同查询,并且注释中未格式化),所以-看一个例子。
我修改了您的上一个查询,以使其返回DEP_ID
列中的MAX
和NAME
部分。
SQL> CREATE TABLE dept
2 (
3 dep_id NUMBER,
4 name VARCHAR2 (50)
5 );
Table created.
SQL> INSERT INTO dept VALUES (1, 'mirko|mirko');
1 row created.
SQL> INSERT INTO dept VALUES (2, 'angelo|angelo');
1 row created.
SQL> INSERT INTO dept VALUES (3, 'angelo|mirko');
1 row created.
SQL> SELECT * FROM dept;
DEP_ID NAME
---------- --------------------------------------------------
1 mirko|mirko
2 angelo|angelo
3 angelo|mirko
SQL>
SQL> SELECT d.dep_id,
2 MAX (REGEXP_SUBSTR (d.name,
3 '[^|]+',
4 1,
5 LEVEL))
6 serial
7 FROM dept d
8 WHERE dep_id = &par_dep_id
9 CONNECT BY LEVEL <= LENGTH (d.name) - LENGTH (REPLACE (d.name, '|', '')) + 1
10 GROUP BY d.dep_id;
Enter value for par_dep_id: 1
DEP_ID SERIAL
---------- --------------------------------------------------
1 mirko
SQL> /
Enter value for par_dep_id: 2
DEP_ID SERIAL
---------- --------------------------------------------------
2 angelo
SQL> /
Enter value for par_dep_id: 3
DEP_ID SERIAL
---------- --------------------------------------------------
3 mirko
SQL>
说存储过程有问题:您应该发布(通过编辑初始消息)其代码。它是一个过程,还是一个函数?查询返回2个值-该过程是否有2个OUT参数?如果它是一个函数,它将返回什么(什么数据类型)?
从我的角度来看,按原样可以进行查询,但是-如果没有问题,您不会在此处发布问题,但不清楚哪个你有问题。
再次:建议您发布自己的SQL * Plus会话的复制/粘贴,以便我们可以看到您的操作以及Oracle的响应方式。没有它,我们只是盲目猜测。
答案 2 :(得分:0)
我为此查询创建了一个函数,并在我的SP上调用它,而不是将其用作存储过程中的子查询。