还剩36页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
入门教程Oracle PLSQL欢迎来到入门教程!本教程将带您深入了解语言的基础知Oracle PLSQL PLSQL识,并通过实际案例演练,让您掌握编程的技巧和应用PLSQL简介PLSQL定义目的()是数据库的扩展语的主要目的是增强的功能,使之能够进行复杂的逻辑判PL/SQL ProceduralLanguage/SQL OraclePLSQL SQL言,允许程序员在SQL语句中加入流程控制语句,实现更强大的数断、循环操作和错误处理,从而实现更灵活、高效的数据库管理据处理和业务逻辑和应用开发优势PLSQL提高效率增强安全性12PLSQL可以将多个SQL语句组存储过程可以封装业务逻辑,合成一个存储过程,减少网络防止敏感代码直接暴露给用户,传输次数,提升执行效率提高数据库安全性易于维护可移植性34代码模块化,易于维护是数据库的标准PLSQL PLSQLOracle和修改,有利于提高代码的可语言,具有良好的可移植性,读性和可维护性可以在不同平台上运行组成结构PLSQL声明部分执行部分异常处理部分声明变量、常量、游标、函数、过程等,包含SQL语句和PLSQL语句,实现具体的处理程序执行过程中出现的异常情况,保为后续执行代码提供基础业务逻辑,完成特定任务证程序的稳定性和可靠性变量声明PLSQLDECLAREv_name VARCHAR220;v_age NUMBER3;BEGIN--代码逻辑END;/数据类型PLSQL数字类型字符类型NUMBER,INTEGER,FLOAT,VARCHAR2,CHAR,CLOBDECIMAL日期类型布尔类型DATE,TIMESTAMP BOOLEAN赋值语句PLSQLDECLAREv_name VARCHAR220:=张三;v_age NUMBER3:=20;BEGIN--代码逻辑END;/条件语句PLSQLDECLAREv_score NUMBER3:=85;BEGINIF v_score=90THENDBMS_OUTPUT.PUT_LINE优秀;ELSIF v_score=80THENDBMS_OUTPUT.PUT_LINE良好;ELSEDBMS_OUTPUT.PUT_LINE合格;END IF;END;/循环语句PLSQLDECLAREi NUMBER3;BEGINFOR iIN
1..5LOOPDBMS_OUTPUT.PUT_LINE循环次数||i;END LOOP;END;/函数定义PLSQLCREATE ORREPLACE FUNCTION get_suma NUMBER,b NUMBERRETURNNUMBERISc NUMBER;BEGINc:=a+b;RETURN c;END;/函数调用PLSQLDECLAREresult NUMBER;BEGINresult:=get_sum10,20;DBMS_OUTPUT.PUT_LINE结果||result;END;/存储过程PLSQLCREATE ORREPLACE PROCEDUREinsert_studentp_name VARCHAR2,p_age NUMBERISBEGININSERT INTO studentsname,age VALUESp_name,p_age;END;/存储过程调用PLSQLBEGINinsert_student李四,22;END;/光标PLSQL光标()是用于处理结果集的一种机制,可以遍历查询结果,逐行访问数据Cursor PL/SQL光标声明PLSQLDECLAREcursor c_students isSELECT*FROM students;v_name VARCHAR220;v_age NUMBER3;BEGIN--代码逻辑END;/光标打开和关闭PLSQLDECLAREcursor c_students isSELECT*FROM students;v_name VARCHAR220;v_age NUMBER3;BEGINOPEN c_students;--打开光标--代码逻辑CLOSE c_students;--关闭光标END;/光标遍历PLSQLDECLAREcursor c_students isSELECT*FROM students;v_name VARCHAR220;v_age NUMBER3;BEGINOPEN c_students;LOOPFETCH c_students INTO v_name,v_age;EXIT WHENc_students%NOTFOUND;DBMS_OUTPUT.PUT_LINE姓名||v_name||,年龄||v_age;END LOOP;CLOSE c_students;END;/异常处理PLSQLDECLAREv_age NUMBER3;BEGINv_age:=100/0;--异常操作EXCEPTIONWHEN ZERO_DIVIDE THENDBMS_OUTPUT.PUT_LINE除数不能为0;END;/事务处理PLSQLDECLAREv_name VARCHAR220:=王五;v_age NUMBER3:=25;BEGIN--开启事务SAVEPOINT sp1;INSERT INTO studentsname,age VALUESv_name,v_age;--提交事务COMMIT;EXCEPTIONWHEN OTHERSTHEN--回滚事务ROLLBACK TOsp1;END;/嵌套块PLSQLDECLAREv_name VARCHAR220;BEGINv_name:=赵六;DECLAREv_age NUMBER3:=28;BEGIN--代码逻辑END;END;/包的定义PLSQLCREATE ORREPLACE PACKAGEstudent_pkgISPROCEDURE insert_studentp_name VARCHAR2,p_age NUMBER;FUNCTION get_student_count RETURNNUMBER;END;/CREATE ORREPLACE PACKAGEBODY student_pkgISPROCEDURE insert_studentp_name VARCHAR2,p_age NUMBERISBEGININSERT INTOstudentsname,age VALUESp_name,p_age;END;FUNCTIONget_student_count RETURNNUMBERISv_count NUMBER;BEGINSELECT COUNT*INTOv_count FROM students;RETURN v_count;END;END;/包的使用PLSQLDECLAREv_count NUMBER;BEGINstudent_pkg.insert_student孙七,30;v_count:=student_pkg.get_student_count;DBMS_OUTPUT.PUT_LINE学生人数||v_count;END;/触发器定义PLSQLCREATE ORREPLACE TRIGGERtr_student_before_insertBEFORE INSERTON studentsFOREACH ROWBEGIN--代码逻辑END;/触发器类型PLSQLBEFORE AFTER在数据操作之前触发在数据操作之后触发INSTEAD OF代替数据操作执行触发器应用场景PLSQL数据验证审计跟踪自动操作123在数据插入或修改之前进行数据验证,记录数据操作日志,方便追踪数据变在数据操作时自动执行某些操作,例保证数据完整性和一致性化如发送邮件通知编程实践学生管理系统PLSQL-我们将通过开发一个简单的学生管理系统,来演示的实际应用场景PLSQL数据定义CREATE TABLEstudentsid NUMBERPRIMARY KEY,name VARCHAR220NOT NULL,age NUMBER3NOT NULL,gender VARCHAR210;数据插入BEGININSERT INTOstudentsid,name,age,gender VALUES1,张三,20,男;INSERT INTOstudentsid,name,age,gender VALUES2,李四,22,女;INSERT INTOstudentsid,name,age,gender VALUES3,王五,25,男;INSERTINTOstudentsid,name,age,gender VALUES4,赵六,28,女;INSERTINTOstudentsid,name,age,gender VALUES5,孙七,30,男;END;/数据查询DECLAREcursor c_students isSELECT*FROMstudents;v_id NUMBER;v_name VARCHAR220;v_age NUMBER3;v_gender VARCHAR210;BEGINOPEN c_students;LOOPFETCH c_students INTOv_id,v_name,v_age,v_gender;EXIT WHENc_students%NOTFOUND;DBMS_OUTPUT.PUT_LINEID||v_id||,姓名||v_name||,年龄||v_age||,性别||v_gender;END LOOP;CLOSE c_students;END;/数据修改DECLAREv_id NUMBER:=2;BEGINUPDATE students SET age=24WHERE id=v_id;COMMIT;END;/数据删除DECLAREv_id NUMBER:=5;BEGINDELETE FROMstudents WHEREid=v_id;COMMIT;END;/业务逻辑实现CREATE ORREPLACE PROCEDUREadd_studentp_name VARCHAR2,p_age NUMBER,p_gender VARCHAR2ISBEGININSERT INTOstudentsname,age,gender VALUESp_name,p_age,p_gender;END;/异常处理CREATE ORREPLACE PROCEDUREupdate_student_agep_id NUMBER,p_age NUMBERISBEGINUPDATEstudentsSETage=p_age WHEREid=p_id;IF SQL%ROWCOUNT=0THENRAISE_APPLICATION_ERROR-20001,学生不存在;END IF;EXCEPTIONWHEN OTHERSTHENRAISE_APPLICATION_ERROR-20002,SQLERRM;END;/优化建议使用索引优化语句12SQL为经常查询的字段创建索引,尽量使用高效的SQL语句,避提高查询效率免使用不必要的子查询或连接操作存储过程优化3合理设计存储过程,避免重复执行相同的代码课程总结本教程主要讲解了语言的基础知识和应用场景,帮助您掌握编程PL/SQLPLSQL的技巧,并能够完成简单的数据库操作和业务逻辑开发常见问题解答请您提出您在学习过程中遇到的问题,我们将尽力为您解答PL/SQL课后作业请您根据本教程的内容,尝试完成一个简单的数据库应用开发,例如图书管理系统、学生信息管理系统等环节QA如果您还有任何疑问,请随时提问,我们将竭诚为您解答。
个人认证
优秀文档
获得点赞 0