热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

帮帮俺,oracle调用存储过程向临时表插数据后,临时表里面什么也没有?

小弟用建了一个存储过程,并定义了一个事务级临时表,我在存储过程里用executeimmediatexxxxxx向临时表插数据,但是什么都没插进去(也没报错)。但是我把这个插入语句提出来在
小弟用建了一个存储过程,并定义了一个事务级临时表,我在存储过程里用execute immediate 'xxxxxx'   向临时表插数据,但是什么都没插进去(也没报错)。但是我把这个插入语句提出来在外面用程序块执行就可以顺利插入表中。试了好久了,任然搞不懂……泪奔求大侠啊………………
create or replace 
PACKAGE body CatchTask
IS
  Procedure retrieveUnfinishedTaskForUser( 
  return_list out type_weakcursor,
  --catchSqls
  catchSql in clob,
  --username
  userName in lsw_usr_xref.user_name%type,
  --the number of task needed
  catchRowsNumber in number)
AS
  countt number(10);
  --装sqls的临时Stirng
   v_temp_sqls clob;
  --装sqls的游标
  v_cath_sqls type_weakcursor;
  --装一句sql的String
  v_one_sql varchar2(32000);
  --装入temp表数据条数
  v_temp_count number(20);
  
  v_own_count NUMBER(10);
  v_count NUMBER(10);
  v_catched_tasks type_weakcursor;
  v_basesql_part1 varchar2(200);
  v_basesql_part2 varchar2(200);
  v_basesql_part3 varchar2(5000);
  v_basesql varchar2(5000);
  v_catchsql varchar2(5000);
  v_searchsql varchar2(5000);
BEGIN

  
  --count the amount 'v_reallycatch_count'  that the amount of task what still need to be catched after minusing the already owned tasks 
  SELECT COUNT(*) INTO v_own_count FROM lsw_task t LEFT JOIN lsw_usr_xref u ON t.user_id=u.user_id WHERE status in (11,12) and u.user_name = userName;
    --SYS.dbms_output.put_line(v_own_count||' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
  --the  really amount of tasks need to be caught 
  
  v_count := (catchRowsNumber - v_own_count);
  --SYS.dbms_output.put_line(v_count||' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
  v_basesql_part1 := '';
  v_basesql_part3 := 'SELECT * FROM  
  (SELECT 0+0 catched, taskDetail.* , LSW_USR_XREF.USER_NAME AS taskDealPerson FROM 
    (SELECT to_char(lt.due_date,''YYYY-MM-DD HH24:MI:SS'') taskDueDate,       
    lt.task_id taskId,  lt.user_id,
    to_char(lt.read_datetime,''YYYY-MM-DD HH24:MI:SS'') readDate,       
    to_char(lt.rcvd_datetime,''YYYY-MM-DD HH24:MI:SS'') createDate,     
    lt.status,
    (CASE WHEN lt.user_id<0 AND lt.status IN (''11'',''12'') THEN ''TSA001''  
          WHEN lt.user_id>0 AND lt.status IN (''11'',''12'') THEN ''TSA002''       
          WHEN lt.user_id>0 AND lt.status IN (''32'')      THEN ''TSA003'' END )AS taskStatus,    
    liv.*     FROM LSW_TASK lt     LEFT JOIN     
      (SELECT LSW_BPD_INSTANCE_VARIABLES.BPD_INSTANCE_ID AS bpdInstanceId,       
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''businessNo'', STRING_VALUE,NULL)) businessNo,      
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''taskType'', STRING_VALUE,NULL)) taskType,      
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''carNo'', STRING_VALUE,NULL)) carNo,       
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''policyHolder'', STRING_VALUE,NULL)) policyHolder,      
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''insuredPerson'', STRING_VALUE,NULL)) insuredPerson,      
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''riskClass'', STRING_VALUE,NULL)) riskClass,     
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''risk'', STRING_VALUE,NULL)) risk,  
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''organization'', STRING_VALUE,NULL)) organization,     
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''submitTime'', STRING_VALUE,NULL)) submitTime ,       
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''submitPosition'', STRING_VALUE,NULL)) submitPosition ,    
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''limitTimeInterval'', INT_VALUE,NULL)) limitTimeInterval,    
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''caseDueDate'', STRING_VALUE,NULL)) caseDueDate ,    
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''priority'', STRING_VALUE,NULL)) priority ,      
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''customerType'', STRING_VALUE,NULL)) customerType ,  
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''reInsurancedStatus'', STRING_VALUE,NULL)) reInsurancedStatus ,    
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''taskTypeCode'', STRING_VALUE,NULL)) taskTypeCode ,    
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''riskClassCode'', STRING_VALUE,NULL)) riskClassCode ,   
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''riskCode'', STRING_VALUE,NULL)) riskCode ,    
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''organizationCode'', STRING_VALUE,NULL)) organizationCode ,    
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''submitPositionCode'', STRING_VALUE,NULL)) submitPositionCode ,  
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''priorityCode'', STRING_VALUE,NULL)) priorityCode ,     
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''customerTypeCode'', STRING_VALUE,NULL)) customerTypeCode,   
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''reInsurancedStatusCode'', STRING_VALUE,NULL)) reInsurancedStatusCode,     
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''taskLevelCode'', STRING_VALUE,NULL)) taskLevelCode,       
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''taskLabel'', STRING_VALUE,NULL)) taskLabel,        
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''taskLabelCode'', STRING_VALUE,NULL)) taskLabelCode,    
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''channel'', STRING_VALUE,NULL)) channel,       
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''channelCode'', STRING_VALUE,NULL)) channelCode,      
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''urgentDegreeCode'', STRING_VALUE,NULL)) urgentDegreeCode,   
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''bizTypeCode'', STRING_VALUE,NULL)) bizTypeCode,     
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''businessType'', STRING_VALUE,NULL)) businessType,    
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''submitTimes'', INT_VALUE,NULL)) submitTimes,     
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''lastReturnUserId'', STRING_VALUE,NULL)) lastReturnUserId,     
              MAX( DECODE(LSW_BPD_INSTANCE_VARIABLES.ALIAS,''orderValue'', INT_VALUE,NULL)) orderValue  
                FROM lsw_bpd_instance_variables  GROUP BY LSW_BPD_INSTANCE_VARIABLES.BPD_INSTANCE_ID) liv    
                ON liv.bpdInstanceId = lt.bpd_instance_id  ) taskdetail  
                LEFT JOIN LSW_USR_XREF  ON
                taskdetail.USER_ID = LSW_USR_XREF.USER_ID   ) WHERE 1 = 1 '||' and status in (''11'',''12'')';
    v_searchsql := v_basesql_part1 || v_basesql_part3|| ' and taskdealPerson = '''|| userName||'''';

  IF  v_count>0 THEN 

     -- v_temp_sqls := catchSql;
     -- v_temp_sqls := 'select * from lsw_user_xref where user_id = 1 # select * from lsw_user_xref where user_id = 1 # select * from lsw_user_xref where user_id = 1';
      open v_cath_sqls for SELECT REGEXP_SUBSTR (catchSql, '[^#]+', 1,rownum)
      FROM DUAL
      CONNECT BY ROWNUM <= LENGTH (catchSql) - LENGTH (REPLACE (catchSql, '#',''))+1;

        fetch v_cath_sqls into v_one_sql;
        while v_cath_sqls%found loop
        dbms_output.put_line('sqls : '||v_one_sql);
        execute immediate 'insert into temptask'|| v_one_sql;
        select count(*) into countt from temptask;
        SYS.dbms_output.put_line(countt);

        select count(*) into v_temp_count from  temptask;
        v_count := v_count-v_temp_count;
        exit when v_count<=0;
        --dbms_output.put_line(v_one_sql);
        fetch v_cath_sqls into v_one_sql;
        end loop;

        close v_cath_sqls;
        --返回结果(已有任务和抓取的任务)
        --dbms_output.put_line('bbbb : '||v_searchsql || ' union select * from temptask where rownum <='||v_count);
        open return_list for v_searchsql || 'union select * from temptask where rownum <='||v_count;

   ------------------------------------------------------------------------------------------------------------
  ELSE
     -- OPEN return_list FOR 
        open return_list for v_searchsql;
  END IF;
END;
END CatchTask;

2 个解决方案

#1


fetch v_cath_sqls into v_one_sql;
        while v_cath_sqls%found loop
        dbms_output.put_line('sqls : '||v_one_sql);
        execute immediate 'insert into temptask'|| v_one_sql;
        select count(*) into countt from temptask;
        SYS.dbms_output.put_line(countt);

这里countt是temptask中表的记录数,执行了execute immediate 'insert into temptask'|| v_one_sql;语句后,表里面还是什么都没有,但是提出来单独执行,表中就顺利插入了数据。

#2


用PL/SQL DEV单步调试一下

推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了在MySQL8.0中如何查看性能并解析SQL执行顺序。首先介绍了查询性能工具的开启方法,然后详细解析了SQL执行顺序中的每个步骤,包括from、on、join、where、group by、having、select distinct、union、order by和limit。同时还介绍了虚拟表的概念和生成过程。通过本文的解析,读者可以更好地理解MySQL8.0中的性能查看和SQL执行顺序。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • MySQL插入数据的四种方式及安全性分析
    本文介绍了MySQL插入数据的四种方式:插入完整的行、插入行的一部分、插入多行和插入查询结果,并对其安全性进行了分析。在插入行时,应注意字段的定义和赋值,以提高安全性。同时指出了使用insert语句的不安全性,应尽量避免使用。建议在表中定义相关字段,并根据定义的字段赋予相应的值,以增加插入操作的安全性。 ... [详细]
  • Explain如何助力SQL语句的优化及其分析方法
    本文介绍了Explain如何助力SQL语句的优化以及分析方法。Explain是一个数据库SQL语句的模拟器,通过对SQL语句的模拟返回一个性能分析表,从而帮助工程师了解程序运行缓慢的原因。文章还介绍了Explain运行方法以及如何分析Explain表格中各个字段的含义。MySQL 5.5开始支持Explain功能,但仅限于select语句,而MySQL 5.7逐渐支持对update、delete和insert语句的模拟和分析。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
author-avatar
mobiledu2502885323
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有