`

PL/SQL执行动态SQL

 
阅读更多
PL/SQL动态SQL 


依据: 
1.使用EXECUTE IMMEDIATE可以来执行动态SQL 
2.open cursor可以打开一个sql的查询,fetch cursor可以挨个获取查询记录 

示例 
1.使用EXECUTE IMMEDIATE查询一张数据表的记录数 

Sql代码  收藏代码
  1. DECLARE   
  2.   get_count_sql varchar2(100);  
  3.   row_count INT;  
  4. BEGIN  
  5.     get_count_sql:='select count(*) from bizbusinessbaseinfo';  
  6.     EXECUTE IMMEDIATE get_count_sql INTO row_count;  
  7.     dbms_output.put_line(row_count);  
  8. END;  


2.使用EXECUTE IMMEDIATE执行动态删除语句 

Sql代码  收藏代码
  1. DECLARE   
  2.   delete_sql varchar2(100);  
  3. BEGIN  
  4.     delete_sql:='delete from bizbusinessbaseinfo where bizname=''1''';  
  5.     execute immediate delete_sql;  
  6. END;  


3.执行动态DDL语句 

Sql代码  收藏代码
  1. DECLARE   
  2.   drop_sql varchar2(100);  
  3. BEGIN  
  4.     drop_sql:='DROP TABLE logrec_action';  
  5.     execute immediate drop_sql;  
  6. END;  


4.使用open cursor进行简单的动态查询 

Sql代码  收藏代码
  1. DECLARE   
  2.   query_sql varchar2(100);  
  3.   queryresult varchar2(50);  
  4.   bizcursor SYS_REFCURSOR;  
  5. BEGIN  
  6.     query_sql:='select bizname from bizbusinessbaseinfo';  
  7.     OPEN bizcursor FOR query_sql;  
  8.     loop  
  9.       fetch bizcursor into queryresult;  
  10.       --判读是否提取到值,没取到值就退出  
  11.       --取到值c_job%notfound 是false   
  12.       --取不到值c_job%notfound 是true  
  13.       exit when bizcursor%notfound;  
  14.       dbms_output.put_line(queryresult);  
  15.     end loop;  
  16.     --关闭游标  
  17.     close bizcursor;  
  18. END;  



5.动态查询出多个字段(需要先定义好输出结果的类型,不方便用在动态查询中) 

Sql代码  收藏代码
  1. DECLARE   
  2.   query_sql varchar2(100);  
  3.   queryresult varchar2(50);  
  4.   bizcursor SYS_REFCURSOR;  
  5.   type my_record is record(  
  6.        bizname varchar2(64),  
  7.        bizstatus char(1));  
  8.   my_rec my_record;  
  9. BEGIN  
  10.     query_sql:='select bizname,bizstatus from bizbusinessbaseinfo';  
  11.     OPEN bizcursor FOR query_sql;  
  12.     loop  
  13.       fetch bizcursor into my_rec;  
  14.       --判读是否提取到值,没取到值就退出  
  15.       --取到值c_job%notfound 是false   
  16.       --取不到值c_job%notfound 是true  
  17.       exit when bizcursor%notfound;  
  18.       dbms_output.put_line(my_rec.bizname|| '    ' ||my_rec.bizstatus);  
  19.     end loop;  
  20.     --关闭游标  
  21.     close bizcursor;  
  22. END;  

 

 

查询count

 

         --查询理赔次数

       

get_count_sql:=  'select  count(case  g.status when ''A'' then ''A'' end ) as countA ,
		count(case g.status when ''P'' then ''P'' end ) as countP  
		from gcAdjustmentPersonFee g ,GcAdjustmentPerson p
		where  g.lossNo=p.lossno and g.lossseqno=p.lossseqno and  g.paidserialno=p.paidserialno
		and  g.policyno='''||rec_selectInfoArgs.Policyno||''' and g.clientcode='''||rec_selectInfoArgs.Clientcode||'''
		and g.liabcode in (select * from table(str_split('''||rec_selectInfoArgs.Liabcode||''','',''))) and g.kindcode='''||rec_selectInfoArgs.Kindcode ||''''|| n_sql;

EXECUTE IMMEDIATE get_count_sql INTO n_countA,n_countP;  

n_remainlimit:=  rec_findGcPolicyLimitTemp.Shortlimit-n_countA;
n_predictlimit:=  rec_findGcPolicyLimitTemp.Shortlimit-n_countA-n_countP;
 

 

 

--查询多次条记录

 --记录表into类型

   

   bizcursor SYS_REFCURSOR; 
type my_record is record(  
      n_lossno gcpolicypaidhistorytemp.lossno%type,
      n_lossseqno gcpolicypaidhistorytemp.lossseqno%type,
      n_upload gcpolicypaidhistorytemp.upload%type); 
my_rec my_record;
n_historyId gcpolicypaidhistorytemp.historyid%type:=1;
 
 
get_detail_sql:='select  g.lossNo,g.lossSeqNo,m.dataUploadFlag
    from gcAdjustmentPersonFee g ,GcAdjustmentPerson p,gcAdjustmentMain m
     where  g.lossNo=p.lossno and g.lossseqno=p.lossseqno and  g.paidserialno=p.paidserialno and p.lossno=m.lossno and g.lossseqno=m.lossseqno
      and  g.policyno='''||rec_selectInfoArgs.Policyno||''' and g.clientcode='''||rec_selectInfoArgs.Clientcode||'''
      and g.liabcode in (select * from table(str_split('''||rec_selectInfoArgs.Liabcode||''','',''))) and g.kindcode='''||rec_selectInfoArgs.Kindcode ||''''|| n_sql;

OPEN bizcursor FOR get_detail_sql; 
loop fetch bizcursor into my_rec;  
 EXIT WHEN bizcursor%NOTFOUND; 
     insert into gcpolicypaidhistorytemp (historyId,limitId,policyno,endorseqno,endorno,lossNo,lossSeqNo,upload) 
	    values (n_historyId,rec_findGcPolicyLimitTemp.Limitid,rec_findGcPolicyLimitTemp.Policyno,rec_findGcPolicyLimitTemp.Endorseqno,rec_findGcPolicyLimitTemp.Endorno,
		   my_rec.n_lossno, my_rec.n_lossseqno, my_rec.n_upload);
	   n_historyId:=n_historyId+1;        
end loop;  
--关闭游标  
close bizcursor; 

 

  •  
分享到:
评论

相关推荐

    oracle10g_pl/sql

    - **嵌套SQL**:在PL/SQL代码中执行SQL查询,如SELECT INTO语句。 - **游标**:用于处理查询结果集,允许逐行访问数据。 5. **PL/SQL高级特性** - **记录类型**:自定义的数据结构,可以包含多个列。 - **表...

    一个对数据库的操作工具PL/SQLpl/sqL工具

    8. **动态SQL**:通过EXECUTE IMMEDIATE语句,可以执行在运行时构建的SQL语句,增强了程序的动态性。 9. **数据库链接**:允许用户从一个数据库访问另一个数据库的数据,实现分布式数据库操作。 10. **性能优化**...

    pl/sql最新中文手册

    8. **索引和性能优化**:手册可能也会涉及如何利用索引来提高PL/SQL程序的执行效率,以及如何分析和优化SQL语句。 9. **并发和锁定**:在多用户环境下,理解并发控制和锁定机制是必要的。手册可能会讨论如何处理...

    Oracle资料学习PL/SQL必备

    执行部分包含SQL语句和PL/SQL控制结构,如循环、条件判断等;异常处理部分用于捕获和处理程序运行时可能出现的错误。 2. **数据类型**:PL/SQL支持多种数据类型,包括数值类型(如NUMBER)、字符串类型(如VARCHAR2...

    pl/sql developer11.0

    PL/SQL Developer是一款由Allround Automations公司开发的专业Oracle数据库开发工具,专为编写、调试、测试和管理PL/SQL代码而设计。标题中的“pl/sql developer11.0”指的是该软件的第11个主要版本。在本文中,我们...

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...

    pl/sql64位

    PL/SQL是Oracle数据库系统中的一个关键组件,全称为Procedural Language/Structured Query Language,是一种结合了SQL和过程编程语言的工具,主要用于编写数据库应用程序。64位的PL/SQL开发者工具对于那些处理大数据...

    oracle 9i pl/sql程序设计笔记

    ### Oracle 9i PL/SQL程序设计笔记精要 #### PL/SQL基础知识概览 **标题与描述**:本文档围绕“Oracle 9i PL/SQL程序设计笔记”这一核心主题,深入探讨了PL/SQL语言的基础知识及其在Oracle 9i数据库环境中的应用。...

    ORACLE PL/SQL从入门到精通

    过程是PL/SQL中一种用来封装逻辑的单元,它包含了一系列的SQL语句和PL/SQL代码,可以执行特定的任务。过程与匿名程序块的区别在于它具有名称和参数,能够被重复调用。创建过程的语法中涉及到参数模式,包括IN、OUT、...

    PL/SQL VCS插件安装包+PL/SQL

    VCS插件将VSS的这些功能无缝集成到PL/SQL Developer中,允许开发者直接在PL/SQL环境中执行版本控制操作,如添加、删除、检查出、提交代码。 在安装PL/SQL VCS插件的过程中,用户需要首先确保已经安装了PL/SQL ...

    Oracle PL/SQL程序设计(第5版)(上下册)

    - **动态SQL**:探讨如何构造和执行动态SQL语句,这对于需要根据运行时条件生成SQL的情况非常有用。 - **SQL*Plus命令**:介绍一些常用的SQL*Plus命令,如SET、SPOOL、COLUMN等,这些命令可以增强SQL查询的输出格式...

    oracle pl/sql从入门到精通 配套源代码

    PL/SQL是Oracle数据库的内置编程语言,由块构成,包括声明部分、执行部分和异常处理部分。块可以是匿名块(即直接在SQL*Plus或其他工具中编写的一次性执行的代码),也可以是存储过程、函数、触发器、包等可重用的...

    pl/sql 免安装,绿色版pl/sql

    它提供了对PL/SQL代码的编写、调试、执行以及数据库对象的管理等功能。通过这个工具,你可以轻松地查看、编辑和执行SQL查询,管理表、视图、存储过程、触发器等数据库对象,同时还能进行数据导入导出和数据库备份...

    PL/SQL 基本知识

    例如,在`jbpm.sql`文件中,可能包含了与业务流程管理(BPM)相关的PL/SQL存储过程或函数,用于定义和执行工作流任务。 此外,PL/SQL还支持块的概念,如匿名块,这使得在不创建独立的存储过程或函数的情况下,也能...

    pl/sql快捷插件

    这款软件为Oracle数据库管理员、开发人员和测试人员提供了便捷的SQL和PL/SQL编写、调试和执行功能。而“pl/sql快捷插件”则是针对PL/SQL Developer的一个增强工具,它旨在提高用户的开发效率和工作流程。 PL/SQL...

    PL/SQL Developer 远程连接Oracle数据库

    8. **性能监控**:尽管是远程连接,PL/SQL Developer仍然可以显示执行计划、统计信息和性能指标,帮助分析和优化SQL查询。 9. **版本控制集成**:PL/SQL Developer可以与各种版本控制系统(如Git、SVN)集成,这...

    PL/SQL下载

    5. **动态SQL**:允许在运行时构造和执行SQL语句,增强了灵活性。 **PL/SQL Developer** PL/SQL Developer是一款专为Oracle数据库开发设计的集成开发环境(IDE),它的主要功能包括: 1. **源代码编辑器**:提供...

    PL/SQL编程基础知识

    如果需要在PL/SQL中执行DDL操作,则需要通过动态SQL来实现。 #### 二、PL/SQL块结构 **2.1 PL/SQL块** PL/SQL程序通常由以下三个部分组成: - **声明部分**:用于声明变量、游标、局部存储过程和函数等。 - **...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    1. **基础语法**:PL/SQL是过程化SQL,它包含声明部分、执行部分和异常处理部分。声明部分用于定义变量、常量和游标;执行部分包含了SQL语句和流程控制结构,如循环、条件判断等;异常处理部分则用于捕获和处理运行...

    Oracle PL/SQL程序设计(第5版)(套装上下册)

    《Oracle PL/SQL程序设计(第5版)(套装上下册)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何...

Global site tag (gtag.js) - Google Analytics