PL/SQL 是基于SQL 语言的一种扩展,是运行在Oracle服务器端的一种语句,以下给出PL/SQL 的基本使用方式
基本语法:
--数据类型 declare type table_datatype is table of varchar2(50) index by binary_integer; --表类型 v_table table_datatype; i_provider_id int ; v_provider_name varchar(20); v_provider_address varchar(20); type record_datatype is record ( id int , name varchar(20), address varchar(20) ); v_record record_datatype ; begin v_table(0) := '张三'; v_table(1) := '李四'; v_table(2) := '王五'; dbms_output.put_line(v_table(0)||','||v_table(1)||','||v_table(2)); --select into 的 语法必须返回单行,否则会出现错误 select provider_id,provider_name,provider_address into i_provider_id,v_provider_name,v_provider_address from t_provider_info where provider_id=1; dbms_output.put_line(i_provider_id||','||v_provider_name||','||v_provider_address); --select into 给table类型的变量赋值 select provider_id,provider_name,provider_address into v_table(0),v_table(1),v_table(2) from t_provider_info where provider_id=1; dbms_output.put_line('table:'||v_table(0)||','||v_table(1)||','||v_table(2)); v_record.id :=1; v_record.name :='赵六'; v_record.address :='广州'; dbms_output.put_line(v_record.id||','|| v_record.name||','||v_record.address); select provider_id,provider_name,provider_address into v_record from t_provider_info where provider_id=2; dbms_output.put_line(v_record.id||','|| v_record.name||','||v_record.address); --循环的语法 loop ,end loop exit when declare v_count int :=0 ; begin loop v_count := v_count+1 ; exit when v_count=5; dbms_output.put_line('v_count:'||v_count); end loop ; end ; --循环语法 when ,loop end loop; declare v_count int :=0; begin while v_count<>5 loop dbms_output.put_line('while 循环:v_count:'||v_count); v_count := v_count+1; end loop ; end ; --循环语法 for loop end loop; declare v_count int :=0; begin for v_ount in 2..5 loop dbms_output.put_line('for 循环:v_count:'||v_count); v_count :=v_count+1 ; end loop ; end ; -- if的语法 declare v_count int := 6 ; begin if v_count=5 then dbms_output.put_line('满足条件5:v_count:'||v_count); elsif v_count=3 then dbms_output.put_line('满足条件3:v_count:'||v_count); else dbms_output.put_line('不满足条件3、5:v_count:'||v_count); end if ; end ; --case when 的语法 declare v_count int :=2 ; begin case v_count when 1 then dbms_output.put_line('满足条件1:v_count:'||v_count); when 2 then dbms_output.put_line('满足条件2:v_count:'||v_count); else dbms_output.put_line('不满足条件1、2:v_count:'||v_count); end case ; end ; --游标的使用 ,使用fetch的方式遍历游标,必须显示打开和关闭游标 declare cursor c_cursor is select provider_id,provider_name,provider_address from t_provider_info ; --定义游标 i_provider_id int ; v_provider_name varchar(20); v_provider_address varchar(20); begin open c_cursor;--打开游标 loop fetch c_cursor into i_provider_id,v_provider_name,v_provider_address; dbms_output.put_line('游标的使用:'||i_provider_id||','||v_provider_name||','||v_provider_address); exit when c_cursor%notfound ; end loop ; close c_cursor; end ; --使用for 循环的方式遍历游标 不需要显示打开后者关闭游标 declare cursor c_cursor is select provider_id,provider_name,provider_address from t_provider_info ; --定义游标 c_row c_cursor%rowtype ; --定义一个游标变量 begin for c_row in c_cursor loop dbms_output.put_line('隐式游标的使用:v_provider_name'||c_row.provider_id); end loop; end ; --调用有返回值的存储过程 declare v_name varchar(20) ; v_id int ; begin pro_provider_info(1,v_name,v_id); dbms_output.put_line('v_name:'||v_name||',v_id:'||v_id); end ; end ; /
过程、触发器 函数的语法:
存储过程:
create or replace procedure pro_provider_info(id in int,name out varchar2,r_id out int) as v_provider_name varchar(50) := '广州发展中心'; cursor c_cursor is select provider_id,provider_name,provider_address from t_provider_info where provider_id=id ; --定义一个游标行的变量 c_row c_cursor%rowtype ; provider_id t_provider_info.provider_id%type ; --type 用来避免硬编码的错失 begin --隐式调用 for c_row in c_cursor loop provider_id := c_row.provider_id ; --更新对应的ID 的值 if provider_id=id then update t_provider_info set provider_name=v_provider_name where provider_id=id; name := v_provider_name; r_id := id; commit ; end if ; end loop ; end ;
触发器:
--触发器 create or replace trigger tri_provider_info after insert or update or delete on t_provider_info for each row begin declare v_insert varchar(20) :='插入操作' ; v_update varchar(20) :='更新操作' ; v_delete varchar(20) :='删除操作' ; begin if inserting then insert into t_log(oper_id,oper_name) values(t_global_seq.nextval,v_insert); dbms_output.put_line('插入操作'); elsif updating then --,:old.provider_id,:new.provider_id insert into t_log(oper_id,oper_name) values(t_global_seq.nextval,v_update); dbms_output.put_line('更新操作'); elsif deleting then insert into t_log(oper_id,oper_name) values(t_global_seq.nextval,v_delete); dbms_output.put_line('删除操作'); else dbms_output.put_line('无法明确的操作'); end if ; --commit ; 在触发器中不需要手动提交 end ; end ; /
不断完善中
相关推荐
本书是专门为oracle应用开发人员提供的sql和pl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法...
Oracle PL/SQL从入门到精通 配书教学视频 第11章
适合想学习Oracle PL/SQL编程的,有例子,也有最佳实践
本书是专门为Oracle应用开发人员提供的SQL和PL/SQL编程指南。通过学习本书,读者不仅可以掌握Oracle常用工具Oracle Universal Installer、Net Comfiguration Assistant、SQL Developer、SQL*Plus的作用及使用方法,...
本文主要介绍PL/SQL的编程基础,以使入门者对PL/SQL语言有一个总体认识和基本把握。 二、编程基础知识 1. 程序结构 PL/SQL程序都是以块(block)为基本单位,整个PL/SQL块分三部分:声明部分(用declare开头)...
教程名称:Oracle高级开发课程之PL-SQL编程入门视频课程目录:【】PL_SQL编程课程_-lesson3【】PL_SQL编程课程_lesson5-2(完结)【】PL_SQL编程课程_最佳入门教程-intr1【】PL_SQL编程课程_最佳入门教程-lesson1【】...
本书是专门为oracle应用开发人员提供的sql和pl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法...
pl/sql 编程基础,很有用的,致力于在oracle行业发展比较好的入门材料。呵呵
oracle初学者很好的教材 ,oracle 的详细讲解 ,pl/sql编程
Oracle PL SQL DBA编程入门
这本书结合oracle pl/sql入门来一起学习,是非常好的搭配。
1、简单程序 2、限定查询 3、多表查询 4、子查询 5、分页查询 6、单行函数 7、oracle对象操作 8、oracle类型练习 9、java中调用oracle 10、procedure经典练习
本书是专门为oracle应用开发人员提供的sql和pl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法...
本书是专门为oracle应用开发人员提供的sql和pl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法...
pl/sql知识点总结,以及一些在开发中经常烦的小毛病
很详细的PL/SQL文档,让你从入门让你到精通一步到位。
Oracle-PL-SQL入门教程(经典)
前面已经了解了关于PL/SQL编程的基础,本文将结合一个案例来加深对这些知识点的理解。 一. 案例介绍 某数据库有两张表,是关于某公司员工资料、薪水和部门信息的,它们分别是emp表和dept表,两张表的结构如下: ...
Oracle 入门文档 Oracle笔记 一、oracle的安装、sqlplus的使用 ...Oracle笔记 十二、PL/SQL 面向对象oop编程 Oracle笔记 十三、PL/SQL面向对象之package Oracle笔记 十四、查询XML操作、操作系统文件