首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PL/SQL: ORA-29481:隐式结果不能返回给客户端

PL/SQL: ORA-29481:隐式结果不能返回给客户端
EN

Stack Overflow用户
提问于 2016-11-15 21:15:11
回答 1查看 2.9K关注 0票数 1

我已经迁移了下面的过程MYSQL到ORACLE,迁移的版本也在下面给出。迁移过程已经被成功地执行,但是当我们在SQL Developer中运行这个过程时,当我们使用相应的参数打印"v_refcur“SYS_REFCURSOR结果时,它会给我错误: ORA-29481:隐式结果不能返回给客户端。

-来源Mysql

代码语言:javascript
运行
复制
DROP PROCEDURE IF EXISTS  `get_police_station_for_hierarchy` ;

DELIMITER $$

 CREATE  PROCEDURE `get_police_station_for_hierarchy`(officecd BIGINT,pstsaffcd VARCHAR(20))
BEGIN
DECLARE table_count INT;
DECLARE officerInCharge VARCHAR(20);
DROP TEMPORARY TABLE IF EXISTS   temp1;
DROP TEMPORARY TABLE IF EXISTS   temp2;
DROP TEMPORARY TABLE IF EXISTS  temp3;
DROP TEMPORARY TABLE IF EXISTS  temp4;
CREATE TEMPORARY TABLE temp1 (cd BIGINT,off_level INT);
CREATE TEMPORARY TABLE temp2 (cd BIGINT,off_level INT);
CREATE TEMPORARY TABLE temp3 (cd BIGINT,off_level INT);
CREATE TEMPORARY TABLE temp4 (cd BIGINT,off_level INT);

 SELECT OFFICE_INCHARGE_CD INTO officerInCharge FROM m_office_types  WHERE OFFICE_CD=officecd ;
 IF(officerInCharge=pstsaffcd) THEN
INSERT INTO temp1 
SELECT m_office_hierarchy.OFFICE_CD,m_office_types.OFFICE_TYPE_CD FROM m_office_hierarchy,m_office_types WHERE SUPERVISOR_OFFICE_CD =officecd
AND m_office_hierarchy.office_cd=m_office_types.office_cd AND m_office_hierarchy.lang_cd=m_office_types.lang_cd AND m_office_hierarchy.RECORD_STATUS <> 'D'
AND m_office_types.RECORD_STATUS <> 'D' AND m_office_types.OFFICE_TYPE_CD=7;
INSERT INTO temp2 
SELECT m_office_hierarchy.OFFICE_CD,m_office_types.OFFICE_TYPE_CD FROM m_office_hierarchy,m_office_types WHERE SUPERVISOR_OFFICE_CD=officecd
AND m_office_hierarchy.office_cd=m_office_types.office_cd AND m_office_hierarchy.lang_cd=m_office_types.lang_cd
AND m_office_hierarchy.RECORD_STATUS <> 'D' AND m_office_types.RECORD_STATUS <> 'D' AND m_office_types.OFFICE_TYPE_CD <> 7 ;
SELECT COUNT(*) INTO table_count FROM temp2;
WHILE (table_count>0)
DO 
INSERT INTO temp1 
SELECT m_office_hierarchy.OFFICE_CD,m_office_types.OFFICE_TYPE_CD FROM m_office_hierarchy,m_office_types WHERE SUPERVISOR_OFFICE_CD IN (SELECT cd FROM temp2)
AND m_office_hierarchy.office_cd=m_office_types.office_cd AND m_office_hierarchy.lang_cd=m_office_types.lang_cd
 AND m_office_hierarchy.RECORD_STATUS <> 'D' AND m_office_types.RECORD_STATUS <> 'D' AND m_office_types.OFFICE_TYPE_CD=7;
INSERT INTO temp3 
SELECT m_office_hierarchy.OFFICE_CD,m_office_types.OFFICE_TYPE_CD FROM m_office_hierarchy,m_office_types WHERE SUPERVISOR_OFFICE_CD IN (SELECT cd FROM temp2)
AND m_office_hierarchy.office_cd=m_office_types.office_cd AND m_office_hierarchy.lang_cd=m_office_types.lang_cd
AND m_office_hierarchy.RECORD_STATUS <> 'D' AND m_office_types.RECORD_STATUS <> 'D' AND m_office_types.OFFICE_TYPE_CD <> 7  AND m_office_hierarchy.OFFICE_CD NOT IN (SELECT cd FROM temp4) AND m_office_hierarchy.OFFICE_CD <> officecd ;
DELETE FROM temp2;
INSERT INTO temp2 SELECT * FROM temp3;
INSERT INTO temp4 SELECT * FROM temp3;
DELETE FROM temp3;
SELECT COUNT(*) INTO table_count FROM temp2;
END WHILE;
SELECT DISTINCT cd,M_OFFICE_TYPES.office_name FROM temp1,m_office_types WHERE temp1.cd=m_office_types.office_cd AND m_office_types.record_status <> 'D';
ELSE
SELECT '' ;
END IF ;
DROP TABLE  temp1;
DROP TABLE  temp2;
DROP TABLE  temp3;
DROP TABLE temp4;
END  $$
DELIMITER ;

迁移甲骨文过程?

代码语言:javascript
运行
复制
  create or replace PROCEDURE get_police_statn_for_hierarchy(officecd IN NUMBER,pstsaffcd IN VARCHAR2)
       as
         v_refcur SYS_REFCURSOR;
        table_count  NUMBER(10,0);
        officerInCharge  VARCHAR2(20);
    BEGIN
    -- This procedure was converted on Mon Nov 14 14:57:57 2016 using Ispirer SQLWays 7.0 Build 3434 64bit Licensed to prabhat.gang@gmail.com - prabhat - India (Demo License, Ispirer MnMTK 2015 Mysql to Oracle Database Migration, 1 month, 20161114).

       EXECUTE IMMEDIATE ' TRUNCATE TABLE temp1 ';
       EXECUTE IMMEDIATE ' TRUNCATE TABLE temp2 ';
       EXECUTE IMMEDIATE ' TRUNCATE TABLE temp3 ';

       INSERT INTO temp1
       SELECT m_office_hierarchy.OFFICE_CD,m_office_types.OFFICE_TYPE_CD FROM m_office_hierarchy,m_office_types WHERE SUPERVISOR_OFFICE_CD = officecd
       and m_office_hierarchy.office_cd = m_office_types.office_cd and m_office_hierarchy.lang_cd = m_office_types.lang_cd and m_office_hierarchy.RECORD_STATUS <> 'D'
       and m_office_types.RECORD_STATUS <> 'D' and m_office_types.OFFICE_TYPE_CD = 7;
       INSERT INTO temp2
       SELECT m_office_hierarchy.OFFICE_CD,m_office_types.OFFICE_TYPE_CD FROM m_office_hierarchy,m_office_types WHERE SUPERVISOR_OFFICE_CD = officecd
       and m_office_hierarchy.office_cd = m_office_types.office_cd and m_office_hierarchy.lang_cd = m_office_types.lang_cd
       and m_office_hierarchy.RECORD_STATUS <> 'D' and m_office_types.RECORD_STATUS <> 'D' and m_office_types.OFFICE_TYPE_CD <> 7;
       SELECT COUNT(*) INTO table_count FROM temp2;
       WHILE (table_count > 0) loop
    INSERT INTO temp1
          SELECT m_office_hierarchy.OFFICE_CD,m_office_types.OFFICE_TYPE_CD FROM m_office_hierarchy,m_office_types WHERE SUPERVISOR_OFFICE_CD IN(SELECT cd FROM temp2)
          and m_office_hierarchy.office_cd = m_office_types.office_cd and m_office_hierarchy.lang_cd = m_office_types.lang_cd
          and m_office_hierarchy.RECORD_STATUS <> 'D' and m_office_types.RECORD_STATUS <> 'D' and m_office_types.OFFICE_TYPE_CD = 7;
          INSERT INTO temp3
          SELECT m_office_hierarchy.OFFICE_CD,m_office_types.OFFICE_TYPE_CD FROM m_office_hierarchy,m_office_types WHERE SUPERVISOR_OFFICE_CD IN(SELECT cd FROM temp2)
          and m_office_hierarchy.office_cd = m_office_types.office_cd and m_office_hierarchy.lang_cd = m_office_types.lang_cd
          and m_office_hierarchy.RECORD_STATUS <> 'D' and m_office_types.RECORD_STATUS <> 'D' and m_office_types.OFFICE_TYPE_CD <> 7;
          DELETE FROM temp2;
          INSERT INTO temp2  SELECT * FROM temp3;
          DELETE FROM temp3;
          SELECT COUNT(*) INTO table_count FROM temp2;
          table_count := 100;
       end loop;
       open v_refcur for SELECT DISTINCT cd,M_OFFICE_TYPES.office_name FROM temp1,m_office_types WHERE temp1.cd = m_office_types.office_cd and m_office_types.record_status <> 'D';
       dbms_sql.return_result(v_refcur);

       EXECUTE IMMEDIATE ' TRUNCATE TABLE temp1 ';
       EXECUTE IMMEDIATE ' TRUNCATE TABLE temp2 ';
       EXECUTE IMMEDIATE ' TRUNCATE TABLE temp3 ';

       close v_refcur; 
    END;

在破坏上述过程时完成错误日志

ORA-29481:隐式结果不能返回给客户端

ORA-06512:"SYS.DBMS_SQL",第2785行

ORA-06512:"SYS.DBMS_SQL",第2779行

ORA-06512:在"CAS_USER.GET_POLICE_STATN_FOR_HIERARCHY",第38行

ORA-06512:第8行

我是甲骨文世界的新手,请帮助我解决上面的问题,这样我就可以在SQL中运行上面的过程来查看"v_refcur“SYS_REFCURSOR输出或结果游标。

EN

回答 1

Stack Overflow用户

发布于 2017-02-07 10:52:54

这可能是由于您的客户端驱动程序没有更新到12c。例如,当从Java调用存储过程时,请确保有最新的12c JDBC驱动程序,而不是11g驱动程序。

如果这里的问题与JDBC无关,我还提供了documented this in a separate Q&A

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40619805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档