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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

PLSQL语言的运用.docx

1、PLSQL语言的运用 PL/SQL是 Procedure Language & Structured Query Language 的缩写 PL/SQL是对SQL语言存储过程语言的扩展PL/SQL的优点 有利于客户/服务器环境应用的运行 PL/SQL是对SQL语言存储过程语言的扩展 适合于客户环境 PL/SQL是ORACLE系统的核心语言,现在ORACLE的许多部件都是由PL/SQL写成 PL/SQL块结构和组成元素 PL/SQL块PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分。 PL/SQL块结构和组成元素 PL/SQL块的结构如下:DECLARE /* 声明部分: 在此声

2、明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数 */BEGIN /* 执行部分: 过程及SQL 语句 , 即程序的主要部分 */EXCEPTION /* 执行异常部分: 错误处理 */END;其中 执行部分是必须的。 PL/SQL块可以分成三类: 匿名块:动态构造,只能执行一次 子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它程序中调用它们 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序 PL/SQL中的标识符PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同 标识符名不能超过30字符 第一个字符必须为字母 不分大小

3、写 不能是SQL保留字 PL/SQL中的变量类型类型 说明CHAR定长字符串VARCHAR2 可变字符串BINARY_INTEGER 带符号整数,为整数计算优化性能 NUMBER(p,s) 数值LONG 变长字符串 DATE 日期BOOLEAN 布尔ROWID 存放数据库行号 PL/SQL中的标识符一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果 例:DECLARE Ename varchar2(20) :=KING;BEGIN DELETE FROM emp WHERE ename=ename;END;PL/SQL中声明变量在语句块的声明部分对变量声明,声明一个变量的语

4、法是: variable_name constant type not null :=value其中: variable_name 为变量名 type 为类型 value 为变量的初值PL/SQL中的标识符下面是建议使用的变量命名方法 标识符命名原则例程序变量 V_nameV_id程序常量 C_constantC_student_name游标变量 Name_cursorEmp_cursor异常标识 E_nameE_too_many_rows表类型 Name_table_typeEmp_record_type表 Name_tableEmp记录类型 Name_typeEmp_record参数P_n

5、ameP_idPL/SQL中声明变量例: DECLARE V_Description VARCHAR2(50); V_Number NUMBER := 45; V_Counter BINARY_INTEGER := 0;注意:如果变量在声明时使用了NOT NULL选项则必须为变量指定初值。 如果变量在声明时使用了CONSTANT选项则必须为变量指定初值, 并且该初值不能被改变。PL/SQL中的复合类型 记录类型 :记录类型是把逻辑相关的数据作为一个单元存储起来 定义记录类型语法如下:TYPE record_type IS RECORD( Field1 type1 NOT NULL := exp

6、1 , Field2 type2 NOT NULL := exp2 , . . . . . . Fieldn typen NOT NULL := expn ) ; PL/SQL中的复合类型 %TYPE:定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型相同 ,这时可以使用%TYPE 例:DECLARE - 用 %TYPE 类型定义与表相配的字段 TYPE t_Record IS RECORD( T_no emp.empno%TYPE, T_name emp.ename%TYPE, T_sal emp.sal%TYPE ); - 声明接收数据的变量 v_

7、emp t_Record; PL/SQL中的复合类型 %ROWTYPE:返回一个记录类型, 其数据类型和数据库表的数据结构相 一致。 例:DECLARE v_empno emp.empno%TYPE :=&no; rec emp%ROWTYPE;BEGIN SELECT * INTO rec FROM emp WHERE empno=v_empno; DBMS_OUTPUT.PUT_LINE(姓名:|rec.ename|工资:|rec.sal|工作时间:|rec.hiredate); END; PL/SQL表 PL/SQL 表, 或者称为索引表(index-table),是可以在PL/SQL

8、程序中引用、能够模仿数组的非永久表。用户可以定义一个表类型,然后声明这种类型的变量。接下来,用户就可以将记录添加到用户的PL/SQL 表中,并且采用与引用数组元素大体相同的方法引用他们 表包括两个基本成分: 数据处理类型为BINARY_INTEGER主键 标量或记录数据类型的列 PL/SQL表 定义一个表:TYPE type_name IS TABLE OF column_type | variable%TYPE | table.column%TYPE NOT NULL | table%ROWTYPE INDEX BY BINARY_INTEGER; 例: DECLARE TYPE dept_

9、table_type IS TABLE OF dept%ROWTYPE INDEX BY BINARY_INTEGER; my_dname_table dept_table_type;PL/SQL表 注意: Index-by表中的元素不一定要按任何特定的顺序排序 用于Index-by表的关键字没有必要是顺序的 关键字唯一允许的类型是BINARY_INTERGER引用表元素 例: DECLARE type dept_table_type is table of dept%ROWTYPE index by binary_integer; my_dname_table dept_table_type

10、; int number(3);BEGIN int := -10; my_dname_table(int).dname := searching; dbms_output.put_line(my_dname_table(int).dname); int := 0; my_dname_table(int).dname := market; dbms_output.put_line(my_dname_table(int).dname); int := 10; my_dname_table(int).dname := finance; dbms_output.put_line(my_dname_ta

11、ble(int).dname);END;PL/SQL中的可变数组 一般格式为:TYPE type_name IS VARRAY (maximum_size) OF element_type其中:type_name是新可变长数组类型的类型名。 maximum_size是一个指定可变数组中元素最大数目的整数。 element_type是一个PL/SQL标量、记录或对象类型。一般格式为:DECLARE type numberlist is varray(10) of number(5); type recordlist is varray(5) of dept%rowtype;引用数组元素 例: D

12、ECLARE type strings is varray(5) of varchar2(10); - Declare a varray with four element v_list strings := strings(scott,peter,smith,tom); int number;BEGIN int := 1; dbms_output.put_line(v_list(int); v_list(int) := urman; dbms_output.put_line(v_list(int); int := 3; dbms_output.put_line(v_list(int); v_

13、list(int) := jackson; dbms_output.put_line(v_list(int); v_list.extend; v_list(4):=oracle; dbms_output.put_line(v_list(4);END;表和数组属性 属性返回类型描述有效范围existsboolean指定元素在集合中是否存在表、可变数组countnumber返回集合中元素的数目表、可变数组limitnumber返回集合中最大元素数可变数组First&lastBinary_integer返回第一个(最后一个)元素的索引表、可变数组Next&priorBinary_integer返回当

14、前元素的下一个(前一个)元素的索引表、可变数组extendN/A向集合中添加元素可变数组trimN/A从集合的最后删除元素可变数组deleteN/A从集合中删除指定元素表DECLARE type strings_table is table of varchar2(10) index by binary_integer; strings strings_table; int number;BEGIN int := 1; strings(int) := element1; if strings.exists(int) then dbms_output.put_line(strings(int);

15、 else dbms_output.put_line(no data!); return; end if;strings(2) := element2; strings(3) := element3; strings(4) := element4; strings(5) := element5; strings(6) := element6; dbms_output.put_line(strings.count); dbms_output.put_line(strings.first); dbms_output.put_line(strings.last); dbms_output.put_l

16、ine(strings.next(2); dbms_output.put_line(strings.prior(4); strings.delete(1,3); -dbms_output.put_line(strings(2);END;PL/SQL运算符和表达式 运算符 意义 = 等于 , != , = , = 不等于 大于=大于等于运算符 意义 +加号-减号*乘号/除号:=赋值号| 连接符运算符 意义 IS NULL 空值BETWEEN AND介于两者之间IN 在一个值列表之中AND并OR或NOT否PL/SQL中的变量赋值在PL/SQL编程中,变量赋值是一个值得注意的地方,它的语法如下: v

17、ariable := expression ; variable 是一个PL/SQL变量, expression 是一个PL/SQL 表达式. BOOLEAN 型变量赋值: 布尔值只有TRUE, FALSE及 NULL 三个值,其中空值在参加算数运算时,结果仍为空值。PL/SQL中的变量赋值DECLARE done BOOLEAN; /* the following statements are legal: */BEGINdone := FALSE;WHILE NOT done LOOPNull;END LOOP;END;PL/SQL中的变量作用范围及可见性 PL/SQL的变量作用范围特点是

18、: 变量的作用范围是在所引用的程序单元(块、子程序、包)内。即从声明变量开始到该块的结束 一个变量(标识)只能在所引用的块内是可见的 当一个变量超出了作用范围,PL/SQL引擎就释放用来存放该变量的空间(因为它可能不用了) 在子块中重新定义该变量后,它的作用仅在该块内 PL/SQL中的变量作用范围及可见性 例: DECLARE v_Number NUMBER(3 , 2); BEGIN DECLARE v_Character VARCHAR2(10); BEGIN END; END;PL/SQL中的注释 在PL/SQL里,可以使用两种符号来写注释: PL/SQL允许用 来写注释,它的作用范围是

19、只能在一行有效。 例: V_Sal NUMBER(12,2); - 工资变量 使用 /* */ 来加一行或多行注释。 例:/*/* 文件名: department_salary.sql */*/DML语句的返回值RETURNING 列值1,列值2, INTO 变量1,变量2,插入语句返回值DECLARE v_deptno NUMBER; v_dname VARCHAR2(100);BEGIN INSERT INTO departments VALUES (122, HSW, 206, 1500) RETURNING department_id, department_name INTO v_d

20、eptno, v_dname; dbms_output.put_line(v_deptno); dbms_output.put_line(v_dname);END;更新语句返回值DECLARE v_deptno NUMBER; v_dname VARCHAR2(100);BEGIN UPDATE departments SET department_name = GE WHERE department_id = 20 RETURNING department_id, department_name INTO v_deptno, v_dname; dbms_output.put_line(v_d

21、eptno); dbms_output.put_line(v_dname);END;删除语句返回值 DECLARE v_deptno NUMBER; v_dname VARCHAR2(100);BEGIN DELETE FROM departments WHERE department_id = 190 RETURNING department_id, department_name INTO v_deptno, v_dname; dbms_output.put_line(v_deptno); dbms_output.put_line(v_dname);END;DML返回多行值 DECLARE

22、 TYPE emp_record_type IS RECORD( v_last_name employees.last_name%TYPE, v_salary employees.salary%TYPE); TYPE table_type IS TABLE OF emp_record_type; emp_table table_type;BEGIN UPDATE employees SET salary = salary + 1 WHERE salary = 5000 RETURNING last_name, salary BULK COLLECT INTO emp_table; FOR i

23、IN 1 . emp_table.count LOOP dbms_output.put_line(emp_table(i).v_last_name); dbms_output.put_line(emp_table(i).v_salary); dbms_output.put_line(-); END LOOP;END;1 基本输出语句BEGIN dbms_output.put_line(hello,world); dbms_output.put_line(127); dbms_output.put_line(sysdate); 系统当前时间 -dbms_output.put_line(ture)

24、; 不能直接输出true/falseEND;2 变量的使用SELECT 列1,列2.INTO 变量1 、变量2DECLARE i number(4):=250; j number(6); c varchar(100):=hello,world; d DATE := SYSDATE; -e boolean := true;BEGIN j:=1000; dbms_output.put_line(i= | i); dbms_output.put_line(j= | j); dbms_output.put_line(c= | c); dbms_output.put_line(d= | to_char(

25、d,YYYY-MM-DD); -dbms_output.put_line(e= | e);END;CONSTANT 常量的使用declare /只做声明 c_a CONSTANT NUMBER(4):=100; v_b number(4) not null:=101; 使用not null修饰变量时,变量必须初始化;begin -c_a:=101; 常量不能边 dbms_output.put_line(c_a); dbms_output.put_line(v_b); null; 不能为空end;更新100员工,工资增加1并在控制台打印输出declare v_empid binary_integ

26、er:=100; v_money number(10):=1;begin update employees set salary = salary +v_money where employee_id = v_empid; commit; dbms_output.put_line(v_empid | ,| v_money);end;查询某个员工的编号的姓名,工资,入职日期,部门编号declare v_empid binary_integer :=101; v_name varchar(50); v_salary number(8,2); v_hiredate DATE; v_deptid bi

27、nary_integer; begin select employee_id,last_name,salary,hire_date,department_id into v_empid,v_name,v_salary,v_hiredate,v_deptid from employees where employee_id= v_empid; dbms_output.put_line(v_empid | , | v_name | , | v_salary | , | to_char(v_hiredate,yyyY/mm/DD)|,|v_deptid );end;记录类型declare type

28、emp_record_type is record( v_empid binary_integer :=101, v_name varchar(50), v_salary number(8,2), v_hiredate DATE, v_deptid binary_integer ); e emp_record_type;begin select employee_id,last_name,salary,hire_date,department_id into e from employees where employee_id= e.v_empid; dbms_output.put_line(e.v_empid | , | e.v_name | , | e.v_salary | , | to_char(e.v_hiredate,yyyY/mm/DD)|,|e.v_deptid );end;参照引用类型未知的变量类型可以参照已知的变量类型,或者参照数据库表中的列的类型 语法%typedeclare i number(4); j i%type:=100; k e

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1