sql开发人员和存储过程之间的输出不一致

时间:2018-06-20 06:14:30

标签: oracle plsql oracle11g

当我执行以下查询时,它将返回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);

3 个答案:

答案 0 :(得分:0)

我没看到任何问题(如果您的方式不同,请告诉我们):

null 
hi
null

答案 1 :(得分:0)

猜测您的实际工作有点困难(因为您发布了具有不同输入数据的不同查询,并且注释中未格式化),所以-看一个例子。

我修改了您的上一个查询,以使其返回DEP_ID列中的MAXNAME部分。

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上调用它,而不是将其用作存储过程中的子查询。