通过oracle实现 : select * from 存储教程(或函数) 例子

        在上个例子中,我们演示了通过java调用存储过程,获取数据集.可能有人觉得这个调用有点麻烦,本文又演示多个例子.

        示范:   "select * from table(wilent_group_count1)";
       其中wilent_group_count1为oracle函数,返回一个用户所需的虚拟表,再通过table()函数转换成表.
    
     步骤:
    一. 数据库表:
  
sql 代码
 
  1. --用户表信息;  
  2. create table wilent_user(  
  3.     id number(5) primary key,  
  4.     name varchar2(100),  
  5.     sex varchar2(1),    --Y为男,F为女;  
  6.     group_id number(5),  
  7.     teach varchar2(50)  --学历;  
  8. );  
  9.   
  10. --用户组信息;  
  11. create table wilent_group(  
  12.     id number(5) primary key,  
  13.     name varchar2(100)  
  14. );  
  15.   
  16. insert into wilent_group values(1,'组1');  
  17. insert into wilent_group values(2,'组2');  
  18. insert into wilent_group values(3,'组3');  
  19. insert into wilent_group values(4,'组4');  
  20. insert into wilent_group values(5,'组5');  
  21.   
  22. insert into wilent_user values(1,'吴','Y',1,'大专');  
  23. insert into wilent_user values(2,'李','Y',1,'大专');  
  24. insert into wilent_user values(3,'赵','N',2,'本科');  
  25. insert into wilent_user values(4,'金','Y',2,'高中');  
  26. insert into wilent_user values(5,'钱','N',2,'大专');  
  27. insert into wilent_user values(6,'孙','N',1,'大专');  
  28. insert into wilent_user values(7,'高','Y',3,'本科');  
  29. insert into wilent_user values(8,'宋','N',3,'高中');  
  30. insert into wilent_user values(9,'伍','Y',3,'大专');  
  31. insert into wilent_user values(10,'欧','Y',4,'本科');  
  32. insert into wilent_user values(11,'庄','N',4,'硕士');  
  33. insert into wilent_user values(12,'纪','Y',4,'本科');  
  34. insert into wilent_user values(13,'陈','Y',5,'大专');  
  35. insert into wilent_user values(14,'龙','N',5,'大专');  
  36. insert into wilent_user values(15,'袁','Y',5,'高中');  
  37. insert into wilent_user values(16,'杨','Y',1,'本科');  
  38. insert into wilent_user values(17,'江','N',1,'大专');  
  39. insert into wilent_user values(18,'刘','Y',1,'硕士');  
  40. insert into wilent_user values(19,'郭','N',3,'硕士');  
  41. insert into wilent_user values(20,'张','Y',3,'大专');  
  42. insert into wilent_user values(21,'文','N',3,'硕士');  
  43. insert into wilent_user values(22,'李','N',4,'大专');  
  44. insert into wilent_user values(23,'梅','Y',4,'本科');  
  45. insert into wilent_user values(24,'王','N',4,'大专');  
  46. insert into wilent_user values(25,'吕','N',5,'高中');  
  47. insert into wilent_user values(26,'范','Y',5,'本科');  
  48. insert into wilent_user values(27,'许','N',1,'大专');  
  49. insert into wilent_user values(28,'墨','Y',1,'高中');  
  50. insert into wilent_user values(29,'孔','N',1,'本科');  
  51. insert into wilent_user values(30,'蔡','Y',1,'大专');  

   二. oracle 函数
            1.  返回虚拟表结构.
              
sql 代码
 
  1. --自定义一种类型;
  2. Create Or Replace Type wilent_row_table As Object  
  3. (  
  4.        group_name Varchar2(100),  
  5.        group_count Number(4),  
  6.        male_count Number(4),  
  7.        woman_count Number(4),  
  8.        da_count Number(4),  
  9.        ben_count Number(4)  
  10. );  

             2. 虚拟表类型.
            
sql 代码
 
  1. --定义一种嵌套类型;
  2. Create Or Replace Type wilent_tab_type Is Table Of wilent_row_table;  

             3. oracle 函数  
            
sql 代码
 
  1. Create Or Replace Function wilent_group_count1  
  2. Return wilent_tab_type   
  3. As  
  4.   v_tab wilent_tab_type := wilent_tab_type();               
  5.   index_max Number(4);                         --wilent_group最大的id;  
  6.   index_min Number(4);                         --wilent_group最小的id;  
  7.   index_for Number(4);  
  8.     
  9.   group_name Varchar2(100);  
  10.   user_count Number(4);  
  11.   male_count Number(4);  
  12.   woman_count Number(4);  
  13.   da_count Number(4);  
  14.   ben_count Number(4);  
  15. Begin  
  16.      Select Max(g.Id) Into index_max From wilent_group g;  
  17.      --dbms_output.put_line(index_max);  
  18.      Select Min(g.Id) Into index_min From wilent_group g;  
  19.      --dbms_output.put_line(index_min);  
  20.      For index_for In Index_min..index_max Loop  
  21.          --添加新记录;  
  22.          v_tab.Extend;  
  23.          Select Name Into group_name From wilent_group Where Id=index_for;  
  24.          Select Count(*) Into user_count From wilent_user u, wilent_group g Where u.group_id=g.Id And g.Id=index_for;  
  25.          Select Count(*) Into male_count From wilent_user u, wilent_group g Where u.group_id=g.Id And g.Id=index_for And sex='Y';  
  26.          Select Count(*) Into woman_count From wilent_user u, wilent_group g Where u.group_id=g.Id And g.Id=index_for And sex='N';  
  27.          Select Count(*) Into da_count From wilent_user u, wilent_group g Where u.group_id=g.Id And g.Id=index_for And teach='大专';  
  28.          Select Count(*) Into ben_count From wilent_user u, wilent_group g Where u.group_id=g.Id And g.Id=index_for And teach='本科';  
  29.          --把记录写入;  
  30.          v_tab(v_tab.Last) := wilent_row_table(group_name,user_count,male_count,woman_count,da_count,ben_count);  
  31.      End Loop;  
  32.        
  33.      Return v_tab;  
  34. End;  

   三.测试
       1. 测试sql
                   
sql 代码
 
  1. select * from table(wilent_group_count1);  
       2. 测试结果   
   
sql 代码
  1. GROUP_NAME GROUP_COUNT MALE_COUNT WOMAN_COUNT DA_COUNT BEN_COUNT  
  2. 组1      10  6   4   6   2         
  3. 组2      3   1   2   1   1         
  4. 组3      6   3   3   2   1         
  5. 组4      6   3   3   2   3         
  6. 组5      5   3   2   2   1         
Oracle中SELECT语句和SELECT *语句的区别 但是,SELECT语句允许我们明确选择要检索的列,而SELECT *语句选择所有列。在SELECT语句中,我们可以选择指定要检索的列,也可以使用通配符"*"选择所有列。通过明确列出所需的列,我们可以有效地控制返回的结果集,并减少不必要的数据传输。SELECT *语句返回的结果集中的列顺序与表中的列定义顺序相同。这可能会导致在处理结果集时出现错误。因此,建议在实际开发中使用SELECT语句并明确列出所需的列,而不是使用SELECT *语句。SELECT *语句返回了表中的所有列,包括可能不需要的冗余列。 阅读详情

相关推荐

全面解析:时延扩展与相干带宽、多普勒扩展与相干时间——无线通信基础

时延扩展与相干带宽 多径时延扩展与多径衰落 接收机所接收到的信号是通过不同的直射、反射、折射等路径到达接收机。由于电波通过各个路径的距离不同, 因而各条路径中发射波的到达时间不同,造成多径时延扩展。距离不同所以到达接收机的相位也不相同,不同相位的多个信号在接收端叠加, 如果同相叠加则会使信号幅度增强, 而反相叠加则会削弱信号幅度。 这样,接收信号的幅度将会发生急剧变化,就会产生多径衰落。 ...

king阿金 4万+

oracle table()函数

eg:

qq_39710367的博客 867

从零构建:STM32与EC800 4G模块的工业物联网数据透传实战

本文详细介绍了如何从零构建STM32与EC800 4G模块的工业物联网数据透传系统。内容涵盖硬件选型、抗干扰电路设计、AT指令稳定性优化、网络连接管理、可靠数据透传协议以及低功耗策略,为开发者提供了一套可直接应用于工业场景的完整实战方案。

uran的专栏 1014

oracle select from table(,请教Table()使用方法 select * from table(....)

找到了,可惜、居然 itpub没人能回答You Asked (Jump to Tom's latest followup)1. Does oracle support calling a procedure as a derived table,Egselect * from (call myprocedure) ....2. Also, does it support creation of a...

weixin_36102930的博客 2626

使用bandersnatch搭建pypi 本地镜像源(20211026)

需求背景:公司内网不能联网,同时开发工作需要各种python的模块,因此需要搭建一个pypi的本地镜像源。 参考网上的方法,总结了大致有下面几种方式搭建pypi本地源: devpi: 企业内网利用devpi搭建pypi私服 - 简书 pip2pi: https://yangfannie.com/1439.html pypiserver: https://zhongneng.github.io/2019/02/16/creat-pip/ bandersnatch:基于bandersnatch搭...

liurizhou的博客 6468

STM32外部中断与事件机制深度解析:从硬件触发到软件响应

本文深入解析STM32外部中断与事件机制,从硬件触发到软件响应的完整流程。通过对比中断和事件的应用场景、响应速度及配置方法,帮助开发者优化嵌入式系统设计,特别适合需要低功耗或高实时性的项目。

weixin_29175469的博客 410

Oracle select * from table 存储过程

前段时间 写Oracle 的存储过程 遇到了很多问题 ,用存储过程 显示一个select * from table 就那么费劲吗?在Google和Baidu上找了好长时间,终于找到了正确答案。 Result Sets from Stored Procedures In OracleA frequently asked question is: Id like to kn

王雷 1万+

小秋SLAM入门实战ubuntu所有文章汇总

ubuntu 终端如何停止快速打印的输出以及恢复命令 ubuntu 终端如何快速打开当前路径下的图形化窗口界面? killall -9用途用法 ps -xu | grep这个命令的用途 linux 下 top命令显示的是内存是堆内存吗? zip分割和合并 关闭除当前 GNOME 终端窗口以外的所有其他 GNOME 终端窗口 如何在安装系统后设置短密码 【如何使用getrusage获取消耗的CPU时间和进程使用的最大物理内存】 【webots安装使用教程】 Linux系统下查看当前运行的进程和线程的几种方法

小秋 AI SLAM 入门实战教程 1405

MySQL关于表table的操作

文章目录关于表的操作1. 增2. 删3.改4.查where 语句其他:1. 限制limit:2. 排序:3.分组:聚合4.连表查询:select * from tb1,tb2;4.1 成绩表的五个表的联合5.关于join等待扩充 关于表的操作 1. 增 insert into table1(id int ,name char(10) ) values(1,‘alex’); 逐条 values(); 多条 values(),(); 导入表 values(select * from table); 2

weixin_43899514的博客 563

Sigrity System SI SerialLink模式进行SFP+协议仿真分析-PCB操作指导

Random(Rj):随机抖动,该抖动用高斯概率分布来描述,通常是由热噪声和其它随机噪声引起的,默认为1%UI RMS(平均值),即和标准值的偏差为1%UI。Random(Rj):随机抖动,该抖动用高斯概率分布来描述,通常是由热噪声和其它随机噪声引起的,默认为1%UI RMS(平均值),即和标准值的偏差为1%UI。Random(Rj):随机噪声,是由信号电压的随机波动引起的,默认为1mv RMS(平均值),即和标准值的偏差为1mv。

weixin_54787054的博客 508

多模态大模型在AI人工智能领域的创新实践探索

随着人工智能技术的飞速发展,单一模态的数据处理已经难以满足复杂现实场景的需求。多模态大模型通过融合多种模态的数据,如文本、图像、音频等,能够更全面、深入地理解和处理信息,为人工智能的发展带来了新的机遇和挑战。本文的目的在于深入探讨多模态大模型在AI人工智能领域的创新实践,包括其核心概念、算法原理、实际应用等方面,旨在为相关领域的研究人员和从业者提供全面的技术参考和实践指导。本文的范围涵盖了多模态大模型的基本原理、算法实现、数学模型、项目实战以及实际应用场景等多个方面。

大模型应用工坊 1316

[Oracle] 获取执行计划的几种方法

1. 预估执行计划 - Explain Plan Explain plan以SQL语句作为输入,得到这条SQL语句的执行计划,并将执行计划输出存储到计划表中。 首先,在你要执行的SQL语句前加explain plan for,此时将生成的执行计划存储到计划表中,语句如下: explain plan for SQL语句 然后,在计划表中查询刚刚生成的执行计划,语句如下: sel...

runfeel 440

ISOLAR Autosar BSW 配置 之 Com

Autosar ISOLAR Bsw Configuration 之 Com

qq_42262743的博客 453

关于Oracle中select * from where 的存储过程

熟悉SQL Server的人,都会用这样的方法来创建存储过程:(查询student表的信息)create  procedure  pro_sel_allasselect * from  student由于在Oracle中没有一个类型去接受一个结果集,而在SQL Server中却是由数据库系统自动返回结果集,然后显示。故如果我们用类似上面的方法来创建,如下:create  or  replace 

Camio007---(Not Null,Unique) 2263

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Oracle存储过程返回select * from table结果

为什么80%的码农都做不了架构师?>>> ...

weixin_33770878的博客 2773

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

oracle select from table(,Oracle存储过程返回select * from table结果

1.首先建立一个包create or replace package LogOperation istype listLog is ref cursor;procedure PCenterExamine_sel(listCenterExamine out listlog,testlist out listLog,numpage in decimal);end;2.建立包中的主体create or ...

weixin_36423062的博客 1203

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

oracle tabs作用,select * from tab的劣势在哪里

身为DBA,为开发人员制定的DB标准肯定包含"尽量避免使用select * from tab",可此种查询究竟坏在哪里?试着解释一下,有不妥之处还望各位多多赐教;数据从disk呈现给client应该经历如下步骤:disk--> SGA--> PGA--> client(不考虑direct read)分两种情况讨论1 索引扫描如果select col采用覆盖索引,sel...

weixin_42301008的博客 935

Oracle:SELECT * FROM TABLE(...)

在 Oracle 数据库中,`SELECT * FROM TABLE(...)` 是一种特殊的语法结构,主要用于查询集合类型(Collection Type)或表函数(Table Function)返回的数据。- 查看执行计划:在性能调优中,常结合 `DBMS_XPLAN` 包使用,如 `SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(...))` 来格式化显示 SQL 执行计划。3. 查询数据:使用 `TABLE()` 包裹函数调用进行查询。

chinalog的专栏 576

最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子

 以下开发例子参见两个附件的图片:        JAVA调用ORACLE的存储过程、函数的返回结果集的JAVA开发界面.JPG        JAVA调用ORACLE的存储过程、函数的返回结果集的PL-SQLDEPVELOPER界面.JPG 具体过程如下: --例子开发工具:   oralce数据库版本:oralce9i ,10G   oralce的JDBC驱动:clas

oracel数据库、数据仓库、JAVA开发的专栏 1万+

oracle select into from 用法,sql select into用法

select into 怎么用SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。 把所有的列插入新表: SELECT * INTO new_table_name FROM old_tablename 或者只把希望的列插入新表: SELECT column_name(s) INTO new_table_name FROM old_tablenameoracle 中select...

weixin_34861332的博客 6212

关于Oracle中select * from where 的存储过程

熟悉SQL Server的人,都会用这样的方法来创建存储过程:(查询student表的信息)create  procedure  pro_sel_allasselect * from  student由于在Oracle中没有一个类型去接受一个结果集,而在SQL Server中却是由数据库系统自动返回结果集,然后显示。故如果我们用类似上面的方法来创建,如下:create  or  replace 

王雷 6466

oracle查看创建了哪些存储过程,oracle查看存储过程的内容

查看当前用户: select * from user_procedures; 或 select * from user_objects where object_type=‘PROCEDURE’;(一定要大写) 查看所有用户(注意有权限) select * from all_procedures; 或 select * from all_objects where object_type=‘PROCEDURE’; 查看存储过程的内容 SELECT text FROM user_source WHERE NA

道友 9077
上一篇: java 通过调用存储过程获取结果集
下一篇: PL/SQL入门系列--集合之:index-by表
阿钿_
博客等级 码龄17年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值