Oracle数据库游标的类型

Oracle数据库游标的类型,第1张

游标是SQL的一个内存工作区 由系统或用户以变量的形式定义 游标的作用就是用于临时存储从数据库中提取的数据块

Oracle数据库的Cursor类型包含三种 静态游标 分为显式(explicit)游标和隐式(implicit)游标 REF游标 是一种引用类型 类似于指针

测试数据

create table student(sno number primary key sname varchar ( ))

declare i number:= ;

beginwhile i<=

loop

insert into student(sno sname) values (i name ||to_char(i))

i:=i+ ;

end loop;

end;

隐式游标属性

SQL%ROWCOUNT 整型代表DML语句成功执行的数据行数

SQL%FOUND 布尔型值为TRUE代表插入 删除 更新或单行查询 *** 作成功

SQL%NOTFOUND 布尔型与SQL%FOUND属性返回值相反

SQL%ISOPEN 布尔型DML执行过程中为真 结束后为假

declarebegin  update student set sname = name ||to_char(sno ) where sname= name ;

if sql%found then

dbms_output put_line( name is updated )

else

dbms_output put_line( 没有记录 )

end if;

end;

declare

begin

for names in (select from student) loop

dbms_output put_line(names sname)

end loop;

exception when others then

dbms_output put_line(sqlerrm)

end;

显式游标属性

%ROWCOUNT 获得FETCH语句返回的数据行数

%FOUND 最近的FETCH语句返回一行数据则为真 否则为假

%NOTFOUND 布尔型 与%FOUND属性返回值相反

%ISOPEN 布尔型 游标已经打开时值为真 否则为假

对于显式游标的运用分为四个步骤

a 定义游标 Cursor [Cursor Name] IS;

b 打开游标 Open [Cursor Name];

c *** 作数据 Fetch [Cursor name];

d 关闭游标 Close [Cursor Name];

典型显式游标

declare cursor cur_rs is select from student; sinfo student%rowtype;

begin  open cur_rs;

loop

fetch cur_rs into sinfo;

exit when cur_rs%%notfound;

dbms_output put_line(sinfo sname)

end loop;

exception when others then

dbms_output put_line(sqlerrm)

end;

带参数open的显式cursor:

declare cursor cur_rs(in_name varchar ) is select

from student where sname=in_name;

begin  for sinfo in cur_rs( sname ) loop

dbms_output put_line(sinfo sname)

end loop;

exception when others then

dbms_output put_line(sqlerrm)

end;

使用current of语句执行update或delete *** 作

declare

cursor cur_rs is select from student for update;

begin  for sinfo in cur_rs loop

update student set sname=sname|| xx where current of cur_rs;

end loop;

mit;

exception when others then

dbms_output put_line(sqlerrm)

end;

REF游标 用于处理运行时才能确定的动态sql查询结果 利用REF CURSOR 可以在程序间传递结果集(一个程序里打开游标变量 在另外的程序里处理数据)

也可以利用REF CURSOR实现BULK SQL 提高SQL性能

REF CURSOR分两种 Strong REF CURSOR 和 Weak REF CURSOR

Strong REF CURSOR: 指定retrun type CURSOR变量的类型必须和return type一致

Weak REF CURSOR: 不指定return type 能和任何类型的CURSOR变量匹配

运行时根据动态sql查询结果遍历

create or replace package pkg_test as

type student_refcursor_type is ref cursor return student%rowtype;

procedure student_rs_loop(cur_rs IN student_refcursor_type)

end pkg_test ;

create or replace package body pkg_test as

procedure student_rs_loop(cur_rs IN student_refcursor_type) is

std student%rowtype;

begin  loop

fetch cur_rs into std;

exit when cur_rs%NOTFOUND;

dbms_output put_line(std sname)

end loop;

end student_rs_loop;

end pkg_test ;

declare stdRefCur pkg_test student_refcursor_type;

begin  for i in loop

dbms_output put_line( Student NO= || i)

open stdRefCur for select from student where sno=i;

pkg_test student_rs_loop(stdRefCur)

end loop;

exception when others then dbms_output put_line(sqlerrm)

close stdRefCur;

end;

使用FORALL和BULK COLLECT子句 利用BULK SQL可以减少PLSQL Engine和SQL Engine之间的通信开销 提高性能

加速INSERT UPDATE DELETE语句的执行 也就是用FORALL语句来替代循环语句

加速SELECT 用BULK COLLECT INTO 来替代INTO

create table

student_tmp as select sno

sname from student where = ;

删除主键约束 alter table student drop constraint SYS_C ;

执行两遍插入 insert into student select from student where sno= ;

declare cursor cur_std(stdid student sno%type) is select sno

sname from student where sno=stdid;

type student_table_type is table of cur_std%rowtype index by pls_integer;

student_table student_table_type;

begin

open cur_std( )

fetch cur_std bulk collect into student_table;

close cur_std;

for i in unt loop

dbms_output put_line(student_table(i) sno ||

|| student_table(i) sname)

end loop;

forall i in student_table firststudent_table last

insert into student_tmp values(student_table(i) sno student_table(i) sname)

mit;

end;

lishixinzhi/Article/program/Oracle/201311/17358

选择开始菜单中→程序→Management SQL Server 2008→SQL Server Management Studio命令,打开SQL Server Management Studio窗口,并使用Windows或 SQL Server身份验证建立连接。

在对象资源管理器窗口中展开服务器,然后选择数据库节点

右键单击数据库节点,从d出来的快捷菜单中选择新建数据库命令。

执行上述 *** 作后,会d出新建数据库对话框。在对话框、左侧有3个选项,分别是常规、选项和文件组。完成这三个选项中的设置会后,就完成了数据库的创建工作,

在数据库名称文本框中输入要新建数据库的名称。例如,这里以“新建的数据库”。

在所有者文本框中输入新建数据库的所有者,如sa。根据数据库的使用情况,选择启用或者禁用使用全文索引复选框。

在数据库文件列表中包括两行,一行是数据库文件,而另一行是日记文件。通过单击下面的添加、删除按钮添加或删除数据库文件。

切换到选项页、在这里可以设置数据库的排序规则、恢复模式、兼容级别和其他属性。

切换到文件组页,在这里可以添加或删除文件组。

完成以上 *** 作后,单击确定按钮关闭新建数据库对话框。至此“新建的数据”数据库创建成功。新建的数据库可以再对象资源管理器窗口看到。

超键就是指一组字段可以唯一确定一条数据,而候选键是最简洁的超键,也就是只有必要字段,

举例来说明,假如有一个班级,班级中没有同名的学生,有如下一张表。

std_id last_name first_name gender score

10001 张 三 男 85

10002 李 四 男 86

10005 妹 子 女 95

10006 李 三 男 88

这张表里,因为我们前面说到这个班级里没有同名的学生。

因此last_name+first_name就是一个超键,因为可以唯一确定一行数据,同时也是一个候选键,因为这两个字段去掉任何一个都不再能唯一确定一行数据。

更明显的区别在于,last_name+first_name+gender还是一个超键,但是已经不再是候选键了,因为在确定唯一一条数据的时候,gender不是必要的字段。

也就是说候选键是可以唯一确定一条数据的必要字段的最小集合,而候选键加上任何的额外字段都是超键。

在上面的例子中,std_id自己就是一个候选键,std_id+任何额外的字段都是候选键。

同时从习惯而言,一般会把这种std_id字段定义为主键,主键并不一定只是一个字段,如果我们上面的表增加一列班级id(class_id),同时加入每个班级中的std_id都是从10001开始的话,我们就可以用class_id+std_id来作为主键。

自己的理解,希望可以帮到题主。

正常安装完毕后,打开dbc2000 点herodb 大家看见了三个文件吧 <BR>分别是magicdb monterdb 和stditemdb <BR>magicdb呢就是你所修炼的法术和各种技能 </P>

<P>嫌练的慢麻烦吧~~~很简单哦 trainlv 表格是需要升级的经验 <BR>needlv 是需要的等级 <BR>注:mode 里 0 是战士技能 1是道士技能 2 是法师技能 </P>

<P><BR>monsterdb 是关于怪物的攻击,经验,还有等级方面的东西</P>

<P>好,现在是最重要的物品修改了所有的修改都在stditemdb里 <BR>兵器类<BR>一般来说武器只要改ac2和mac2就行了 前面是改准确 后面是改攻击 <BR>速度 把那两个都改成10 哈哈,你会发现你的武器是+10准确+10攻击速度 <BR>的超级兵器 还有的兵器能改附带幸运,可惜我没时间研究~~残念~ <BR>dc是攻击下限dc2是攻击上限mc是附带魔法sc是道术 不过最好别改太离谱了 <BR>超过了255带在身上攻击是会减成0的 <BR>戒指类 <BR>戒指有几种属性,像生铁 降妖之类的ac mac 是防跟魔防 <BR>狂风,道德,魅力则是毒物躲避,中毒恢复之类的 都可改 <BR>攻击速度 后面的dc mc sc 相同 <BR>项链类 <BR>项链可带的属性可真不少,什么魔法恢复啊,生命恢复啊 幸运,行动速度 <BR>都能带 <BR>一般来说 mode是0的如绿色,蓝翡翠之类的是加准确和敏捷 <BR>而狂风,记忆,之类的是加幸运和生命魔法恢复 <BR>注意了能改幸运,自然也是能加诅咒的 改的时候注意下 <BR>改幸运一般是ac2 <BR>手镯类 <BR>也分两类 一个是加敏捷和准确的 一个是加防的 <BR>加准确和敏捷的手镯改dc 是加敏和准, <BR>而加防和攻的改则是加防 <BR>inx编号 <BR>name名字 <BR>stdmode模式(定义物品是什么比如药就是0,男衣服是10女的是11,其实就是你物品使用方法的模式,比如0就是药,你就双击,10是衣服,你就穿) <BR>shape模式(stdmode分类下的小分类,别如慢慢加的药是0,瞬间加的是1,其实就是这个东西效果的模式,比如0的药就1格1格加,1的药就瞬间加) <BR>wi这个是重量 <BR>anicount,source,resevc这3个不知道有什么用,我也没用到 <BR>looks是外观,就是你看到的 <BR>duarmax这个是持久,是传奇中的1000倍 <BR>stock不知道有什么用 <BR>下面讲关键的 <BR>先说药类 <BR>std 0 sha 0 就是说普通药,比如金创药,ac是加血的数字mac是加魔法的数字 <BR>std 0 sha 1 就是说太阳水类,点了就满的,ac是加血的数字mac是加魔法的数字 <BR>说刀 <BR>一般的刀的std是5,或6,我也不知道有什么区别 <BR>ac2是准,mac2是敏捷,mac是攻击速度ac是 <BR>项链 <BR>stdmode19的和20的不同 <BR>主要区别在ac,ac2,macmmac2具体见上 <BR>以后的物品也可以同上的规律 <BR>关于need <BR>need和needlevel有关 <BR>need 0 <BR>needlevel是段术 <BR>need 1后者是攻击力 <BR>2是魔法 <BR>3是道术 <BR>4不知道咯 <BR>修改物品的外观。用db打开d:\mirserver\mud2\db\stditems,在各套装备的looks下边改变相应的对应数字。有几个比较cool的推荐给大家。 <BR>手镯430 戒指429 项链428 <BR>手镯436 戒指438 项链437 <BR>手镯442 戒指441 项链440 <BR>首先用db commander 2000,打开:\mirserver\mud2\db下的stditemsdb数据库文件 <BR>1选中最底下的那个装备名,然后点图中所示1的位置那个+号,这样就会在你所选中的装备前面插入一列横向表单,点了+号后,在右边就会出现一个“对号”标记的按钮,按一下这个“对号”就表示确定插入这一横列。 <BR>2现在开始你就是一名裁缝了: <BR>a首先点一下最左边“idx”属性对下来的空表单处,然后写入序号,记住序号不要重复,最好能按照先后次序排列(具体有什么影响我也不知道。) </P>

<P>b“name”属性是物件的名称,在这里我们写入“伯爵斗篷(男)"。 </P>

<P>c“stdmode”属性具体表示什么我不知道,但男的衣服改成“10”,女的衣服改成“11”,这样男的衣服就不能给女的穿,女的衣服就不能给男的穿了! </P>

<P>d“shape”<BR>“5”表示“灵魂战衣”的样子。 <BR>“4”表示“魔法长袍”的样子。 <BR>“3”表示“重盔甲”的样子。 </P>

<P>e“weight”属性是物件重量,这个很简单,自己改咯! </P>

<P>f“looks”属性决定了这件衣服@make出来后放包包里的样子和在装备栏里的样子,这个你可以参照前面物件的属性,我查了一下,变量是这样的: <BR>“重盔甲(男)”or"战神盔甲(男)"or"钢盔甲(男)" 62 <BR>"魔法长袍(男)"or"恶魔长袍(男)"or"圣龙魔袍(男)" 63 <BR>"灵魂战衣(男)"or"幽灵战衣(男)"or"泰坦战衣(男)" 64 <BR>"重盔甲(女)"or"战神盔甲(女)"or"钢盔甲(女)" 82 <BR>"魔法长袍(女)"or"恶魔长袍(女)"or"圣龙魔袍(女)" 83 <BR>"灵魂战衣(女)"or"幽灵战衣(女)"or"泰坦战衣(女)" 84 <BR>改其他装备的时候参照前面物件的变量就可以了! </P>

<P>g"duramax"这个就是我们要找的物件持久的属性了,一开始怎么也找不到,原来这里的变量中"1000"表示1个持久度,那么"40000"就表示40个持久度了! </P>

<P>h后面的属性大家一定都熟悉了: <BR>"ac" 防御力下限 <BR>"ac2" 防御力上限 <BR>"mac" 魔防下限 <BR>"mac2" 魔防上限 <BR>"dc" 物理攻击力下限 <BR>"dc2" 物理攻击力上限 <BR>"mc" 魔法攻击力下限 <BR>"mc2" 魔法攻击力上限 <BR>"sc" 道术下限 <BR>"sc2" 道术上限 <BR>"needlevel" 需要等级 <BR>"price" 价格 <BR>物品是首饰时 <BR>"ac2" 不是 防御力上限 而是 准确 <BR>"mac2" 不是 魔防上限 而是 敏捷 <BR>来看: <BR>阎罗手套:防御0-4 <BR>数据库体现: <BR>ac 0 <BR>ac2 4 <BR>记忆头盔:防御3-3 <BR>数据库体现: <BR>ac 3 <BR>ac2 3 <BR>祈祷头盔:防御3-4 魔御1-2 <BR>数据库体现: <BR>ac 3 <BR>ac2 4 <BR>mac 1 <BR>mac2 2 <BR>这样看来,在普通首饰和服饰中: <BR>ac就表示防御下限; <BR>ac2表示防御上限; <BR>mac表示魔御下限; <BR>mac2表示魔御上限。 </P>

<P>有特殊的吗?有: <BR>白色虎齿项链:道术1-0 魔法躲避20% <BR>数据库体现: <BR>ac2 2 <BR>sc 1 <BR>灯笼项链:攻击1-0 魔法躲避10% <BR>数据库体现: <BR>ac2 1 <BR>dc 1 </P>

<P>这里的ac2 就表示魔法躲避,其中1代表10%,2就是20%。 <BR>问题:要是防御0-2 魔法躲避20%,那ac2究竟要代表什么???幸好还没发现有这样的首饰。(需要研究) </P>

<P>看更特殊的: <BR>狂风项链 攻击0-1 攻击速度+2 <BR>数据库体现: <BR>ac 2 <BR>ac2 0 <BR>dc 0 <BR>dc2 1 <BR>gm项链:攻击速度+10 生命力恢复100% 魔法力恢复100% <BR>数据库体现: <BR>ac 10 <BR>ac2 10 <BR>mac 0 <BR>mac2 10 <BR>比较一下,这里的 <BR>ac 表示的是攻击速度 <BR>ac2表示生命力恢复100% <BR>mac2表示魔法力恢复100% </P>

<P><BR>武器呢?武器中这几个属性所代表的又是不同的: <BR>降魔:准确+1(其他属性略) <BR>数据库体现: <BR>ac2 1 <BR>pk刀:幸运+7,准确+7(其他属性略) <BR>数据库体现: <BR>ac2 7 <BR>source -7(注意这个属性) <BR>超级无极棍:幸运+10 准确+10 神圣+10 <BR>数据库体现: <BR>ac 10 <BR>ac2 10 <BR>source -10(注意) <BR>我找遍所有武器,只有超级无极棍的ac 为10 ,那么可以推断武器中的 <BR>ac 表示神圣,虽然我不知道神圣到底干什么用的?(需要研究) <BR>而ac2 就表示准确 <BR>重点是source ,不难看出,他应该就代表了幸运,但为什么是-10呢?莫非诅咒才体现为正值?(需要研究) </P>

<P><BR>继续要药剂的属性: <BR>强效金疮药:hp +90 <BR>数据库体现: <BR>ac 90 <BR>强效太阳水:hp +50 mp +80 <BR>数据库体现: <BR>ac 50 <BR>mac 80 <BR>这样看来,这里的 <BR>ac 表示 hp前值(注 hp:200/300,200为前值,300为后值。) <BR>mac 表示 mp前值 <BR>没特殊的吗?有: <BR>一些不常见的特殊药剂: <BR>生命强化水:生命力暂时提升120秒(120秒内hp后值+50) <BR>数据库体现: <BR>ac 50 <BR>mac2 120 <BR>魔法强化水:魔法力暂时提升120秒(120秒内mp后值+50) <BR>mac 50 <BR>mac2 120 <BR>那么这里的 <BR>ac 表示hp后值 <BR>mac 表示mp后值 <BR>mac2 就表示时间了。 <BR>大家知道 苹果 是每项属性都暂时增加240秒,他的ac2中是2,那么应该和武器一样,ac2表示准确了! <BR>还有详细的:<BR>StdItemsdb 中的 Stdmode 的详细解释<BR>Stdmode Shape<BR> </P>

<P>0 :药 (AC加HP的值,MAC加MP的值)<BR> 0:普通<BR> 1:直接增加(如太阳水)<BR> 2,3,4 未知<BR>1 :食物<BR> 0:普通<BR>2 :食物<BR> 0:普通<BR>3 :特殊药水和卷轴<BR> 1:地逃<BR> 2:随机<BR> 3:回城<BR> 4:祝福油<BR> 5:行会回城卷<BR> 6-8:<BR> 9:修复油<BR> 10:战神油<BR> 11:**<BR> 12:特殊药水(MAC2:时间,Dc:+DC,Sc:+SC,Mc:+MC,Ac2:+速度,Ac=+HP,Mac=+MP)<BR>4 :书<BR> 0:战 1:法 2:道<BR>5,6:武器 (5刀剑,6法杖)<BR> shape:武器形状 (Ac2=准,Mac=诅咒,Mac2=攻击速度-,Source=神圣,Ac=幸运)<BR>10 :男衣<BR>11 :女衣<BR> Shape:形状 1:布衣 2:轻盔 3:战 4:法 5:道<BR>15 :头盔<BR> 0:普通<BR> 125:记忆系列<BR> 129:祈祷系列<BR> 132:神秘系列<BR>19 :项链 (Ac2=魔法躲避,Mac=诅咒,Mac2=幸运)<BR> 0:普通<BR> 123:记忆系列<BR>20 :项链 (Ac2=准,Mac2=敏)<BR> 0:普通<BR> 120:技能项链<BR> 121:探测项链<BR> 135:魔血项链(MP转HP)<BR> 137:虹魔项链(吸HP)<BR>21 :特殊项链 (Ac=速度+,Ac2=HP 恢复,Mac=速度-,Mac2=MP 恢复)<BR> 0:狂风<BR> 113:恢复<BR>22 :戒指<BR> 0:普通<BR> 111:隐身<BR> 112:传送<BR> 113:麻痹<BR> 114:复活<BR> 115:火焰<BR> 116:治愈<BR> 117:?<BR> 118:护身<BR> 119:超负载<BR> 122:记忆<BR> 130:神秘<BR> 133:魔血<BR> 136:虹魔<BR>23 :戒指 (Ac=速度+)<BR> 0:普通<BR> 128:祈祷<BR>24 :手镯<BR> 0:普通<BR> 124:记忆<BR>26 :手镯</P> </td>

以上就是关于Oracle数据库游标的类型全部的内容,包括:Oracle数据库游标的类型、数据库sql2000版本导入数据时出现未能创建std包实例、如何简单明了的解释一下关系数据库的候选键和超键等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9369953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存