社区
基础和管理
帖子详情
请问在oracle中怎样把游标中的数据插入一张表中?
brightdoll
2006-07-03 11:46:57
比如游标中有3个字段的数据,而要插入的表中有四个字段,其中只有三个字段对应游标
...全文
676
10
打赏
收藏
请问在oracle中怎样把游标中的数据插入一张表中?
比如游标中有3个字段的数据,而要插入的表中有四个字段,其中只有三个字段对应游标
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiaoxiao1984
2006-07-03
打赏
举报
回复
可能申明游标的语句是:
declare cursor csr_ref is select id ,name,... from tab_name where ...;
ref csr_ref%rowtype;
... --打开游标等
fetch csr_ref into ref;
insert into tab_name1 values(ref.id, ref.name,...)
...
brightdoll
2006-07-03
打赏
举报
回复
麻烦给举个例子看一下具体的语法格式!
龙翔飞雪
2006-07-03
打赏
举报
回复
用 forall in.
否则效率很低~
(因为oracle从PLSQL环境转到SQL*Plus需要时间,再转回来又要时间)
brightdoll
2006-07-03
打赏
举报
回复
那应该怎么写才能让游标里面的数据插入到一张表里面,请教!
benny0526
2006-07-03
打赏
举报
回复
94啊,fetch 游标名 into后面是接变量名的,不能接字段名吧!
benny0526
2006-07-03
打赏
举报
回复
fetch 游标名 into v1,v2,v3;
insert into table_name(col1,col2,col3) values(v1,v2,v3);
或者你做游标的时候就以空值或0填充缺少的哪个字段,这不就可以一一对应了?
xiaoxiao1984
2006-07-03
打赏
举报
回复
fetch 游标名 into …………
这个不是插入语句阿,楼主问得是什么啊
brightdoll
2006-07-03
打赏
举报
回复
拜托,是使用游标里的纪录进行插入操作的,就是
fetch 游标名 into …………
我就是不知道这样的语法正确的应该是怎么样的
LinZhongBao
2006-07-03
打赏
举报
回复
同意 xiaoxiao1984(笨猫一只^_^) 正解
xiaoxiao1984
2006-07-03
打赏
举报
回复
明确写出要插入的字段名
insert into tab_name(col1, col2, col3) values (ref.col1, ref.col2, ref.col3)
sql总结.doc
1、索引 ·什么是索引 ·索引的基本原理 ·索引的基本写法 ·索引的分类 ·索引的作用 ·索引的优缺点 ·索引的建立原则 2、存储过程 ·什么是存储过程 ·存储过程的基本写法 ·存储过程的作用 ·存储过程的优缺点 ·存储过程的应用场景 3、触发器 ·什么是触发器 ·触发器的的基本写法 ·触发器的功能 ·触发器的优缺点 ·触发器的两种形式 ·触发器的应用场景 4、视图 ·什么是视图 ·视图的基本写法 ·视图在哪些情况下不能被增、删、改 ·视图的作用 ·视图的优缺点 ·视图的应用场景 5、
游标
·什么是
游标
·
游标
的作用 ·
游标
的分类 ·
游标
的基本用法 ·使用
游标
的优缺点 ·什么时候选择使用
游标
1、 (1)索引是对
数据
库
表
中
一列或多列进行排序的一种结构。 (2)Mysql
中
搜索引擎Innodb(聚簇索引)和Mysiam(非聚簇索引)都采用B+,
oracle
也采用B+树实现 注:聚簇索引:
一张
表只能建立一个聚簇索引,以主键建立索引。聚簇索引包括主键索引和二级索引(二级索引是在对非主键字段建立索引后,通过索引找到对应这个非主键字段的主键,再进行主键索引,找到B+树
中
叶子结点);(聚簇索引B+树
中
叶子结点存放的是
数据
和指向下一条
数据
的指针) 非聚簇索引:对主键和非主键字段建立索引时,直接找到B+树
中
的叶子结点,B+树
中
叶子结点存放的是对应
数据
的地址,并通过地址找到
数据
。 (3)Create index 索引名 on 表名(字段名) (4)索引分为聚簇索引和非聚簇索引 (5)索引的作用 1.创建唯一性索引,可以保证
数据
库
表
中
每一行
数据
的唯一性。 2.可以加大
数据
的检索速度,这也是创建索引的主要原因。 3.可以加速表与表之间的连接效率。 4.在分组排序时使用索引,可以减少分组排序的时间。 (6)索引的优缺点 索引的优点既索引的作用。 索引的缺点:1.建立索引会产生占据一定的空间。2.对
表
中
的
数据
进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度。 (7)索引的建立原则 1.主外键 2.经常被查询的列 3.用于连接的字段 4.排序分组的字段 2、存储过程 (1)什么是存储过程? 存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,它存储在
数据
库
中
,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 (2)存储过程的基本写法(
oracle
) Create or replace procedure 名称(参数) Is/as (变量的赋值例如:(a name%type)(a varchar(2))) Begin Sql语句以及判断条件 End 名称; (3)存储过程的作用 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而 一般SQL 语句每执行一次就编译一次,所以使用存储过程可提高
数据
库执行速 度。 2.当对
数据
库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来 与
数据
库提供的事务处理结合一起使用。 3.存储过程可以重复使用,可减少
数据
库开发人员的工作量。 4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。 (4)存储过程的优缺点 优点: 作用的四条加上 1.分布式工作。 应用程序和
数据
库的编码工作可以分别独立进行,而不会相互影响。 缺点:1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的
数据
,则您仍需要更新程序集
中
的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。 2.可移植性差 由于存储过程将应用程序绑定到
数据
库,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。 (5)存储过程的应用场景 1.通常,复杂的业务逻辑需要多条 SQL 语句。这些语句要分别地从客户机发送到服务器,当客户机和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程
中
,那么客户机和服务器之间的网络传输就会大大减少,降低了网络负载。 3、触发器 (1)什么是触发器 在
Oracle
中
,触发器是一种特殊的存储过程,也是由一组sql语句以及一些业务逻辑代码组成的。
数据
库可以通过增、删、改来触发触发器。 (2)触发器的基本写法 create or replace trigger tri_adddept AFTER INSERT on dept For each row //表级不用加 declare begin dbms_output.put_line('
插入
了新部门'); end ; (3)触发器的功能 1.配合sequence实现自增(
oracle
) 2.提供审计和日志记录 3.写复杂的业务逻辑代码 (4)触发器的优缺点 优点: 1.实现级联更改 2.能过实现比check更严格的约束,与CHECK 约束不同,触发器可以引用其它
表
中
的
数据
。通过其他
表
中
的
数据
的变化来设置更加复杂的约束。 缺点:滥用触发器会造成
数据
库及应用程序的维护困难。 (5)触发器的两种形式(行级触发器,表级触发器) 1.在语法上,行级触发器就多了一句话:for each row 2.在表现上,行级触发器,在每一行的
数据
进行操作的时候都会触发。 语句级触发器,对表的一个完整操作才会触发一次。 简单的说:行级触发器,是对应行操作的;语句级触发器,是对应表操作的。 (6)应用场景 作用+优点 4、视图 (1)什么是视图? 视图(VIEW)也被称作虚表,即虚拟的表,是一组
数据
的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一个名字,即视图名字。 视图本身并不包含任何
数据
,它只包含映射到基表的一个查询语句,当基表
数据
发生变化,视图
数据
也随之变化。 (2)视图的基本写法 Create view 视图名 as select * from emp; (3)视图在哪些情况下不能被增、删、改 (1)若视图的字段是来自字段表达式或常数,则不允许对此视图执行INSERT、UPDATE操作,允许执行DELETE操作; (2)若视图的字段是来自库函数,则此视图不允许更新; (3)若视图的定义
中
有GROUP BY子句或聚集函数时,则此视图不允许更新; (4)若视图的定义
中
有DISTINCT任选项,则此视图不允许更新; (5)若视图的定义
中
有嵌套查询,并且嵌套查询的FROM子句
中
涉及的表也是导出该视图的基表,则此视图不允许更新; (6)若视图是由两个以上的基表导出的,此视图不允许更新; (7)一个不允许更新的视图上定义的视图也不允许更新; 本表的行列子集视图一般是可更新的。若视图的属性来自集函数、表达式,则该视图肯定是不可以更新的。 (4)视图的作用 1、视图隐藏了底层的表结构,简化了
数据
访问操作,客户端不再需要知道底层表的结构及其之间的关系。 2、视图提供了一个统一访问
数据
的接口。(即可以允许用户通过视图访问
数据
的安全机制,而不授予用户直接访问底层表的权限) 3、从而加强了安全性,使用户只能看到视图所显示的
数据
。 4、视图还可以被嵌套,一个视图
中
可以嵌套另一个视图。 (5) 视图的优缺点 优点:1.简单性。视图不仅可以简化用户对
数据
的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件。 2.安全性。通过视图用户只能查询和修改他们所能见到的
数据
。
数据
库
中
的其他
数据
则既看不见也取不到。
数据
库授权命令可以使每个用户对
数据
库的检索限制到特定的
数据
库对象上,但不能授权到
数据
库特定行和特定的列上。通过视图,用户可以被限制在
数据
的不同子集上。 3. 逻辑
数据
独立性。视图可以使应用程序和
数据
库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与
数据
库表被视图分割开来。 缺点:1.如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,也要花费一定的时间。 2.修改限制:当用户试图修改视图的某些行时,
数据
库必须把它转化为对基本表的某些行的修改。对于简单视图来说,这是很方便的,但是,对于比较复杂的视图,可能是不可修改的。 (6)视图的应用场景 1.访问频繁,更新少的一组
数据
2.需要对一些
数据
限制访问权限时 5、
游标
(cursor) (1)什么是
游标
游标
实际上是一种能从包括多条
数据
记录的结果集
中
每次提取一条记录的机制。
游标
充当指针的作用。尽管
游标
能遍历结果
中
的所有行,但他一次只指向一行。 (2)
游标
的作用
游标
的一个常见用途就是保存查询结果,以便以后使用。 (3)
游标
的分类
游标
分为显示
游标
和隐式
游标
隐式
游标
:是用户操作SQL时自动生成的,而显式
游标
是在声明块
中
直接定义的
游标
。 (4)
游标
的基本用法 通过ROWCOUNT查看
游标
指向的行:(隐式
游标
实例) 例: DECLARE v_count NUMBER; BEGIN SELECT COUNT(*) INTO v_count from dept; --返回一个隐式
游标
dbms_output.put_line('SQL%ROWCOUNT = '||SQL%COUNT); END; / 执行结果:SQL%ROWCOUNT = 1 (显式
游标
基本) DECLARE CURSOR mycur IS SELECT * FROM dept; deptinfo dept%ROWTYPE; BEGIN IF mycur%ISOPEN THEN NULL; ELSE OPEN mycur; END IF; LOOP FETCH mycur INTO deptinfo; EXIT WHEN mycur%NOTFOUND; dbms_output.put_line('部门名称:'||deptinfo.dname); END LOOP; END; (配合for) DECLARE CURSOR mycur IS SELECT * FROM dept; deptinfo dept%ROWTYPE; BEGIN For test in mycur loop EXIT WHEN mycur%NOTFOUND; dbms_output.put_line('部门名称:'||test.dname); END LOOP; END; (5)
游标
的优缺点 优点:
游标
允许应用程序对查询语句select 返回的行结果集
中
每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作; 它还提供对基于
游标
位置而对
表
中
数据
进行删除或更新的能力 缺点: 处理大
数据
量时,效率低下,占用内存大 (6)什么时候选择使用
游标
? 一般是在循环处理的时候使用。 比如你判断一个班上的同学数学成绩怎么样,你就可能用
游标
,先把全部的成绩查询到
游标
中
,之后再循环一条条进行判断处理。
oracle
数据
库经典题目
一、填空 1.在多进程
Oracle
实例系统
中
,进程分为用户进程、后台进程和服务进程。 2.标准的SQL语言语句类型可以分为:
数据
定义语句(DDL)、
数据
操纵语句(DML)和
数据
控制语句(DCL)。 3.在需要滤除查询结果
中
重复的行时,必须使用关键字Distinct; 在需要返回查询结果
中
的所有行时,可以使用关键字ALL。 4.当进行模糊查询时,应使用关键字like和通配符问号(?)或百分号"%"。 5.Where子句可以接收From子句输出的
数据
,而HAVING子句则可以接收来自WHERE、FROM或GROUP BY子句的输入。 6.在SQL语句
中
,用于向
表
中
插入
数据
的语句是Insert。 7.如果需要向
表
中
插入
一批已经存在的
数据
,可以在INSERT语句
中
使用Select语句。 8.使用Describe命令可以显示表的结构信息。 9.使用SQL*Plus的Get命令可以将文件检索到缓冲区,并且不执行。 10.使用Save命令可以将缓冲区
中
的SQL命令保存到一个文件
中
,并且可以使用Run命令运行该文件。 11.一个模式只能够被一个
数据
库对象所拥有,其创建的所有模式对象都保存在自己的模式
中
。 12.根据约束的作用域,约束可以分为表级约束和列级约束两种。列级约束是字段定义的一部分,只能够应用在一个列上;而表级约束的定义独立于列的定义,它可以应用于一个
表
中
的多个列。 13.填写下面的语句,使其可以为Class表的ID列添加一个名为PK_CLASS_ID的主键约束。 ALTER TABLE Class Add ____________ PK_LASS_ID (Constraint) PRIMARY KEY ________ (ID) 14. 每个
Oracle
10g
数据
库在创建后都有4个默认的
数据
库用户:system、sys、sysman和DBcnmp 15.
Oracle
提供了两种类型的权限:系统权限和对象权限。系统权限提供了在
Oracle
数据
库系统范围内执行某种任务的操作能力,而对象权限则是一种赋予用户在指定的
数据
库对象(如表、视图、过程等) 16. Oralce
数据
库在进行物理备份有联机备份和脱机备份两种方式可供选择。 . 17. 从存储结构的角度来说,
Oracle
数据
库可分为物理结构和逻辑结构。 18. 表空间是
Oracle
数据
库
中
数据
的逻辑组织,每个
数据
库至少有一个SYSTEM系统表空间。 19.视图是一个表示表的
数据
的
数据
库对象,它允许用户从一个表或一组
表
中
通过一定的查询语句建立一个“虚表”。 20.序列是一种可被多个用户使用的用于产生一系列唯一数字的
数据
库对象。尤其适合多用户环境
中
,可以生成唯一的序列号而没有磁盘I/O或事务处理锁定开销。 21. 一个表空间具有离线(OFFLINE)、在线(ONLINE)、只读(READ ONLY)、读写(READ WRITE)状态。 二、选择 1.在全局存储区SGA
中
,哪部分内存区域是循环使用的?( B ) A.
数据
缓冲区 B.日志缓冲区 C. 共享池 D.大池 2.如果一个服务器进程非正常终止,
Oracle
系统将使用下列哪一个进程来释放它所占用的资源?( D ) A.DBWR B.LGWR C. SMON D.PMON 3. 如果要查询
数据
库
中
所有表的信息,应当使用下列哪种
数据
字典视图?( A ) A. DBA视图 B. ALL视图 C. USER视图 D. 动态性能视图 4. 下列哪一项是
Oracle
数据
库
中
最小的存储分配单元? ( C ) A. 表空间 B. 段 C. 盘区 D.
数据
块 5. 下面的各选项
中
哪一个正确描述了
Oracle
数据
库的逻辑存储结构? ( A ) A. 表空间由段组成,段由盘区组成,盘区由
数据
块组成 B. 段由表空间组成,表空间由盘区组成,盘区由
数据
块组成 C. 盘区由
数据
块组成,
数据
块由段组成,段由表空间组成 D.
数据
块由段组成,段由盘区组成,盘区由表空间组成 6. 下列的哪个子句在SELECT语句
中
用于排序结果集?( D ) A. Having子句 B. Where子句 C. From子句 D. Order by子句 7. Having子句的作用是( B )。 a. 查询结果的分组条件 B. 组的筛选条件 C. 限定返回的行的判断条件 D. 对结果集进行排序 8. 下列哪个函数可以把一个列
中
的所有值相加求和? ( B ) A MAX B. SUM C. COUNT D. AVG 9. 下列哪个子句是SELECT语句
中
必选项?( A ) A. FROM B.WHERE C.HAVING D. ORDER BY 10. 下列哪个子句实现对一个结果集进行分组和汇总?( D ) A.HAVING B. ORDER BY C. WHERE D. GROUP BY 11. 查询一个表的总记录数,可以采用_________统计函数。( C ) A. AVG(*) B. SUM(*) C. COUNT(*) D.MAX(*) 12. 要建立一个语句向Types
表
中
插入
数据
,这个表只有两列,T_ID和T_Name列。如果要
插入
一行
数据
,这一行的T_ID值是100,T_Name值是RFUIT。应该使用的SQL语句是_____。( A ) A. INSERT INTO Type Values(100, ‘FRUIT’) B. SELECT * FROM Type WHERE T_ID=100 AND T_NAME=’FRUIT’ C. UPDATE SET T_ID=100 FROM Types WHERE T_Name=’FRUIT’ D. DELET * FROM Types WHERE T_ID=100 AND T_Name=’FRUIT’ 13. 用_____语句修改表的一行或多行
数据
。( A ) A.Update B.set C.Select D.Where 14. 使用什么命令可以清除
表
中
所有的内容? ( D ) A.INSERT B.UPDATE C. DELETE D.TRUNCATE 15.关于模式的描述下列哪一项不正确?( C ) A.表或索引等模式对象一定属于某一个模式 B.在
Oracle
数据
库
中
,模式与
数据
库用户是一一对应的 C.一个表可以属于多个模式 D.一个模式可以拥有多个表 16.唯一约束与主键约束的一个区别是?( D ) A.唯一约束的列的值不可以有重复值 B.唯一约束的列的值可以不是唯一的 C.唯一约束的列不可以为空值 D.唯一约束的列可以为空值 17. 只能存储一个值的变量是哪种变量?( B ) A.
游标
B. 标量变量 C.
游标
变量 D. 记录变量 18. 声明%TPYE类型的变量时,服务器将会做什么操作?( A ) A. 为该变量检索
数据
库列的
数据
类型 B.复制一个变量 C.检索
数据
库
中
的
数据
D.为该变量检索列的
数据
类型和值 19.下列哪一项可以正确地引用该记录变量
中
的一个值?( B ) A.rec_abc(1) B. rec_abc(1).col C. rec_abc.col D.rec_abc.first() 20. 在定义
游标
时使用的FOR UPDATE子句的作用是______。( C ) A.执行
游标
B. 执行SQL语句的UPDATE语句 C.对要更新表的列进行加锁 D. 都不对 21. 如果允许用户对视图进行更新和
插入
操作,但是又要防止用户将不符合视图约束条件的记录添加到视图,应当在定义视图时指定下列哪一个子句?( C ) A.WITH GRANT OPTION B. WITH READ ONLY C. WITH CHECK OPTION D. WITH CHECK ONLY 22. 如果想查看视图
中
哪些字段是可以更新的,应当查询哪一个
数据
字典视图?( D ) A. DBA_VIEWS B. DBA_OBJECTS C. DBA_CLU_COLUMNS D. DBA_UPDATABLE_COLUMNS 23. 在下列各选项
中
,关于序列的描述哪一项是不正确的?( D ) A. 序列是
Oracle
提供的用于产生一系列唯一数字的
数据
库对象 B.序列并不占用实际的存储空间 C.使用序列时,需要用到序列的两个伪列NEXTVAL与CURRVAL。其
中
,NEXTVAL 将返回序列生成的下一个值,而CURRVAL返回序列的当前值 D.在任何时候都可以使用序列的伪列CURRVAL,以返回当前序列值 24. 在下列各选项
中
,关于同义词的描述哪一项是不正确的?( B ) A.同义词是
数据
库对象的一个替代名,在使用同义词时,
Oracle
会将其翻译为对应的对象名称 B.在创建同义词时,所替代的模式对象必须存在 C.
Oracle
中
的同义词分为公有同义词和私有同义词 D.公有同义词在
数据
库
中
所有的用户都可以使用;私有同义词由创建它的用户所拥有 25. 下列哪个锁模式不属于
Oracle
?( D ) A. 共享锁 B.排他锁 C. 行级共享锁 D. 死锁 26. 想在另一个模式
中
创建表,用户最少应该具有什么系统权限?( B ) A.CREATE TABLE B. CREATE ANY TABLE C. RESOURCE D. DBA 27. 如果要启用所有角色,则应该使用哪一个命令?( B ) A.SET ROLE ALL B. SET ROLE ENABLE ALL C. ALTER SESSION ALL D.ALTER USER ROLE ALL 28. 下列哪一个操作可以用来为一个备份操作手动分配通道?( A ) A.ALLOCATE CHANNEL B. CREATE CHANNEL C. CHANNEL ALLOCATE D. CREATE LINK 29. 下列哪一个命令用来显示RMAN通道的配置信息?( C ) A. LIST B. DISPLAY C.SHOW D.都可以 30. 下列哪一个命令可以用来执行不完全恢复?( B ) A. RESTORE DATABASE UNTIL B. RECOVER DATABASE UNTIL C. RECOVER DATA UNTIL D. RESTORE DATA UNTIL 三、简答题 1. 说明
数据
库模式与用户之间的区别。 答案:
数据
库模式与用户之间的区别在于:用户是
数据
库的使用者和管理者,用户具有帐户状态、访问权限和操作权限等属性。模式是一系列逻辑
数据
结构或对象的集合,是
数据
库
中
对象的组织和管理单位。 2. 简要
游标
的作用和
游标
操作的基本步骤。 答案:
游标
的作用是将
数据
库的
中
数据
检索出来后缓存,可以被PL/SQL程序一行一行的读取并处理。支持一条、多条、零条记录的处理。
游标
的基本操作步骤为: (1)声明
游标
,使用查询来定义
游标
的列和行 (2)打开
游标
,使用PL/SQL命令OPEN来打开一个声明的
游标
(3)提取
数据
,从
游标
中
重复提取每条记录到
数据
结构
中
,直到
数据
集合被提交 (4)关闭
游标
,使用完
游标
后将其关闭 3.
Oracle
数据
库的工作模式有哪两种?它们之间有有何区别? 答案: 在
Oracle
数据
库
中
,
数据
库的操作模式分为专用服务器(DELICATED SERVER)模式和多线程服务器(MULTITHREADED SERVER)模式两种。其
中
,在专用服务器模式
中
为每个用户进程创建一个服务器进程,用户进程与服务器进程之间是1:1的关系;在共享服务器模式
中
,一个服务器进程可以为多个用户进程服务器。 4.说明
数据
库内存结构
中
SGA和PGA的组成,以及这两个内存区存放信息的区别。 答案: SGA区由
数据
缓冲区、共享池、重做日志缓冲区、大型池、JAVA池构成;PGA区由排序区、私有SQL区以及堆栈构成。SGA区是由
Oracle
分配的共享内存结构,包含一个
数据
库实例共享的
数据
和控制信息。当多个用户同时连接同一个实例时,SGA区
数据
供多个用户共享,所以SGA区又称为共享全局区。用户对
数据
库的各种操作主要在SGA区
中
进行。该内存区随
数据
库实例的创建而分配,随实例的终止而释放。PGA区是在用户进程连接
数据
库,创建一个会话时,由
Oracle
为用户分配的内存区域,保存当前用户私有的
数据
和控制信息,因此该区又称为私有全局区。每个服务器进程只能访问自己的PGA区,所有服务器进程PGA区总和即为实例的PGA区的大小。 5. 说明
数据
库表空间的种类,以及不同类型表空间的作用。 答案:
数据
库表空间分为系统表空间和非系统表空间两类,其
中
非系统表空间包括撤销表空间、临时表空间和用户表空间等。 SYSTEM表空间主要用于存储
数据
库的
数据
字典、PL/SQL程序的源代码和解释代码、
数据
库对象的定义。撤销表空间专门进行回退信息的自动管理。临时表空间是专门进行临时段管理的表空间。用户表空间用于分离不同应用的
数据
,而且能够减少读取
数据
文件时产生的I/O冲突。 6. 说明
Oracle
10g
数据
库文本初始化参数文件与服务器初始化参数文件的区别。 答案: 文本初始化参数文件是一个本地的初始化参数文件,而服务器初始化参数文件是一个放在
数据
库服务器端的共享的二进制初始化参数文件。文本参数文件的修改是通过直接对文本的修改实现的,通过命令行是无法将修改后的参数值写入该文件
中
,而服务器初始化参数文件是不能直接修改的,必须通过ALTER SYSTEM语句来进行参数修改的。 7. 简述PL/SQL程序结构及各个部分的作用。 答案: PL/SQL程序的基本单元是语句块,所有的PL/SQL程序都是由语句块构成的,语句块之间可以相互嵌套,每个语句块完成特定的功能。 声明部分:以关键字DECLARE开始,BEGIN结束。主要用于声明变量、常量、
数据
类型、
游标
、异常处理名称以及本地(局部)子程序定义等。 执行部分:是PL/SQL块的功能实现部分,以关键字BEGIN开始,EXCEPTION或END结束(如果PL/SQL块
中
没有异常处理部分,则以END结束)。该部分通过变量赋值、流程控制、
数据
查询、
数据
操纵、
数据
定义、事务控制、
游标
处理等实现块的功能。 异常处理部分:以关键字EXCEPTION开始,END结束。该部分用于处理该块执行过程
中
产生的异常。 8. 说明触发器的种类和对应的作用对象、触发事件。 答案: 触发器包括DML触发器、INSTEAD-OF触发器和系统触发器。其
中
,DML触发器主要作用于表,其事件有INSERT、UPDATE、DELETE;INSTEAD-OF触发器主要主用于视图,其事件有INSERT、UPDATE、DELETE;系统触发器主要是DML事件和系统事件发生时调用的触发器,其
中
DML事件包括CREATE、DROP、ALTER等,系统事件包括LOGON、LOGOFF、STARTUP、SHUTDOWN、SERVERERROR等。 9.简述
Oracle
数据
库角色的种类、作用,以及如何利用角色为用户授权。 答案:
Oracle
数据
库
中
角色分为系统预定义的角色和用户自定义的角色两类。角色是一系列权限的集合,可以先将权限授予角色,然后将角色授予具有相同权限的用户。 四、求解题 现有关系
数据
库如下: S(SNO,SNAME,CITY) P(PNO,PNAME,COLOR,WEIGHT) J(JNO,JNAME,CITY) SPJ(SNO,PNO,JNO,QTY) 其
中
,S为供应商,包含属性的含义依次是供应商代码、供应商名字、供应商所在城市;P为零件,包含属性的含义依次是零件代码、零件名字、颜色、重量;J为工程项目,包含属性的含义依次是工程项目代码、工程项目名字、工程项目所在城市;SPJ为供货关系,包含属性的含义依次是供应商代码、零件代码、工程项目代码,某供应商向某个项目供应数量的零件数量。 请用SQL语言完成如下问题: (1)查询供应工程J1零件P1的供应商号码SNO (2)查询供应工程J1零件为红色的供应商号码SNO (3)查询没有使用北京供应商生产的红色零件的工程号JNO 五、设计题(E-图) 六、PL/SQL语言程序设计题。 设学校环境如下:一个系有若干个专业,每个专业一年只招一个班,每个班有若干个学生: 现要建立关于系、学生、班级的
数据
库,关系模式为: 班CLASS(班号classid,专业名subject,系名deptname,入学年份enrolltime,人数num) 学生STUDENT(学号studentid,姓名name,年龄age,班号classid) 系DEPARTMENT(系号deptid,系名deptname) 试用PL/SQL语言完成以下功能: 1. 建表,在定义
中
要求声明: (1) 每个表的主外键。 (2) 每个班级的人数不能超过30人。 (3) 学生的年龄介于15到40岁之间。 (4) 学生姓名不能为空。 2.
插入
如下
数据
CLASS表 classid subject deptname enrolltime num 101 软件 计算机 1995 20 102 微电子 计算机 1996 30 111 无机化学 化学 1995 29 112 高分子化学 化学 1996 25 121 统计数学 数学 1995 20 131 现代语言
中
文 1996 20 141 国际贸易 经济 1997 30 142 国际金融 经济 1996 14 STUDENT表 studentid name age classid 8101 张三 18 101 8102 钱四 16 121 8103 王玲 17 131 8105 李飞 19 102 8109 赵四 18 141 8110 李可 20 142 8201 张飞 18 111 8302 周瑜 16 112 8203 王亮 17 111 8305 董庆 19 102 8409 赵龙 18 101 8510 李丽 20 142 DEPARTMENT表 deptid deptname 001 数学 002 计算机 003 化学 004
中
文 005 经济 3. 学校又新增加了一个物理系,编号为006 4. 学生张三退学,请更新相关的表。 1、有
一张
表test,有3个字段id,name,parentid。parentid是指父亲的id,请写一个sql语句,找出当过爷爷的id和name。 2、有
一张
学生表student,字段有student_id,name,即学号,名字。 还有
一张
选课表,字段有student_id,lesson_id。 还有
一张
课程表,字段lesson_id,lesson_name。 学生和课程是多对多的关系。 写一个sql语句,找出所有选了全部课程的学生。 3、有
一张
表person表,字段有id,name,age。age是年龄。 写一个sql语句,找出年龄最接近的2个人。 如有下面4条记录: 1,a,18 2,b,20 3,c,25 4,d,26 则输出3,4 emp表和dept表完成下列练习 Emp员工表 empno ename job Mgr Hiredate Sal Comm Deptno 员工号 员工姓名 工作 上级编号 受雇日期 薪金 佣金 部门编号 Dept表 Deptno Dname Loc 部门编号 部门名称 地点 1.列出至少有一个员工的所有部门。 select dept_id from s_emp where userid is not null; 2.列出薪金比“chad”多的所有员工。 select id,salary from s_emp where salary>(select salary from s_emp where first_name='Chad'); 3.列出所有员工的姓名及其直接上级的姓名。 select l.first_name as yuangong,e.first_name as laoban from s_emp e,s_emp l where e.manager_id=l.id(+); 4.列出受雇日期早于其直接上级的所有员工。 select l.first_name as yuangong,e.first_name as laoban from s_emp e,s_emp l where e.manager_id=l.id(+) and l.start_date>e.start_date; 5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。 6.列出所有“CLERK”(办事员)的姓名及其部门名称。 7.列出最低薪金大于1500的各种工作。 8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。 9.列出薪金高于公司平均薪金的所有员工。 10.列出与“SCOTT”从事相同工作的所有员工。 11.列出薪金等于部门30
中
员工的薪金的所有员工的姓名和薪金。 12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。 13.列出在每个部门工作的员工数量、平均工资和平均服务期限。 14.列出所有员工的姓名、部门名称和工资。 15.列出从事同一种工作但属于不同部门的员工的一种组合。 16.列出所有部门的详细信息和部门人数。 17.列出各种工作的最低工资。 18.列出各个部门的MANAGER(经理)的最低薪金。 19.列出所有员工的年工资,按年薪从低到高排序。 原文:http://www.2xyd.cn/showtopic-524.aspx
Oracle
习题二附答案 使用scott/tiger的emp表完成练习 更多编程相关:http://www.2xyd.cn/showforum-11.aspx 答案: 1. select distinct dname from dept where deptno in (select distinct deptno from emp); 要查部门编号如果存在于emp
表
中
,说明这个部门有员工。 2. select ename,job,mgr,hiredate,sal from emp where sal> (select sal from emp where ename='SMITH'); 3. select e.ename, e.mgr , w.ename from emp e, emp w where e.mgr=w.empno; 4. select e.ename, e.mgr , e.hiredate,w.ename,w.hiredate from emp e, emp w where e.mgr=w.empno and e.hiredate< w.hiredate; 5. select e.ename,e.hiredate, d.dname,d.deptno from emp e, dept d where e.deptno (+)=d.deptno; 本例子使用的是外连接, 也可以用右连接。 select e.ename,e.hiredate, d.dname,d.deptno from emp e right join dept d on e.deptno=d.deptno; 6. select e.ename,e.hiredate,e.job, d.dname,d.deptno from emp e, dept d where e.deptno =d.deptno and e.job=upper('clerk'); 7. select job, min(sal) from emp group by job having min(sal)>1500; 8. select e.ename,d.dname from emp e,dept d 2楼 where e.deptno=d.deptno and d.dname=upper('sales'); 或者: select ename from emp where deptno = (select deptno from dept where dname=upper('SALES')); 9. select ename, job, sal from emp where sal> (select avg(sal) from emp ); 10. select ename, job from emp where job = (select job from emp where ename=upper('scott')); 11. select ename, sal,job from emp where sal in (select sal from emp where deptno=30); 12. select ename, sal,job from emp where sal >all (select sal from emp where deptno=30); 或者 select ename ,sal from emp where sal> (select max(sal) from emp where deptno=30); 13. select d.deptno,d.dname, count(e.ename), avg(e.sal), avg(months_between(sysdate,e.hiredate)) from emp e, dept d where e.deptno(+)= d.deptno group by d.deptno,dname; 或者下面的方法,这种方法更好理解,把需要汇总的生成一个视图e。 select e.*,d.dname , from (select deptno, count(ename) ,avg(sal),avg(months_between(sysdate,hiredate)) from emp group by deptno) e, dept d where e.deptno =d.deptno; 14. select d.dname, e.ename, sal+nvl(comm,0) from emp e, dept d where d.deptno=e.deptno; 15. select e.ename,e.job, e.deptno ,d.job, d.deptno from emp e, emp d where e.job=d.job and e.deptno<>d.deptno; 16. select count(e.ename),d.dname from emp e, dept d where e.deptno(+)= d.deptno group by e.deptno,d.dname; 或者写成 select d.deptno,e.*,d.dname from (select deptno,count(ename) from emp group by deptno) e,dept d where e.deptno(+)= d.deptno; 17. select job,min(sal+nvl(comm,0))from emp group by job; 18. select deptno,min(sal) from emp where job=upper('manager') group by deptno ; 19. select ename , (sal+nvl(comm,0))*12 yearsal from emp order by yearsal ; --1、列出至少有一个雇员的所有部门 select distinct dname from dept where deptno in (select distinct deptno from emp); --2、列出薪金比"SMITH"多的所有雇员 select ename,sal from emp where sal>(select sal from emp where ename=upper('smith')); --3、列出所有雇员的姓名及其直接上级的姓名 select e.ename,m.ename from emp e,emp m where e.mgr=m.empno(+); --4、列出入职日期早于其直接上级的所有雇员 select ename from emp e where hiredate<(select hiredate from emp where empno=e.mgr); --5、列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门 select dname,ename from dept d left join emp e on d.deptno=e.deptno; --6、列出所有“CLERK”(办事员)的姓名及其部门名称 select ename,dname from emp e left join dept d on e.deptno=d.deptno where job=upper('clerk'); --7、列出各种工作类别的最低薪金,显示最低薪金大于1500的记录 select job,min(sal) from emp group by job having min(sal)>1500; --8、列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号 select ename from emp where deptno = (select deptno from dept where dname=uppder('SALES')) --9、列出薪金高于公司平均水平的所有雇员 select ename from emp where sal>(select avg(sal) from emp); --10、列出与“SCOTT”从事相同工作的所有雇员 select ename from emp where job=(select job from emp where ename=upper('scott')); --11、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30
中
任何一个雇员的薪金 select ename,sal from emp where sal in (select sal from emp where deptno=30); --12、列出某些雇员的姓名和薪金,条件是他们的薪金高于部门30
中
所有雇员的薪金 select ename ,sal from emp where sal>(select max(sal) from emp where deptno=30); --13、列出每个部门的信息以及该部门
中
雇员的数量 select d.deptno,dname,count(ename) from dept d left join emp e on (d.deptno=e.deptno) group by d.deptno,dname --14、列出所有雇员的雇员名称、部门名称和薪金 Select e.ename,d.dname,e.sal from emp e left join dept d on (d.deptno=e.deptno) --15、列出从事同一种工作但属于不同部门的雇员的不同组合 Select tba.ename,tbb.ename,tba.job,tbb.job,tba.deptno,tba.deptno From emp tba,emp tbb Where tba.job=tbb.job and tba.deptno<>tbb.deptno --16、列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员 Select dept.deptno,dname,loc,count(empno) From dept,emp Where dept.deptno=emp.deptno(+) Group by dept.deptno,dname,loc --17、列出各种类别工作的最低工资 Select min(sal) from emp group by job --18、列出各个部门的MANAGER(经理)的最低薪金 Select deptno,min(sal) from emp where job=upper(‘manager’) group by deptno --19、列出按年薪排序的所有雇员的年薪 select (sal+nvl(comm,0))*12 as avn from emp order by avn --20、列出薪金水平处于第四位的雇员 Select * from (Select ename,sal, rank() over (order by sal desc) as grade from emp) where grade=4 --1、选择部门30
中
的雇员 select * from emp where deptno=30; --2、列出所有办事员的姓名、编号和部门 select ename,empno,dname from emp e inner join dept d on e.deptno = d.deptno where job=upper(‘clerk’); --3、找出佣金高于薪金的雇员 select * from emp where comm>sal; --4、找出佣金高于薪金60%的雇员 select * from emp where comm>sal*0.6 --5、找出部门10
中
所有经理和部门20
中
的所有办事员的详细资料 select * from emp where (deptno=10 and job=upper(‘manager‘)) or (deptno=20 and job=upper(‘clerk ‘)); --6、找出部门10
中
所有经理、部门20
中
所有办事员,既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料 select * from emp where (deptno=10 and job=upper(‘manager‘)) or (deptno=20 and job=upper(‘clerk ‘)) or (job<>upper(‘manager’) and job<>upper(‘clerk’) and sal>=2000) --7、找出收取佣金的雇员的不同工作 select distinct job from emp where comm>0; --8、找出不收取佣金或收取的佣金低于100的雇员 select * from emp where nvl(comm,0)<100; --9、找出各月最后一天受雇的所有雇员 select * from emp where hiredate= last_day(hiredate); --10、找出早于25年之前受雇的雇员 select * from emp where months_between(sysdate,hiredate)/12>25; select * from emp where hiredate
0; --25、以年、月和日显示所有雇员的服务年限 Select months_between(sysdate,hiredate)/12 as “年”, months_between(sysdate,hiredate) as “月”, sysdate-hiredate as “日” from emp
PL/SQL Developer8.04官网程序_keygen_汉化
PL/SQL Developer是一个集成开发环境,专门面向
Oracle
数据
库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了
Oracle
Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL Developer侧重于易用性、代码品质和生产力,充分发挥
Oracle
应用程序开发过程
中
的主要优势。 主要特性 登录界面PL/SQL编辑器,具有语法加强、SQL和PL/SQL帮助、对象描述、代码助手、编译器提示、PL/SQL完善、代码内容、代码分级、浏览器按钮、超链接导航、宏库等许多智能特性,能够满足要求性最高的用户需求。当您需要某个信息时,它将自动出现,至多单击即可将信息调出。 重要功能 集成调试器 该调试器(要求
Oracle
7.3.4或更高)提供您所需要的全部特性:跳入(Step In)、跳过(Step Over)、跳出(Step Out)、异常时停止运行、断点、观察和设置变量、观察全部堆栈等。基本能够调试任何程序单元(包括触发器和
Oracle
8 对象类型),无需作出任何修改。 PL/SQL完善器 该完善器允许您通过用户定义的规则对SQL和PL/SQL代码进行规范化处理。在编译、保存、打开一个文件时,代码将自动被规范化。该特性提高了您编码的生产力,改善了PL/SQL代码的可读性,促进了大规模工作团队的协作。 SQL 窗口 该窗口允许您输入任何SQL语句,并以栅格形式对结果进行观察和编辑,支持按范例查询模式,以便在某个结果集合
中
查找特定记录。另外,还含有历史缓存,您可以轻松调用先前执行过的SQL语句。该SQL编辑器提供了同PL/SQL编辑器相同的强大特性。 命令窗口 使用PL/SQL Developer 的命令窗口能够开发并运行SQL脚本。该窗口具有同SQL*Plus相同的感观,另外还增加了一个内置的带语法加强特性的脚本编辑器。这样,您就可以开发自己的脚本,无需编辑脚本/保存脚本/转换为SQL*Plus/运行脚本过程,也不用离开PL/SQL Developer集成开发环境。 报告 PL/SQL Developer提供内置的报告功能,您可以根据程序
数据
或
Oracle
字典运行报告。PL/SQL Developer本身提供了大量标准报告,而且您还可以方便的创建自定义报告。自定义报告将被保存在报告文件
中
,进而包含在报告菜单内。这样,运行您自己经常使用的自定义报告就非常方便。 您可以使用Query Reporter免费软件工具来运行您的报告,不需要PL/SQL Developer,直接从命令行运行即可。 工程 PL/SQL Developer内置的工程概念可以用来组织您的工作。一个工程包括源文件集合、
数据
库对象、notes和选项。PL/SQL Developer允许您在某些特定的条目集合范围之内进行工作,而不是在完全的
数据
库或架构之内。这样,如果需要编译所有工程条目或者将工程从某个位置或
数据
库移动到其他位置时,所需工程条目的查找就变得比较简单。 To-Do条目 您可以在任何SQL或PL/SQL源文件
中
使用To-Do条目快速记录该文件
中
那些需要进行的事项。以后能够从To-Do列
表
中
访问这些信息,访问操作可以在对象层或工程层进行。 对象浏览器 可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、浏览
数据
、在对象源
中
进行文本查找、拖放对象名到编辑器等。 此外,该对象浏览器还可以显示对象之间的依存关系,您可以递归的扩展这些依存对象(如包参考检查、浏览参考表格、图表类型等)。 性能优化 使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(
Oracle
8i或更高),从而优化您SQL和PL/SQL的代码性能。 更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息。该统计信息包括CPU使用情况、块I/O、记录I/O、表格扫描、分类等。 HTML指南
Oracle
目前支持HTML格式的在线指南。您可以将其集成到PL/SQL Developer工作环境
中
,以便在编辑、编译出错或运行时出错时提供内容敏感帮助。 非PL/SQL对象 不使用任何SQL,您就可以对表格、序列、符号、库、目录、工作、队列、用户和角色进行浏览、创建和修改行为。PL/SQL Developer提供了一个简单易用的窗体,只要将信息输入其
中
,PL/SQL Developer就将生成相应的SQL,从而创建或转换对象。 模板列表 PL/SQL Developer的模板列表可用作一个实时的帮助组件,
PLSQLDeveloper下载
PL/SQL Developer是一个集成开发环境,专门面向
Oracle
数据
库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了
Oracle
Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL Developer侧重于易用性、代码品质和生产力,充分发挥
Oracle
应用程序开发过程
中
的主要优势。 目录 简介 背景 主要特性 编程基础知识程序结构 控制结构 变量声明与赋值 SQL基本命令 过程与函数
游标
显示
游标
隐式
游标
简介 背景 主要特性 编程基础知识 程序结构 控制结构 变量声明与赋值 SQL基本命令 过程与函数
游标
显示
游标
隐式
游标
展开 编辑本段简介 PLSQL PL/SQL(Procedural Language/SQL)是一种过程化语言,属于第三代语言,它与C、C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。它允许SQL的
数据
操纵语言和查询语句包含在块结构(block_structured)和代码过程语言
中
,使PL/SQL成为一个功能强大的事务处理语言。在甲骨文
数据
库管理方面,PL/SQL是对结构化查询语言(SQL)的过程语言扩展。PL/SQL的目的是联合
数据
库语言和过程语言。PL/SQL的基本单位叫做一个区段,由三个部分组成:一个申明部分,一个可运行部分,和排除-构建部分。 因为PL/SQL允许混合SQL申明和过程结构,因此可以在将申明发送到甲骨文系统去执行之前使用PL/SQL区段和副程序来组合SQL申明,没有PL/SQL,甲骨文需要就每次处理SQL申明,在网络环境
中
,这将影响交通流量,而且增加响应时间。PL/SQL区段只被编译一次并且以可运行的形式储存,以降低响应时间。 编辑本段背景 结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型
数据
库一种通用语言,属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单地调用相应语句来直接取得结果即可。显然,这种不关注任何实现细节的语言对于开发者来说有着极大的便利。然而,有些复杂的业务流程要求相应的程序来描述,这种情况下4GL就有些无能为力了。PL/SQL的出现正是为了解决这一问题,PL/SQL是一种过程化语言,属于第三代语言,它与C、 C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。本文主要介绍PL/SQL的编程基础,以使入门者对PL/SQL语言有一个总体认识和基本把握。 编辑本段主要特性 PL/SQL编辑器,功能强大——该编辑器具有语法加强、SQL和PL/SQL帮助、对象描述、代码助手、编译器提示、PL/SQL完善、代码内容、代码分级、浏览器按钮、超链接导航、宏库等许多智能特性,能够满足要求性最高的用户需求。当您需要某个信息时,它将自动出现,至多单击即可将信息调出。 集成调试器(要求
Oracle
7.3.4或更高)——该调试器提供您所需要的全部特性:跳入(Step In)、跳过(Step Over)、跳出(Step Out)、异常时停止运行、断点、观察和设置变量、观察全部堆栈等。基本能够调试任何程序单元(包括触发器和
Oracle
8 对象类型),无需作出任何修改。 PL/SQL完善器——该完善器允许您通过用户定义的规则对SQL和PL/SQL代码进行规范化处理。在编译、保存、打开一个文件时,代码将自动被规范化。该特性提高了您编码的生产力,改善了PL/SQL代码的可读性,促进了大规模工作团队的协作。 SQL 窗口——该窗口允许您输入任何SQL语句,并以栅格形式对结果进行观察和编辑,支持按范例查询模式,以便在某个结果集合
中
查找特定记录。另外,还含有历史缓存,您可以轻松调用先前执行过的SQL语句。该SQL编辑器提供了同PL/SQL编辑器相同的强大特性。 命令窗口——使用PL/SQL Developer 的命令窗口能够开发并运行SQL脚本。该窗口具有同SQL*Plus相同的感观,另外还增加了一个内置的带语法加强特性的脚本编辑器。这样,您就可以开发自己的脚本,无需编辑脚本/保存脚本/转换为SQL*Plus/运行脚本过程,也不用离开PL/SQL Developer集成开发环境。 报告——PL/SQL Developer提供内置的报告功能,您可以根据程序
数据
或
Oracle
字典运行报告。PL/SQL Developer本身提供了大量标准报告,而且您还可以方便的创建自定义报告。自定义报告将被保存在报告文件
中
,进而包含在报告菜单内。这样,运行您自己经常使用的自定义报告就非常方便。 您可以使用Query Reporter免费软件工具来运行您的报告,不需要PL/SQL Developer,直接从命令行运行即可。 工程——PL/SQL Developer内置的工程概念可以用来组织您的工作。一个工程包括源文件集合、
数据
库对象、notes和选项。PL/SQL Developer允许您在某些特定的条目集合范围之内进行工作,而不是在完全的
数据
库或架构之内。这样,如果需要编译所有工程条目或者将工程从某个位置或
数据
库移动到其他位置时,所需工程条目的查找就变得比较简单, To-Do条目——您可以在任何SQL或PL/SQL源文件
中
使用To-Do条目快速记录该文件
中
那些需要进行的事项。以后能够从To-Do列
表
中
访问这些信息,访问操作可以在对象层或工程层进行。 对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、浏览
数据
、在对象源
中
进行文本查找、拖放对象名到编辑器等。 此外,该对象浏览器还可以显示对象之间的依存关系,您可以递归的扩展这些依存对象(如包参考检查、浏览参考表格、图表类型等)。 性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(
Oracle
8i或更高),从而优化您SQL和PL/SQL的代码性能。 更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息。该统计信息包括CPU使用情况、块I/O、记录I/O、表格扫描、分类等。 HTML指南——
Oracle
目前支持HTML格式的在线指南。您可以将其集成到PL/SQL Developer工作环境
中
,以便在编辑、编译出错或运行时出错时提供内容敏感帮助。 非PL/SQL对象——不使用任何SQL,您就可以对表格、序列、符号、库、目录、工作、队列、用户和角色进行浏览、创建和修改行为。PL/SQL Developer提供了一个简单易用的窗体,只要将信息输入其
中
,PL/SQL Developer就将生成相应的SQL,从而创建或转换对象。 模板列表——PL/SQL Developer的模板列表可用作一个实时的帮助组件,协助您强制实现标准化。只要点击相应的模板,您就可以向编辑器
中
插入
标准的SQL或PL/SQL代码,或者从草稿出发来创建一个新程序。 查询构建器——图形化查询构建器简化了新选择语句的创建和已有语句的修改过程。只要拖放表格和视窗,为区域列表选择专栏,基于外部键约束定义联合表格即可。 比较用户对象——对表格定义、视图、程序单元等作出修改后,将这些修改传递给其他
数据
库用户或检查修改前后的区别将是非常有用的。这也许是一个其他的开发环境,如测试环境或制作环境等。而比较用户对象功能则允许您对所选对象进行比较,将不同点可视化,并运行或保存应用必要变动的SQL脚本。 导出用户对象——该工具可以导出用户所选对象的DDL(
数据
定义语言)语句。您可以方便的为其他用户重新创建对象,也可以保存文件作为备份。 工具——PL/SQL Developer为简化日常开发专门提供了几种工具。使用这些工具,您可以重新编译全部不合法对象、查找
数据
库源
中
文本、导入或导出表格、生成测试
数据
、导出文本文件、监控dbms_alert和dbms_pipe事件、浏览会话信息等。 授权——大多数开发环境
中
,您不希望所有
数据
库都具备PL/SQL Developer的全部功能性。例如,
数据
库开发
中
您可以允许PL/SQL Developer的全部功能性,而
数据
库测试
中
您可以仅允许
数据
查询/编辑和对象浏览功能,而
数据
库制作
中
您甚至根本不希望PL/SQL Developer访问。利用PL/SQL Developer授权功能,您可以方便的定义特定用户或规则所允许使用的功能。 插件扩展——可以通过插件对PL/SQL Developer功能进行扩展。Add-ons页面提供插件可以免费下载。Allround Automations或其他用户均可提供插件(如版本控制插件或plsqldoc插件)。如果您具备创建DLL的编程语言,您还可以自己编写插件。 多线程IDE——PL/SQL Developer是一个多线程IDE。这样,当SQL查询、PL/SQL程序、调试会话等正在运行时,您依然可以继续工作。而且,该多线程IDE还意味着出现编程错误时不会
中
止:您在任何时间都可以
中
断执行或保存您的工作。 易于安装——不同于SQL*Net,无需
中
间件,也无需
数据
库对象安装。只需点击安装程序按钮,您就可以开始安装从而使用软件了。 编辑本段编程基础知识 程序结构 PL/SQL程序都是以块(block)为基本单位,整个PL/SQL块分三部分:声明部分(用declare开头)、执行部分(以 begin开头)和异常处理部分(以exception开头)。其
中
执行部分是必须的,其他两个部分可选。无论PL/SQL程序段的代码量有多大,其基本结构就是由这三部分组成。如下所示为一段完整的PL/SQL块: /*声明部分,以declare开头*/ declare v_id integer; v_name varchar(20); cursor c_emp is select * from employee where emp_id=3; /*执行部分,以begin开头*/ begin open c_emp; //打开
游标
loop fetch c_emp into v_id,v_name; //从
游标
取
数据
exit when c_emp%notfound ; end loop ; close c_emp; //关闭
游标
dbms_output.PUT_LINE(v_name); /*异常处理部分,以exception开始*/ exception when no_data_found then dbms_output.PUT_LINE('没有
数据
'); end ; 控制结构 PL/SQL程序段
中
有三种程序结构:条件结构、循环结构和顺序结构。 1) 条件结构 与其它语言完全类似,语法结构如下: if condition then statement1 else statement2 end if ; 2) 循环结构 这一结构与其他语言不太一样,在PL/SQL程序
中
有三种循环结构: a. loop … end loop; b. while condition loop … end loop; c. for variable in low_bound . . upper_bound loop … end loop; 其
中
的“…”代表循环体。 3) 顺序结构 实际就是goto的运用,不过从程序控制的角度来看,尽量少用goto可以使得程序结构更加的清晰。 变量声明与赋值 PL/SQL主要用于
数据
库编程,所以其所有的
数据
类型跟
Oracle
数据
库里的字段类型是一一对应的,大体分为数字型、布尔型、字符型和日期型。这里简单介绍两种常用
数据
类型:number、varchar2。 number 用来存储整数和浮点数。范围为1e130~10e125,其使用语法为: number[(precision, scale)] 其
中
(precision, scale)是可选的,precision表示所有数字的个数,scale表示小数点右边数字的个数。 varchar2 用来存储变长的字符串,其使用语法为: varchar2[(size)] 其
中
size为可选,表示该字符串所能存储的最大长度。 在PL/SQL
中
声明变量与其他语言不太一样,它采用从右往左的方式声明,比如声明一个number类型的变量v_id,那其形式应为: v_id number; 如果给上面的v_id变量赋值,不能用“=”,应该用“:=”,即形式为: v_id :=5; SQL基本命令 PL/SQL使用的
数据
库操作语言还是基于SQL的,所以熟悉SQL是进行PL/SQL编程的基础。SQL语言的分类情况大致如下: 1)
数据
定义语言(DDL):Create,Drop,Grant,Revoke,… 2)
数据
操纵语言(DML):Update,Insert,Delete,… 3)
数据
控制语言(DCL):Commit,Rollback,Savapoint,… 4) 其他:Alter System,Connect,Allocate, … 具体的语法结构可以参阅其他关于SQL语言的资料,这里不再赘述。 编辑本段过程与函数 PL/SQL
中
的过程和函数与其他语言的过程和函数一样,都是为了执行一定的任务而组合在一起的语句。过程无返回值,函数有返回值。其语法结构为: 过程:Create or replace procedure procname(参数列表) as PL/SQL语句块 函数:Create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块 为便于理解,举例如下: 问题:假设有
一张
表t1,有f1和f2两个字段,f1为number类型,f2为varchar2类型,要往t1里写两条记录,内容自定。 Create or replace procedure test_procedure as V_f11 number :=1; /*声明变量并赋初值*/ V_f12 number :=2; V_f21 varchar2(20) :='first'; V_f22 varchar2(20) :='second'; Begin Insert into t1 values (V_f11, V_f21); Insert into t1 values (V_f12, V_f22); End test_procedure; /*test_procedure可以省略*/ 至此,test_procedure存储过程已经完成,经过编译后就可以在其他PL/SQL块或者过程
中
调用了。函数与过程具有很大的相似性,此处不再详述。 编辑本段
游标
游标
的定义为:用
游标
来指代一个DML SQL操作返回的结果集。即当一个对
数据
库的查询操作返回一组结果集时,用
游标
来标注这组结果集,以后通过对
游标
的操作来获取结果集
中
的
数据
信息。这里特别提出
游标
的概念,是因为它在PL/SQL的编程
中
非常的重要。定义
游标
的语法结构如下: cursor cursor_name is SQL语句; 在本文第一段代码
中
有一句话如下: cursor c_emp is select * from employee where emp_id=3; 其含义是定义一个
游标
c_emp,代表employee
表
中
所有emp_id字段为3的结果集。当需要操作该结果集时,必须完成三步:打开
游标
、使用fetch语句将
游标
里的
数据
取出、关闭
游标
。
游标
用来处理从
数据
库
中
检索的多行记录(使用SELECT语句)。利用
游标
,程序可以逐个地处理和遍历一次检索返回的整个记录集。 为了处理SQL语句,
Oracle
将在内存
中
分配一个区域,这就是上下文区。这个区包含了已经处理完的行数、指向被分析语句的指针,整个区是查询语句返回的
数据
行集。
游标
就是指向上下文区句柄或指针。 显示
游标
显示
游标
被用于处理返回多行
数据
的SELECT 语句,
游标
名通过CURSOR….IS 语句显示地赋给SELECT 语句。 在PL/SQL
中
处理显示
游标
所必需的四个步骤: 1)声明
游标
;CURSOR cursor_name IS select_statement 2)为查询打开
游标
;OPEN cursor_name 3)取得结果放入PL/SQL变量
中
; FETCH cursor_name INTO list_of_variables; FETCH cursor_name INTO PL/SQL_record; 4)关闭
游标
。CLOSE cursor_name 注意:在声明
游标
时,select_statement不能包含INTO子句。当使用显示
游标
时,INTO子句是FETCH语句的一部分。 隐式
游标
所有的隐式
游标
都被假设为只返回一条记录。 使用隐式
游标
时,用户无需进行声明、打开及关闭。PL/SQL隐含地打开、处理,然后关掉
游标
。 例如: ……. SELECT studentNo,studentName INTO curStudentNo,curStudentName FROM StudentRecord WHERE name=’gg’; 上述
游标
自动打开,并把相关值赋给对应变量,然后关闭。执行完后,PL/SQL变量curStudentNo,curStudentName
中
已经有了值。 开放分类:
oracle
,plsql 我来完善 “plsql”相关词条: sql系统函数 sql 系统函数 百度百科
中
的词条内容仅供参考,如果您需要解决具体问题(尤其在法律、医学等领域),建议您咨询相关领域专业人士。 327本词条对我有帮助添加到搜藏 分享到: 更多 合作编辑者 百科ROBOT ,潘昊 ,江旭梦然 ,SONGYL525 ,ThinkIBM 更多 如果您认为本词条还需进一步完善,百科欢迎您也来参与编辑词条在开始编辑前,您还可以先学习如何编辑词条 如想投诉,请到百度百科投诉
中
心;如想提出意见、建议,请到百度百科吧。
oracle
使用
游标
插入
数据
,
游标
中
我怎样才能实现循环
插入
数据
呢???
该楼层疑似违规已被系统折叠隐藏此楼查看此楼declare cursor userinfo_cur isselect distinct upper(substr(t.report_name,1,(case when instr(t.report_name,' ')=0 then length(t.report_name)else instr(t.report_name,' ')-1 end)))f...
基础和管理
17,377
社区成员
95,128
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章