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

oracle简单编程题,Oracleplsql编程有点难度的动脑题

*题目一在plsql中创建表cc插入数据如下(列c1,c2):c1c21西1安1的2天2气3好转换为1西安的2天气输出3好输出*createtablecc(c1num

/*

题目一  在plsql中创建表cc 插入数据如下(列 c1,c2):

c1 c2

1 西

1 安

1 的

2 天

2 气

3 好

转换为

1 西安的

2 天气 输出

3 好  输出

*/

create table cc (

c1 number,

c2 varchar2(3)

)

delete from cc;

insert into cc values('1','西');

insert into cc values('1','安');

insert into cc values('1','的');

insert into cc values('2','天');

insert into cc values('2','气');

insert into cc values('3','好');

commit;

--wm_concat

select c1,replace(wm_concat(c2),',','') from cc group by c1;

--plsql语句

declare myStr varchar2(20):='';

begin

for i in (select c1 from cc group by c1) loop

myStr:='';

for j in (select c2 from cc where c1=i.c1) loop

myStr:=myStr||j.c2;

end loop;

syso(i.c1||' '||myStr );

end loop;

end;

/

题目二

查找出输入的用户下,每张表的记录数,(提示:使用 tab表)

以scott用户为例,

结果应如下:

DEPT...................................4

EMP...................................14

BONUS.................................0

SALGRADE.............................5

select * from tab --有权限查询的表

select * from user_tables  --scott 创建的表

select * from all_tables where owner='SCOTT'

declare vSql varchar2(200);

rtrNumber number;

begin

for i in (select * from user_tables) loop

-- select count(rowid) from 表名

vSql:='select count(rowid) from '||i.table_name;

execute immediate vSql into rtrNumber;

dbms_output.put_line(i.table_name || '...............................' ||rtrNumber);

end loop;

end;

/*

题目 三

加载在c盘存在一个文件 a.txt

内容如下

100|金融部|深圳

110|财务部|东莞

使用plsql读取该文件 并将 每行的 数据插入到dept表中 (读取一行 按|切割)

读取文件的代码

declare InHandle utl_file.file_type ; --定义文件类型

vNewLine VARCHAR2(250);  --定义变量获取当前行数据

BEGIN

vInHandle := utl_file.fopen ('mydir', 'a,txt ', 'R');

utl_file.get_line (vInHandle, vNewLine); --调用一次 读取一行

*/

declare vInHandle utl_file.file_type ; --定义文件类型

vNewLine VARCHAR2(250);  --定义变量获取当前行数据

begin

vInHandle:= utl_file.fopen ('MYDIR', 'a1.txt', 'R');

loop

utl_file.get_line (vInHandle, vNewLine); --调用一次 读取一行

--dbms_output.put_line(vNewLine);

--100|金融部|深圳

declare a1 varchar2(20);

a2 varchar2(20);

a3 varchar2(20);

beginIdx number:=1;

begin

beginIdx:=instr(vNewLine,'|'); --4

-- 1号位置开始到 找到一个 |的位置结束的字符串

a1:=substr(vNewLine,1,instr(vNewLine,'|')-1);

--从第一个 |的下一个位置开始 5

a2:=substr(vNewLine,beginIdx+1,instr(vNewLine,'|',beginIdx+1)-beginIdx-1);

beginIdx:=instr(vNewLine,'|',beginIdx+1);

a3:=substr(vNewLine,beginIdx+1);

dbms_output.put_line(a1||a2||a3);

insert into dept values(a1,a2,a3);

commit;

end;

end loop;

exception when others then

utl_file.fclose(vInHandle);

end;

/*

2 定义存储过程 可以传入以下参数

query(ename,job,sal)

如果传入了某几个参数 以参数组合的形式查询结果

比如调用过程如下

query('Cleck',null,null);

查询的sql为

select * from emp where ename like '%Cleck%';

query('Cleck','Manager',null);

查询的sql为

select * from emp where ename like '%Cleck%' and job like '%Manager%'

要求输出查询的结果

*/

create or replace procedure queryEmp(ename varchar2,job varchar2,sal number)

as

vSql :='select * from emp where 1=1 ';

begin

if(ename is not null) then

vSql:=vSql|| 'and ename='' '||ename||'''';

end if;

if(job is not null) then

vSql:=vSql|| 'and job='' '||job||'''';

end if;

if(sal is not null) then

vSql:=vSql|| 'and sal='' '||sal||'''';

end if;

end;

queryEmp(null,'a','b')

select * from emp where job='a' and sal='b'

select * from emp where 1=1 and job='a' and sal='b'

queryEmp(null,null,'b')

select * from emp and sal='b'

select * from emp where 1=1 and sal='b'

3 写出一个分页的存储过程

定义如下

tablePager(tableName,curPage,pageSize)

调用

tablePager('Emp',2,10)

查询emp表中 第二页的数据(每页显示10条 第二页就是 10-20条)

开始结束

(curPage-1)*pageSize+1 curPage*pageSize

create or replace procedure tablePager(tableName varchar2,curPage number,pageSize number)

as

starIndex number:=(curPage-1)*pageSize+1;

endIndx number:=curPage*pageSize;

vSql varchar2(2000):='';

colSql varchar2(2000):='';

mycursor sys_refcursor;

myResult varchar2(2000);

begin

select replace(wm_concat(column_name),',','||'' ''||') into colSql from user_tab_cols where table_name=tableName;

vSql:&#61;&#39;select &#39;||colSql||&#39; from (select t.*,rownum rn from &#39;||tableName||&#39; t) where rn>&#61;&#39;||starIndex||&#39; and rn<&#61; &#39;||endIndx;

open mycursor for vSql;

loop

fetch mycursor into myResult;

exit when mycursor%notfound;--退出条件 下面会提到4个属性

syso(myResult);

end loop;

close mycursor;

end;

测试

begin

tablePager(&#39;DEPT&#39;,2,3);

end;

游标的四个属性

%ISOPEN&#xff1a;是否打开

%ROWCOUNT&#xff1a;行数

%FOUND&#xff1a;boolean值&#xff0c;是否还有数据

%NOTFOUND&#xff1a;是否已无数据

4 定义一个存储过程 传入表名

删除该表中的重复记录

比如 deleteMul(tableName)

调用 deleteMul(&#39;emp&#39;); 必须删除表emp的重复数据  (execute immediate    using )

delete from 表名 where rowid not in(select max(rowid) from 表名 group by 所有的列)

create or replace procedure deleteMul(tableName varchar2)

as

colSql varchar2(2000):&#61;&#39;&#39;;

begin

select wm_concat(column_name) into colSql from user_tab_cols where table_name&#61;tableName;

execute immediate &#39;delete from &#39;||tableName||&#39; where rowid not in(select max(rowid) from

&#39;||tableName||&#39; group by &#39;||colSql||&#39;)&#39;;

end;

测试

begin

deleteMul(&#39;CC&#39;);

end;



推荐阅读
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
author-avatar
手机用户2502877211
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有