--============PLSQL==子程序===== ----===========匿名子程序= --匿名块不存在数据库中 --每次使用时都会进行编译 --不能再其他块中相互调用 --匿名子程序语法格式如下(总结) declare cursor is select .. -- 游标 type (is record ,is table of .. index by) --record类型 ,关联数组 variable type --变量 begin execute immediate 'create table'; --动态sql执行ddl insert into --静态SQL执行DML execute immediate 'insert into..' --动态sql执行DML TCL (commit ;rollback) -- 静态SQL执行TCL select (select into 单行) -- 0,单行, cursor (loop while for fetch into) -- 多行 select ....bulk collect into -- bulk collect,减少内存空间交互数据的次数 curosr (fetch bulk collect into) cursor (while fetch bulk collect into 。。。limit n)--Limit限制抓取的记录 --关联数组的处理 --声明,赋值,引用,方法:first,last,next,exists,count -- 循环结构 -- Loop exit; for i in 1..10 loop ; while xxx LOOP; exception --- oracle预定义异常(直接使用) --- 非oracle预定义异常(绑定,使用) --- 用户自定义异常(声明,触发,使用) end ----==========有名子程序========== --命名的PL/SQL块,编译时并存储在数据库中,可以在任何需要的地方调用 --子程序的组成部分: -----子程序头 -----声明部分 -----可执行部分 -----异常处理部分(可选) -----------有名子程序的分类 --procedure 过程 --function 函数 --package 包 --trigger 触发器 --===========有名子程序的优点: --模块化 : 将程序分解成逻辑模块 --可重用性:可以被任意数目的程序调用 --可维护性 : 简化维护操作 --安全性 : 通过设置权限,使数据库更安全 --=======过程 procedure============= create or replace procedure 过程名字 [arg_name in | out| int out (argument-type)] --参数都是可选 is / as 变量声明 begin 执行部分 exception 异常部分 end; --指定员工编号(in 参数) ,打印员工信息 create or replace procedure p_emp(id in number) --参数不需要指定大小范围 is -- print_emp(id number) is 参数不需要指定大小范围,默认in v_emp emp%rowtype; --变量 begin select * into v_emp from emp where empno = id; dbms_output.put_line(v_emp.ename); Exception when NO_DATA_FOUND then dbms_output.put_line('not exists '||id); end; --========调用存储过程: --1. 用匿名块调用 begin call p_emp(7900); end; --2.在sql工作表中直接调用 call p_emp(7900);--正常输出 exec p_emp(7900); ---==============存储过程中的参数=== create or replace procedure proc1 (p_c1 varchar2, p_c2 out varchar2,p_c3 in out varchar2) is v_c1 varchar2(10); begin -- in ,参数的缺省模式,在过程内部,形参只是可读的. -- p_c1 :=p_c1||'d'; 错误的 v_c1 :=p_c1; dbms_output.put_line('in : p_c1-->'||p_c1||':::v_c1-->'||v_c1); -- out: 在调用过程中,任何的实参将被忽略,即值不会赋给对应的形参, dbms_output.put_line('out :p_c2的值-->:'||p_c2); --不会输出任何内容 p_c2 :=p_c2 ||'d'; --在过程内部,形参可以被读出也可以被写入, dbms_output.put_line('out :p_c2 赋值后的值-->:'||p_c2);--输出 'd'; --过程执行完成后形参的当前值被赋给对应的实参. --in 和 out 的结合 p_c3 :=p_c3 ||'d';--可以被赋值,可以传入值,可以传出值 dbms_output.put_line('int out : p_c2赋值后的值-->:'||p_c3);--'ccd'; end; call proc1('a','abc',p_c2);-- error , 第3个参数是输出参数,不能赋值 --利用匿名块调用 declare v_c2 varchar2(10) :='bb'; v_c3 varchar2(10) :='cc'; begin proc1('aa',v_c2,v_c3); dbms_output.put_line('v_c2:'||v_c2);--在plsql赋值的:d dbms_output.put_line('v_c3:'||v_c3);--ccd end; --关于参数的再次分析 create or replace proc1(p1 in number) --p1 形式参数 is p2 number(4) :=0; -- p2局部变量 begin p2 :=p1; --in 参数赋值给过程中的局部变量 dbms_output.put_line('p2:'||p2); end; --调用 declare v_n1 number(3) :=1; proc1(v_n1); --实参 proc1(2); --实参 end; --总结: -- 模式为in时:形参对应的实际参数可以是常量或变量. --模式为in out / out的形参对应的实际参数必须是变量, --用于存储返回的值,所以不能是常量或表达式. --============带参数的过程调用:========= -- 指定一行记录record,增加该记录的薪水salary,返回改emp的id create or replace procedure proc1(salary in number, id out number, v_emp emp%rowtype) --形式参数不能声明长度,但可使用%type来限制. is begin dbms_output.put_line('--修改前的薪水--'||v_emp.sal); update emp set sal = (sal+salary) where empno=v_emp.empno; id :=v_emp.empno;--out参数赋值 dbms_output.put_line('--修改的员工id--'||id); end; --1.位置标示法 ---调用时填入所有的参数,实参跟形参顺序一一对应 declare v_emp emp%Rowtype; v_id number(4); begin select * into v_emp from emp where empno = 7900; proc1(1000,v_id,v_emp); end; --2.名字表示法 ---调用时给出形参名字,并给出实参 declare v_emp emp%Rowtype; v_id number(4); begin select * into v_emp from emp where empno = 7900; -- 名字必须对应 --proc1(salary=>1000,a=>v_id,v_emp=>v_emp); error proc1(salary=>1000,id=>v_id,v_emp=>v_emp); end; --3,混用,第一个参数必须通过位置来指定 --procname(12,p_outparm=>v_var1, p_inout=>10); declare v_emp emp%Rowtype; v_id number(4); begin select * into v_emp from emp where empno = 7900; --proc1(salary=>1000,v_id,v_emp=>v_emp); error proc1(1000,id=>v_id,v_emp=>v_emp); --ok end; --=====存储过程中的DDL语句------------ create or replace procedure proc1 is begin execute immediate 'create table test(c1 number)'; end; --======Notice --调用过程所需的权限 ----调用过程时,所有角色都是disable的,即角色中包含的所有权都不能生效 ----调用其他用户的过程,必须由过程的属主授予执行权限 ----在过程中进行ddl操作,所需的权限必须通过直接授予的方式,不能通过角色授予 --查看Proc1过程的源文件 select text from user_source where name = 'PROC1'; --查看Proc1的状态 select object_type,status from user_objects where object_name = 'PROC1'; --重新编译proc1; alter procedure proc1 compile;
相关推荐
PLSQL Developer7(oracle数据库) PLSQL Developer7(oracle数据库) PLSQL Developer7(oracle数据库) PLSQL Developer7(oracle数据库) PLSQL Developer7(oracle数据库) PLSQL Developer7(oracle数据库) ...
### Oracle数据库PL/SQL存储过程详解 #### 一、存储过程概述 **Oracle存储过程**是一种可以在Oracle数据库中存储并可被多次调用的PL/SQL代码块。它由一系列的PL/SQL语句组成,可以包含控制流程、变量声明等,能够...
通过深入学习和实践这些内容,开发者能够熟练掌握在Oracle数据库中使用PLSQL进行编程,并能有效地创建和管理存储过程,以提高数据库应用的效率和质量。在实际工作中,了解这些知识点对于数据库管理和开发工作至关...
PL/SQL是Oracle数据库特有的编程语言,结合了SQL查询和过程式编程的特点。它是开发数据库应用、实现业务逻辑的关键工具,具有异常处理、循环、子程序等功能,使得数据库操作更加高效和安全。 3. 中文版本: 提供...
有JavaWEB的网上商城系统源码+项目说明(SSM框架、Shiro技术、Oracle数据库、PLSQL编程、JSP、JQuery、Ajax、Jso).zip 有JavaWEB的网上商城系统源码+项目说明(SSM框架、Shiro技术、Oracle数据库、PLSQL编程、JSP、...
Oracle数据库连接工具PLSQL轻桌面工具包,安装PLSQL必须下载轻桌面工具包
Oracle数据库培训-PLSQL编程
"Oracle数据库练习PPT"可能包含一系列关于Oracle数据库管理、表的创建、索引、视图、触发器、存储过程、游标以及数据库安全等内容的教程。通过这些PPT,初学者可以了解到如何设计和操作Oracle数据库,包括数据类型、...
"使用PLSQL创建Oracle数据库用户并设置权限" 在 Oracle 数据库中,创建用户并设置权限是数据库管理员的基本任务之一。在本文中,我们将使用 PLSQL 创建 Oracle 数据库用户并设置权限,包括创建用户、设置权限和创建...
plsql developer连接远程数据库(本地不用安oracle)
- **PL/SQL**:PL/SQL(Procedure Language for SQL)是一种过程化语言,专为提高Oracle数据库应用程序开发者的生产力而设计。它将SQL命令与传统过程化控制流语句相结合,能够提高数据库应用程序的性能,并简化其维护...
在Oracle数据库管理中,PL/SQL Developer是一款非常实用的工具,它专为Oracle数据库的存储程序单元开发设计,包括过程、函数、包、触发器等的编写和调试。这款工具以其用户友好、代码质量优化以及高生产力而受到青睐...
oracle数据库系统的好工具,plsql程序设计,内容详尽,适合初学者,步骤详细,是一份难能可贵的资料,我找了很久的,现在共享给大家
plsqlDev链接Oracle数据库使用plsqlDev链接Oracle数据库使用plsqlDev链接Oracle数据库使用
PLSQL语法Oracle数据库
其中,"plsql"通常指的是Oracle的PL/SQL Developer,这是一个强大的第三方工具,专为开发和管理Oracle数据库的PL/SQL代码而设计。它提供了代码编辑、调试、数据库对象浏览、版本控制等多种功能,极大提高了开发效率...
2-2-Oracle数据库知识 PLSQL介绍 共69页.ppt 3-1-Oracle数据库知识 PLSQL控制结构 共25页.ppt 4-1-异常处理 共87页.ppt 4-2-过程与函数 共62页.ppt 4-3-在PLSql中使用sql 共98页.ppt 5-1-DistributedDatabaseSystem...
Oracle数据库是世界上最广泛使用的商业关系型数据库系统之一,以其稳定性、安全性和可扩展性而著称。 在"PLSQLDeveloper_win32位"中,我们关注的是一个专门用于开发PLSQL代码的集成开发环境(IDE),即PL/SQL ...
使用PLSQL创建Oracle数据库User用户并设置权限 主要演示了如何使用 PLSQL 创建一个 User 用户, 并使之具有创建表、修改表、访问表的权限。解决了 使用自定义用户创建表时出现的 没有表空间的访问权限的问题。
Oracle数据库是广泛应用于企业级应用的数据存储系统,而PL/SQL Developer(通常简称为PLSQL)是一款便捷的数据库管理工具,特别适合开发人员和DBA进行数据库查询、管理及开发工作。在某些情况下,用户可能不想或不能...