ImageVerifierCode 换一换
你正在下载:

PLSQL.docx

[预览]
格式:DOCX , 页数:36 ,大小:168.44KB ,
资源ID:4393874      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4393874.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(PLSQL.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

PLSQL.docx

1、PLSQL常见访问oracle的技术PLSQL 过程化sql procedure(存储过程)pro*c/c+ 使用c和c+访问oracle数据库odbc/ado vc访问数据库的技术sqlj/jdbc java访问数据库的技术PL/SQLPL/SQL(Procedural Language/SQL)是在标准SQL的基础上增加了过程化处理的语言。plsql扩展了sql 变量和数据类型 控制结构 if for goto 过程和函数 对象类型和方法PL/SQL程序结构QL/SQL块 声明部分, declare /声明区,定义变量和定义类型 执行部分, begin /执行区,执行sql语句和qlsql

2、语句 异常处理, exception /异常处理区,处理错误的区域 结束, end;sqlplus 命令行下的开发工具图形开发工具: plsqldeveloper sqlprogramer设置输出set serveroutput on /设置输出begin dbms_output.put_line(hello plsql);end;/1.变量的声明和定义declare var_id number:=100; /*变量定义和初始化*/ var_name varchar2(30):=test;begin dbms_output.put_line(var_id|:|var_name);end;2.变

3、量的赋值declare var_id number; /*变量定义和初始化*/ var_name varchar2(30);begin var_id:=1001; var_name:=test; dbms_output.put_line(var_id|:|var_name);end;3.变量的修饰 constant not null eg. var_id constant number:= 100; var_name varchar2(30) not null:=a;一个变量声明为not null必须赋初值,因为任何一个变量定义之后不赋值 值都是null。4变量数据类型1. 标量型(基本类型)

4、a) 数字型(number,binary_integer)b) 字符型(char,varchar2(0-4K)c) 布尔型(boolean : true,false,NULL)d) 日期型(date)2. 组合型a) RECORD,TABLE,3. 参考类型 引用类型a) ref cursor4. 大类型a) CLOB(0-4G)b) BLOB(0-4G)c) BFILE(0-4G) (一般不使用这种类型,因为存储数据的路径就可以解决问题)eg.NUMBER(4,3) 123.4567 /错误超出精度NUMBER(3,-3) 1234 /1000NUMBER(4,6) 0.0012345 /0

5、.0012355.定义两个变量 分别和s_emp 表中id和first_name的类型相同 把id=1的数据赋值给这个两个变量 然后输出 declare var_id number(7); var_name varchar2(25);begin select id,first_name into var_id,var_name from s_emp where id = 1; dbms_output.put_line(var_id|var_name);end;6. 使用%type得到表的字段对应的类型 表名.字段名%type declare var_id s_emp.id%type; var_

6、name s_emp.first_name%type;begin select id,first_name into var_id,var_name from s_emp where id = 2; dbms_output.put_line(var_id|:|var_name);end;7.把s_emp表中的id frist_name salary对应的类型取出来定义变量,然后把id=1的数据赋值给first_name salary输出这些信息8.记录类型 record 类型 /*定义一个类似于c语言结构体类型*/ type 类型名 is record( 字段名 类型, 字段名 类型, 字段名

7、 类型 ); 把s_emp表中的id frist_name salary对应的类型取出来定义变量,然后把id=1的数据赋值给first_name salary输出这些信息declare -定义一个记录类型 type emptype is record( id s_emp.id%type, name s_emp.first_name%type, salary s_emp.salary%type ); -使用类型定义变量 var_emp emptype; var_emp2 emptype;begin -使用sql给记录类型的变量赋值 select id,first_name,salary into

8、 var_emp2 from s_emp where id = 1; var_emp:=var_emp2; -整体赋值dbms_output.put_line(var_emp.id| |var_emp.name| |var_emp.salary);end; 当查询出的字段少于记录中的字段时,单独使用记录中的字段,没有赋值的字段是null:select first_name,salary into var_emp.name,var_emp.salary from s_emp where id = 1; 记录中的字段赋值var_emp.name:=var_emp2.name; -(c语言用strc

9、py,区别)var_emp.salary:=var_emp2.salary;表名%rowtype 取得表的一行对应的类型 s_dept%rowtype s_emp%rowtypeeg:declare -使用表的一行的类型定义一个变量 var_emp s_emp%rowtype;begin select * into var_emp from s_emp where id = 1; dbms_output.put_line(var_emp.id| |var_emp.first_name| |var_emp.salary);end;/%rowtype就是一个字段名和表头中的字段名和字段顺序完全相同

10、的记录类型。类似于c数组的类型 table类型TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER;行的数目由BINARY_INTEGER的范围决定:-214743648-214743647Key没有必要是顺序的 可以用first last next方法遍历declare -定义一个table类型 type numstype is table of s_emp.id%type index by binary_integer; var_nums numstype; var_ind binary_integer:=1;begin var_n

11、ums(1):=100; var_nums(2):=200; var_nums(3):=600; select salary into var_nums(4) from s_emp where id=1; dbms_output.put_line(var_nums(var_ind); var_ind:=var_ind+1; dbms_output.put_line(var_nums(var_ind); var_ind:=var_ind+1; dbms_output.put_line(var_nums(var_ind); var_ind:=var_ind+1; dbms_output.put_l

12、ine(var_nums(var_ind);end;-/*table 下标不连续 迭代器思想 first()得到第一个元素对应的下标 last() 最后一个元素对应的下标 next(n)根据一个元素的下标得到下一个元素的下标 */declare -定义一个table类型 type numstype is table of s_emp.id%type index by binary_integer; var_nums numstype; var_ind binary_integer:=1;begin var_nums(1):=100; var_nums(2):=200; var_nums(3):

13、=600; select salary into var_nums(4) from s_emp where id=1; var_ind:=var_nums.first(); dbms_output.put_line(var_nums(var_ind); var_ind:=var_nums.next(var_ind); dbms_output.put_line(var_nums(var_ind); var_ind:=var_nums.next(var_ind); dbms_output.put_line(var_nums(var_ind); var_ind:=var_nums.last(); d

14、bms_output.put_line(var_nums(var_ind);end;declare type tb is table of s_emp%rowtype index by binary_integer; tb1 tb; bid binary_integer:=1;begin select * into tb1(1) from s_emp where id = 3; -得到一条记录 select * into tb1(5) from s_emp where id = 7; bid:=tb1.first(); dbms_output.put_line(tb1(bid).id| |tb

15、1(bid).first_name); bid:=tb1.next(bid); dbms_output.put_line(tb1(bid).id| |tb1(bid).first_name);end;变量的作用域和 可见性 -指定标签abc declare -嵌套 var_m number:=1; begin declare var_m number:=100; var_n number:=100; begin /*局部可以访问全局的*/ /*同名则局部优先*/ dbms_output.put_line(var_m); -访问局部变量 dbms_output.put_line(abc.var_

16、m); -变量前面加全局标签访问 end; /*全局不能访问局部的*/ dbms_output.put_line(var_n); -错误 end;1分支语句 a. if ab then end if; b. if ab then else end if; c. if ab then elsif ac then elsif ad then end if;eg:declare a number:=10; b number:=20; c number:=5;begin if ab then a:=b; elsif ac then a:=c; else dbms_output.put_line(a i

17、s the max number); end if; dbms_output.put_line(the max number:|a);end;declare var_a number; var_b number; var_c number; var_d number; var_e number; var_max number;begin var_a := &var_a; var_b := &var_b; var_c := &var_c; var_d := &var_d; var_e := &var_e; var_max:=var_a; if var_maxvar_b then var_max:

18、=var_b; end if; if var_maxvar_c then var_max:=var_c; end if; if var_maxvar_d then var_max:=var_d; end if; if var_max 10 then exit; end if; var_i := var_i + 1; -exit when var_i 10; end loop; dbms_output.put_line(loop over);end; b.while 循环 1.while 循环的语法 while 循环条件 loop end loop; 2.while循环举例:输出1到10decl

19、are var_i number;begin var_i := 1; while var_i = 10 loop dbms_output.put_line(var_i); var_i := var_i + 1; end loop;end; 3.while循环的退出(同loop) exit when 退出条件 if 退出条件 then exit; end if; c. for循环-智能循环 1.for循环的语法 for 变量 in a.b loop end loop; 2.for 循环举例:输出1到10begin for var_i in 1.10 loop dbms_output.put_li

20、ne(var_i); end loop;end; 3.for循环中的变量不允许修改 4.如何反向输出 输出10到1begin for var_i in reverse 1.10 loop dbms_output.put_line(var_i); end loop;end; 5.for循环的退出,同while d.循环的嵌套 1.例子 3.使用类似于c语言的goto语句 4.plsql中可以把标签放前面 3.goto 语句 使用goto完成输出1到10 plsql 中的 sql使用 select 语句要和into 结合使用。 dml (insert delete update) tcl (com

21、mit rollback savepoint) 可以直接在plsql中使用 DDL(create drop alter)不能直接在plsql中使用,需要使用动态sql。-回顾:常见的访问oracle的技术plsqlproc/c+odbc/adosqlj/jdbcplsql的程序结构declare /*申明区 定义变量 和 类型*/begin /*执行区 执行sql语句和plsql语句*/exception /*异常处理区 处理程序错误的*/end;-plsql中定义变量1.使用sql中类型来定义变量 变量名 类型;2.binary_integer boolean3.变量的修饰 constant

22、 not null4.给变量手动赋值 使用sql语句给变量赋值5.表名.字段名%type 取得表的字段对应的类型6.记录类型 type 类型名 is record( 字段名 类型, 字段名 类型, 字段名 类型 ); 如何给记录类型赋值 当查询的字段数少于记录类型字段数 记录类型之间的赋值 整体 选择字段赋值 7.表的一行对应的类型 表名%rowtype 8.table 类型 类似c语言的数组 type 类型名 is table of 表中的类型 index by binary_integer; 变量名(下标):=值; 当下标连续时的遍历 当下标不连续 迭代器思想 first() last()

23、 next(n)-变量的作用域和可见性 局部优先 -plsql的控制语句1.分支语句 if 条件 then end if; if 条件 then else end if; if 条件 then elsif 条件 then elsif 条件 then else end if;2.循环语句 a.简单循环 loop end loop; b.while 循环 while 循环条件 loop end loop; c.for 循环 for 变量 in a.b loop end loop; - d.循环的退出 exit when 退出条件 if 退出条件 then exit; end if; f.循环的嵌套

24、 通过在内层循环中改变条件 退出外层循环 使用goto 可以直接在内层循环退出外层循环 使用exit 标签名- 3.goto 语句 使用goto 完成输出1 到 10 declare var_i number; begin var_i:=1; if var_i11 then dbms_output.put_line(var_i); var_i:=var_i+1; goto myloop; end if; dbms_output.put_line(myloop over!); end;-plsql 中的sql使用 1.select 语句要和 into 结合使用。 2.dml(insert del

25、ete update) tcl(commit rollback savepoint) 可以直接在plsql中使用 3.DDL(create drop alter)不能直接在plsql 中使用,需要使用动态sql。动态sql:把一个字符串对应的sql当做sql语句来执行 create table testsql(id number); /静态的,运行后不能修改 create table testsql(id number) 1.DDL:的动态sql -DDL必须要用动态的sql 2.DML的动态sql -为了解决字符串拼接的问题 使用占位符简化拼接占位符冒号开头 使用using替代占位符号。 3

26、. select 语句的动态sql 能且只能返回一个结果 游标:用来处理多行数据的一个数据类型 一条sql语句可以认为是匿名游标1. 游标 的语法a) 声明游标curson 游标名 is sql语句;b) 打开游标open 游标名;c) 提取数据i. 非滚动游标 提取数据必须是顺序的ii. fetch 游标名 into 变量名;d) 关闭游标close游标名;2. 例:把s_emp表中所有的数据放入一个游标中i. 输出前两天的id first_name salary 3.遍历游标中所有的数据 a) 游标的属性 %found 是否发现新数据 游标必须处于打开状态 如果没有打开游标使用则返回非法游标。 游标至少被fetch过一次 如果没fetch 则返回NULL值。 发现了新数据就返回true,否则返回false。 %notfound 是否没有发现新数据 游标必须处于打开状态 否则是非法游标 没有fetch 则返回NULL值 发现了新数据就返回 false,没有发现新数据就返回true. %isopen 游标是否打开 打开就返回true 否则返回false 打开的游标不能在打开,关闭的游标不能在关闭。 %r

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2