--声明变量 --普通变量 v_name varchar2(12):='aaa'; v_count number(4); --通过%TYPE属性为变量声明类型 v_ename emp.ename%type; v_sal emp.sal%type; --************************************************************************************************************* --利用匿名块从数据库中查据输出到控制台上 declare v_deptno dept.deptno%type; v_dname dept.dname%type; v_loc dept.loc%type; begin select t.deptno,t.dname,t.loc into v_deptno,v_dname,v_loc from dept t where t.deptno=10; dbms_output.put_line('v_deptno='||v_deptno); dbms_output.put_line('v_dname='|| v_dname); dbms_output.put_line('v_loc='|| v_loc); end; ----利用匿名块插入数据到数据库中 declare begin insert into dept(deptno,dname,loc)values(50,'java','shanghai'); commit; end; --************************************************************************************************************* --if then end if --如果名字是monday,输出hello monday declare v_name varchar2(12):='monday'; begin if v_name='monday' then dbms_output.put_line('hello monday'); end if; end; --if-then-else --如果名字是monday,输出hello monday,否则输出hello declare v_name varchar2(12):='java'; begin if v_name='monday' then dbms_output.put_line('hello monday'); else dbms_output.put_line('hello'); end if; end; --if-then-elsif--else --如果名字是monday,输出hello monday,如果名字是java,输出hello java,否则输出hello declare v_name varchar2(12):='sql'; begin if v_name='monday' then dbms_output.put_line('hello monday'); elsif v_name='java' then dbms_output.put_line('hello java'); else dbms_output.put_line('hello'); end if; end; --********************************************************************************************************** --loop --循环输出从0-5 步长是1 declare v_i integer:=0; begin loop dbms_output.put_line(v_i); v_i:=v_i+1; exit when (v_i>5); end loop; end; --*********************************************************************************************************** --for --输出从0-5 步长是1 --正向输出 begin for v_i in 0..5 loop dbms_output.put_line(v_i); end loop; end; --反向输出 begin for v_i in reverse 0..5 loop dbms_output.put_line(v_i); end loop; end; --*********************************************************************************************************** --while --循环输出0-5 步长是1 --正向输出 declare v_i integer:=1; begin while v_i>0 loop dbms_output.put_line(v_i); v_i:=v_i+1; exit when (v_i>5); end loop; end; --反向输出 declare v_i integer:=5; begin while v_i>0 loop dbms_output.put_line(v_i); v_i:=v_i-1; end loop; end; --*********************************************************************************************************** --存储过程 --插入数据的存储过程,参数有外部传入 create or replace procedure insertProc ( v_deptno in dept.deptno%type, v_dname in dept.dname%type, v_loc in dept.loc%type ) is begin insert into dept(deptno,dname,loc) values(v_deptno,v_dname,v_loc); commit; end; --调用存储过程 execute insertProc(60,'oracle','beijing'); --要使用命令行执行 --带返回值的更新的存储过程,更新数据到dept表中 create or replace procedure updateProc ( v_deptno in dept.deptno%type, v_dname in dept.dname%type, v_loc in dept.loc%type, v_result out varchar2 ) is begin update dept set dname=v_dname,loc=v_loc where deptno=v_deptno; commit; v_result:='update success'; end; select * from dept; --*********************************************************************************************************** --存储过程的应用案例 --账户表 create table t_account ( id varchar(20), --帐号 balance number(9,2) --余额 ); --存款表 create table t_inaccount ( id varchar(20), --帐号 inbalance number(9,2) --存入金额 ); --插入一个帐号 insert into t_account(id,balance) values('9999',1000); commit; --创建存款的存储过程 create or replace procedure accountProc ( v_id in t_inaccount.id%type, v_inbalance in t_inaccount.inbalance%type ) is v_balance t_account.balance%type; --保存账户表的金额 begin --往存款表插入存款 insert into t_inaccount(id,inbalance)values(v_id,v_inbalance); --查询账户表原来的金额 select balance into v_balance from t_account where id=v_id; --现在账户表的金额=原来的金额+新存款的金额 v_balance:=v_balance+v_inbalance; --更新账户表的金额为现在账户表的金额 update t_account set balance=v_balance where id=v_id; --提交 commit; end; --*********************************************************************************************************** --函数 --根据值返回税额 create or replace function tax(v_value in number) return number is begin if (v_value<1000) then return v_value*0.1; elsif (v_value>=1000 and v_value<=2000) then return v_value*0.2; else return v_value*0.3; end if; end; select tax(1300) from dual; --*********************************************************************************************************** --触发器 --语句级DML触发器 create or replace trigger deptTrigger before insert or update or delete on dept begin dbms_output.put_line('调用了语句触发器'); end; update dept set loc='shanghai' where deptno=70; --行级DML触发器 create or replace trigger deptTriggerRow before insert or update or delete on dept for each row begin dbms_output.put_line('调用了行级触发器'); end; update dept set loc='shanghai' where deptno=70; --*********************************************************************************************************** --触发器的应用1 create table t_user ( id integer , username varchar2(20), password varchar2(20), primary key(id) ); create table t_login ( id integer , username varchar2(20), password varchar2(20), primary key(id) ); create or replace trigger insertLogin before insert on t_user for each row begin insert into t_login(id,username,password)values(:new.id,:new.username,:new.password); end; insert into t_user(id,username,password)values(1,'aaa','123'); --触发器的应用2 create or replace trigger deleteLogin before delete on t_user for each row begin delete from t_login where id=:old.id; end; delete from t_user where id=1; --*********************************************************************************************************** --游标 select * from dept; --游标就是结果集 --声明游标 v_deptno dept.deptno%type; v_dname dept.dname%type; v_loc dept.loc%type; cursor deptCursor is select detpno,dname,loc from dept where deptno=10 ; --打开游标将执行查询和取出结果集 open deptCursor; --检索当前记录的值到输出变量中。 fetch deptCursor into v_deptno,v_dname,v_loc; --在对查询到的所有记录的处理完成后,关闭游标 close deptCursor; --********************************************************************************************************** --单行游标 declare v_deptno dept.deptno%type; v_dname dept.dname%type; v_loc dept.loc%type; cursor deptCursor is select * from dept where deptno=10; begin open deptCursor; fetch deptCursor into v_deptno,v_dname,v_loc; dbms_output.put_line(v_deptno || ' ' || v_dname || ' ' || v_loc); close deptCursor; end; --多行游标 declare v_deptno dept.deptno%type; v_dname dept.dname%type; v_loc dept.loc%type; cursor deptCursor is select * from dept; begin open deptCursor; --是否打开游标 if deptCursor %isopen then dbms_output.put_line('-----------游标打开-----------'); end if; loop fetch deptCursor into v_deptno,v_dname,v_loc; --是否有数据提取 if deptCursor %found then dbms_output.put_line('有数据'); elsif deptCursor % notfound then dbms_output.put_line('无数据'); end if; exit when (deptCursor %notfound); dbms_output.put_line('第' || deptCursor%rowcount || '行:' || v_deptno || ' ' || v_dname || ' ' || v_loc); end loop; close deptCursor; dbms_output.put_line('-----------游标关闭-----------'); end; --********************************************************************************************* --异常 declare v_deptno dept.deptno%type; v_dname dept.dname%type; v_loc dept.loc%type; begin select * into v_deptno,v_dname,v_loc from dept ; --select * into v_deptno,v_dname,v_loc from dept where deptno=99; exception when no_data_found then rollback; dbms_output.put_line('没有数据'); when too_many_rows then rollback; dbms_output.put_line('数据过多'); when others then rollback; dbms_output.put_line('其他异常'); end; ----------------------------------------------------- declare v_id integer:=4; v_name varchar(20):='ddd'; begin insert into test(id,name)values(v_id,v_name); commit; end; --------------------------------------------------------------- declare v_id integer:=4; begin delete from test where id=v_id; commit; end; declare v_count integer:=0; begin if v_count > 3 then dbms_output.put_line('>3'); elsif v_count >=1 and v_count <=3 then dbms_output.put_line('>=1 and <=3'); else dbms_output.put_line('<1'); end if; end; --------------------------------------------------------------- declare v_num integer:=100; v_result varchar2(10); begin v_result:= case v_num when 1 then 'one' when 2 then 'two' when 3 then 'three' else 'unknow' end; dbms_output.put_line('v_num=' || v_num || ' v_result=' || v_result); end; --------------------------------------------------------------- declare v_i integer:=1; begin loop dbms_output.put_line(v_i); v_i:=v_i+1; exit when (v_i>5); end loop; end; --------------------------------------------------------------- declare v_i integer:=1; begin while v_i>0 loop dbms_output.put_line(v_i); v_i:=v_i+1; exit when (v_i>5); end loop; end; --------------------------------------------------------------- declare v_i integer:=1; begin for v_i in /*reverse*/ 1..5 loop dbms_output.put_line(v_i); end loop; end; /* PL/SQL 中有goto */ --------------------------------------------------------------- declare v_id test.id%type; v_name test.name%type; cursor cursor_test is select id,name from test; begin open cursor_test; fetch cursor_test into v_id,v_name; while cursor_test %found loop dbms_output.put_line(v_id || '---' || v_name); fetch cursor_test into v_id,v_name; end loop; close cursor_test; end; ---------------------------------------------------------------
相关推荐
本资料“PL/SQL入门到精通书的源代码”是一份针对初学者到高级用户的实践教程,旨在帮助读者深入理解和掌握PL/SQL的各个方面。 在学习PL/SQL时,你需要了解以下几个关键知识点: 1. **基础语法**:PL/SQL由声明...
【PL/SQL 入门详解】 PL/SQL(Procedural Language/Structured Query Language)是Oracle公司为标准SQL添加的编程扩展,它被深度集成到Oracle数据库系统中,成为数据库管理和开发的重要工具。PL/SQL提供了更丰富的...
Oracle Database 10g PL/SQL入门教程是针对初学者设计的一份教程,旨在帮助读者掌握Oracle数据库系统中PL/SQL编程语言的基础知识。PL/SQL是Oracle数据库特有的编程语言,它结合了SQL(结构化查询语言)的功能,用于...
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...
这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了帮助读者通过实践来深入理解和掌握Oracle数据库的编程技术。 首先,让我们探讨Oracle PL/SQL的基础知识。PL/SQL是Oracle数据库的内置编程语言,由块构成...
1. Oracle PL/SQL入门: - PL/SQL的基本结构:PL/SQL由声明部分、执行部分和异常处理部分组成,用于定义变量、常量、游标、过程、函数等。 - 数据类型:了解PL/SQL中的内置数据类型,如NUMBER、VARCHAR2、DATE等,...
【标题】"Java中Oracle Database 10g PL/SQL入门教程"的描述涉及了学习Java编程语言,并特别提到了Oracle Database 10g的PL/SQL编程。Oracle Database 10g是一款关系型数据库管理系统,广泛应用于企业级数据存储和...
本入门教程旨在帮助初学者快速理解并掌握Oracle PL/SQL的基础知识,通过丰富的实例来解析其核心概念。 一、PL/SQL简介 PL/SQL是Oracle数据库提供的过程化语言,它允许开发者编写包含SQL语句的程序块,用于执行复杂...
Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一) http://download.csdn.net/source/3268267 Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二) ...
### Oracle PL/SQL程序设计(第5版)(上下册)知识点概述 #### 一、PL/SQL编程基础 - **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL...
Oracle存储过程和触发器(PL/SQL入门教程) Oracle存储过程和触发器(PL/SQL入门教程)
本书是专门为oracle应用开发人员提供的sql和pl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法...
标题中提到的“PL/SQL开发文档1”,说明本文档是关于PL/SQL开发的入门级指导材料,面向希望学习使用PL/SQL进行数据库程序单元开发的用户。文档很可能是Oracle公司内部或其授权的培训机构用于教学目的的官方材料。 ...
plsql入门 游标变量 Oracle EXTRACT()函数 用Java调用存储过程 ORACLE用户常用数据字典的查询使用方法
学习oracle sql pl/sql入门的很不错的一本书。
快速了解PL/SQL的使用,属于专业培训机构的内部讲义。也可以用作普通数据库操作的温习。
PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库中的过程式编程语言,它结合了SQL查询语句和传统的过程式编程元素,使得在数据库管理中进行复杂逻辑处理成为可能。以下是对PL/SQL的学习笔记...
Oracle PL/SQL 编程及最佳实践 Oracle PL/SQL 是一种高级编程语言,用于开发 Oracle 数据库中的存储过程、函数和触发器。PL/SQL language 提供了强大的编程能力,可以实现复杂的业务逻辑,并且与 Oracle 数据库紧密...