`
melet
  • 浏览: 69674 次
  • 性别: Icon_minigender_1
  • 来自: 海南-临高
社区版块
存档分类
最新评论

PL/SQL编程(高级特性)

    博客分类:
  • DB
阅读更多
下文为plsql编程中高级特性的应用实例。以供大家在编程时参考。
sql 代码
  1. /*********************************************************   
  2.                                                 
  3.    Author:qinyangzhao                                  
  4.    describe:PL/SQL记录记录 (type is record)                             
  5.                                                       
  6. *********************************************************/   
  7. set serveroutput on--打开显示模式   
  8. declare  
  9.     type cust_record_type is record(--定义记录类型   
  10.         name customer.name%type,--声明标量变量   
  11.         total ord.total%type--声明记录变量   
  12.     );   
  13.     cust_record cust_record_type;   
  14. begin  
  15.     select a.name ,b.total ,into cust_record   
  16.     from customer a ,ord b   
  17.     where a.customer_id=b.customer_id and b.ord_id=&id;   
  18.     dbms_output.put_line('客户名'||cust_record.name);   
  19.     dbms_output.put_line('订单总额:'||cust_record.total);   
  20. end;     
  21. /*********************************************************   
  22.                                                       
  23.    Author:qinyangzhao                                  
  24.    describe:%rowtype属性(rowtype)                              
  25.                                                        
  26. *********************************************************/   
  27. delcare   
  28.     product_record product%rowtype;   
  29. begin  
  30.     product_record.product_id:=&id;   
  31.     product_record.description:='&description';   
  32.     insert into product values product_record;   
  33. end;     
  34. /*********************************************************   
  35.                                                        
  36.    Author:qinyangzhao                                  
  37.    describe:索引表(table)                               
  38.                                                        
  39. *********************************************************/       
  40. declare  
  41.     type item_table_type is table of item.ename%type   
  42.     index by pls_integer;   
  43.     item_table item_table_type;   
  44. begin  
  45.     select * bulk collect into item_table(-1)   
  46.     from item where ord_id=&id;      
  47.     dbms_output.put_line('条款编号:'||item_table(-1));   
  48.        
  49. end;           
  50.   
  51. /*********************************************************   
  52.                                                        
  53.    Author:qinyangzhao                                  
  54.    describe:嵌套表(table)                               
  55.                                                        
  56. *********************************************************/       
  57. declare  
  58.     type item_table_type is table of item.ename%type;      
  59.     item_table item_table_type;   
  60. begin  
  61.     item_table:=item_table_type('mary','mary','mary');   
  62.     select ename into item_table(2) from item   
  63.     where empno=&no;   
  64.     dbms_output.put_line('雇员名:'||item_table(2));   
  65. end;     
  66. /*********************************************************   
  67.                                                       
  68.    Author:qinyangzhao                                  
  69.    describe:变长数组(array)                                
  70.                                                       
  71. *********************************************************/   
  72. declare  
  73.   
  74.     type name_array_type is varray(20) of varchar2(30);   
  75.     type city_array_type is varray(20) of varchar2(30);   
  76.     name_array name_array_type;   
  77.     city_array city_array_type;   
  78. begin           
  79.     select name ,city bulk collect   
  80.         into name_array,city_array from customer;   
  81.     for i in 1..name_array.count loop   
  82.         dbms_output.put_line('客户名:'||name_array(i)||',所在城市:'||city_array(i));   
  83.     end loop;       
  84. end;   
  85. /*********************************************************   
  86.                                                        
  87.    Author:qinyangzhao                                  
  88.    describe:记录表(table)                               
  89.                                                        
  90. *********************************************************/       
  91. declare  
  92.     type item_table_type is table of item%rowtype   
  93.     index by pls_integer;   
  94.     item_table item_table_type;   
  95. begin  
  96.     select * bulk collect into item_table   
  97.     from item where ord_id=&id;   
  98.     for i in 1..item_table.count loop   
  99.         dbms_output.put_line('条款编号:'||item_table(i).item_id||',总价:'||   
  100.             item_table(i).total);   
  101.      end loop;   
  102. end;        
  103. /*********************************************************   
  104.                                                        
  105.    Author:qinyangzhao                                  
  106.    describe:多级(varray)                               
  107.                                                        
  108. *********************************************************/     
  109. declare  
  110.     type al_varray_type is varray(10) of int;--定义一维varray   
  111.     type nal_varray_type is varray(10) of al_varray_type;--定义二维varrary集合   
  112.     --初始化二维集合变量   
  113.     nvl nal_varrary_type:=nal_varrary_type(   
  114.         al_varray_type(58,100,102),   
  115.         al_varray_type(55,6,73),   
  116.         al_arrary_type(2,4));   
  117. begin  
  118.     dbms_output.put_line('显示二维数组所有元素');   
  119.     for i in 1..nvl.count loop   
  120.         for j in 1..nvl(i).count loop   
  121.             dbms_output.put_line('nvl('||i||','||j||')='||nvl(i,j));   
  122.         end loop;   
  123.     end loop;   
  124. end;                       
  125. /*********************************************************   
  126.                                                        
  127.    Author:qinyangzhao                                  
  128.    describe:多级(嵌套)                               
  129.                                                        
  130. *********************************************************/     
  131. declare  
  132.     type al_table_type is table of int;--定义一维嵌套表   
  133.     type nal_table_type is table of al_table_type;--定义二维嵌套表集合   
  134.     --初始化二维集合变量   
  135.     nvl nal_varrary_type:=nal_varrary_type(   
  136.         al_varray_type(58,100,102),   
  137.         al_varray_type(55,6,73),   
  138.         al_arrary_type(2,4));   
  139. begin  
  140.     dbms_output.put_line('显示二维数组所有元素');   
  141.     for i in 1..nvl.count loop   
  142.         for j in 1..nvl(i).count loop   
  143.             dbms_output.put_line('nvl('||i||','||j||')='||nvl(i,j));   
  144.         end loop;   
  145.     end loop;   
  146. end;     
  147. /*********************************************************   
  148.                                                        
  149.    Author:qinyangzhao                                  
  150.    describe:多级(索引表)                               
  151.                                                        
  152. *********************************************************/     
  153. declare  
  154.     type al_table_type is table of int  
  155.     index by binary_integer;--定义一维table   
  156.     type nal_table_type is table of al_table_type   
  157.     index by binary_integer;--定义二维table集合       
  158.     nvl nal_varrary_type;   
  159. begin  
  160.     --初始化二维集合变量   
  161.     nvl(1)(1):=10;   
  162.     nvl(1)(2):=5;   
  163.     nvl(2)(1):=32;   
  164.     nvl(2)(2):=88;   
  165.     dbms_output.put_line('显示二维数组所有元素');   
  166.     for i in 1..nvl.count loop   
  167.         for j in 1..nvl(i).count loop   
  168.             dbms_output.put_line('nvl('||i||','||j||')='||nvl(i,j));   
  169.         end loop;   
  170.     end loop;   
  171. end;                 
  172. /*********************************************************   
  173.                                                        
  174.    Author:qinyangzhao                                  
  175.    describe:处理多行查询语句                              
  176.                                                        
  177. *********************************************************/                     
  178. declare  
  179.    type empcurtyp is ref cursor;   
  180.    emp_cv empcurtyp;   
  181.    emp_record emp%rowtype;   
  182.    sql_stat varchar2(100);   
  183. begin  
  184.    sql_stat:='select * from emp where deptno:=dno';   
  185.    open emp_cv for sql_stat using &dno;   
  186.    loop   
  187.        fetch emp_cv into emp_record;   
  188.        exit when emp_cv%notfound ;   
  189.        dbms_output.put_line('雇员名:'||emp_record.ename||',工资:'||emp_record.sal);   
  190.    end loop;   
  191.    close emp_cv;   
  192. end;   
  193. /*********************************************************   
  194.                                                        
  195.    Author:qinyangzhao                                  
  196.    describe:使用bulk子句处理dml语句返回子句                             
  197.                                                        
  198. *********************************************************/       
  199. declare      
  200.     type ename_table_type is table of emp.ename%type   
  201.       index by binary_integer;   
  202.     type sal_table_type is table of emp.sal%type   
  203.       index by binary_integer;   
  204.       ename_table ename_table_type;   
  205.       sal_table sal_table_type;   
  206.       sql_stat varchar2(100);   
  207. begin  
  208.     sql_stat:='update emp set sal=sal*(1+:percent/100)'   
  209.            ||'where deptno=:dno'   
  210.            ||'returning ename,sal into :name,:salary';   
  211.     execute immediate sql_stat using &percen ,&dno returning bulk collect into ename_table,sal_table;   
  212.     for i in 1..ename_table.count loop   
  213.        dbms_output.put_line('雇员:'||ename_table(i)   
  214.              ||',的新工资为'|| sal_table(i));   
  215.     end loop;                            
  216. end;     
  217. /*********************************************************   
  218.                                                        
  219.    Author:qinyangzhao                                  
  220.    describe:使用bulk子句处理多行查询                             
  221.                                                        
  222. *********************************************************/         
  223. declare    
  224.     type ename_table_type is table of emp.ename%type   
  225.        index by binary_integer;   
  226.     ename_table ename_table_type;   
  227.     sql_stat varchar2(100);   
  228. begin  
  229.     sql_stat:='select ename from emp where deptno+:dno';   
  230.     execute immediate sql_stat bulk collect into ename_table using &dno;   
  231.     for i in 1..ename_table.count loop   
  232.         dbms_output.put_line(ename_table(i));   
  233.     end loop;       
  234. end;   
  235. /*********************************************************   
  236.                                                        
  237.    Author:qinyangzhao                                  
  238.    describe:在fetch语句中使用bulk子句                           
  239.                                                        
  240. *********************************************************/       
  241. declare     
  242.     type empcurtyp is ref cursor;   
  243.     emp_cv empcurtyp ;   
  244.     type ename_table_type is table of emp.ename%type   
  245.        index by binary_integer;   
  246.     ename_table ename_table_type;   
  247.     sql_stat varchar2(100);   
  248. begin  
  249.     sql_stat:='select ename from emp where job:title';   
  250.     open emp_cv for sql_stat using '&job';   
  251.     fetch emp_cv bulk collect into ename_table;   
  252.     for i in 1..ename_table.count loop   
  253.       dbms_output.put_line(ename_table(i));   
  254.     end loop;   
  255.     close emp_cv;   
  256. end;               
  257.  /*********************************************************   
  258.                                                        
  259.    Author:qinyangzhao                                  
  260.    describe:在forall语句中使用bulk子句                           
  261.                                                        
  262. *********************************************************/        
  263. declare  
  264.     type ename_table_type is table of emp.ename%type;   
  265.     type sal_table_type is table of emp.sal%type;   
  266.     ename_table ename_table_type;   
  267.     sal_table sal_table_type;   
  268.     sql_stat varchar2(100);   
  269. begin  
  270.     ename_table:=name_table_type('scott','smith','clark');   
  271.     sql_stat:='update emp set sal=sal*1.1 where ename=:1'   
  272.            ||'returning sal into :2';   
  273.     forall i in 1..ename_talbe.count  
  274.         execute immediate sql_stat using ename_table(i)   
  275.             returing bulk collect into sal_table ;   
  276.     for j in 1..ename_table.count loop   
  277.         dbms_output.put_line('雇员'||ename_table(j)          
  278.             ||'的新工资为'||sal_table(j));   
  279.     end loop;   
  280. end;              
分享到:
评论

相关推荐

    oracle10g_pl/sql

    5. **PL/SQL高级特性** - **记录类型**:自定义的数据结构,可以包含多个列。 - **表类型**:定义动态大小的表格,可以存储多个记录。 - **游标变量**:用于存储游标状态,可以在PL/SQL中传递和操作。 - **包**...

    PL/SQL基础编程,实例自写

    PL/SQL为Oracle数据库的开发人员提供了一个强大而灵活的工具集,不仅简化了复杂数据处理任务的实现,还通过其内置的异常处理和模块化特性,提高了应用程序的稳定性和可维护性。掌握PL/SQL对于任何希望在Oracle环境下...

    精通oracle10g PL/SQL编程

    本书《精通Oracle10g PL/SQL编程》为读者提供了一个系统性的学习路径,从基础知识到高级应用,从具体技巧到最佳实践,涵盖了PL/SQL编程的方方面面。通过本书的学习,读者将能够有效地提高Oracle数据库编程的效率和...

    Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发

    通过学习这些内容,开发者可以掌握Oracle PL/SQL的高级特性,从而设计和实现更高效、更稳定的数据库应用程序。无论你是数据库管理员、系统架构师还是开发人员,这本书都将为你提供宝贵的指导,助你在Oracle数据库...

    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以及如何有效地使用它。...

    pl/sql developer11.0

    10. **帮助文档**:附带的使用说明(如"使用说明.txt"文件)通常会详细介绍软件的安装步骤、基本操作和高级特性,帮助用户快速上手。 此外,"欧普软件园.url"可能是指向一个提供软件下载和相关资源的网站链接,用户...

    精通oracle 10g pl/sql编程

    书中的内容覆盖了PL/SQL编程的基础知识和高级特性,从基础的语法和结构到复杂的存储过程和函数的编写,再到错误处理和性能优化,均进行了详尽的阐述。本书在介绍PL/SQL基础知识的同时,也与Oracle 10g的实际使用紧密...

    oracle pl/sql 编程

    《Oracle Database 10g PL/SQL编程》一书覆盖了PL/SQL语言的基础语法、高级特性以及最佳实践。以下是一些核心章节的概述: #### 第1章:PL/SQL基础 这一章节将介绍PL/SQL的基本概念,包括数据类型、变量声明、常量...

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

    #### 一、PL/SQL编程基础 - **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL查询的基础上添加控制流语句、变量定义、错误处理等特性...

    PL/SQL编程

    创建和应用包是PL/SQL编程中的一项重要内容,它不仅有助于封装和重用代码,还能够提高代码的安全性和可维护性。包可以定义过程和函数,还可以包含变量、常量和异常等其他对象。 PL/SQL中的触发器可以分为DML触发器...

    Oracle 12c PL/SQL程序设计终极指南

    PL/SQL本身涉及的知识点浩瀚、庞杂...当然,最为重要的还是内容本身,本书首先对PL/SQL的理论基础进行了全面的介绍,其次详细讲解PL/SQL开发的所有功能模块、方法和技巧,最后对它的各种高级特性也进行了深入探讨。

    Oracle PL/SQL编程详解

    Oracle PL/SQL编程详解是Oracle数据库开发人员必须掌握的技术之一。Oracle PL/SQL是一种用于Oracle数据库系统的程序设计语言,它是SQL语言的扩展,包含了许多能增加程序可读性和模块化的特性。PL/SQL代码被编译成...

    Oracle 11g pl/sql编程

    根据提供的文件信息,以下是对...由于文件提供的内容有限,无法提供更深入的知识点细节,但是上述内容覆盖了Oracle 11g PL/SQL编程的基本和高级主题。读者可以通过阅读完整的书籍来获得更全面、系统的学习和理解。

    Oracle PL/SQL学习官方教材

    Oracle PL/SQL是一种强大的编程语言,它将SQL与过程编程语言的特性相结合,为数据库开发提供了丰富的功能。...通过深入学习这本教材,你将能够掌握Oracle PL/SQL编程,从而有效地设计和实现数据库解决方案。

    精通Oracle 10g PL/SQL编程

    总之,《精通Oracle 10g PL/SQL编程》是一本全面的教程,它涵盖了从基础到高级的PL/SQL编程技术,适用于数据库管理员、开发人员以及希望提升Oracle数据库应用技能的IT专业人士。通过深入学习,读者可以掌握在Oracle ...

    Pl/SQL programming 超全经典官方多本书籍资料

    第五版更新了最新的Oracle版本特性,提供了丰富的示例和实战经验,帮助开发者提升PL/SQL编程技能。 这些书籍的结合,将为读者构建一个扎实的PL/SQL知识体系。通过学习,你将能够熟练编写高效、可靠的数据库程序,...

    PL/SQL Developer 7.0

    通过阅读此指南,开发者可以了解如何创建高效的PL/SQL代码,避免常见陷阱,并掌握高级特性的应用。 四、文件“PLSQLDev7.0.pdf” 这个PDF文件很可能是PL/SQL Developer 7.0的官方用户手册或教程,包含了详细的软件...

    pl/sql 学习资料

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种结合了SQL语言与过程式编程的高级语言,主要用于数据库管理和应用程序开发。在这个“PL/SQL学习资料”压缩包中,包含了十一个PDF文件,覆盖了从基础到进阶的...

Global site tag (gtag.js) - Google Analytics