什么是存储过程
存储过程是一种命名的PL/SQL程序块,既可以没有参数也可以有若干个输入,输出参数,
但是它通常没有返回值
。存储过程被保存在数据库中,可以被SQL语句直接调用,只能通过EXECUT命令或者在PL/SQL程序块内部被调用。由于存储过程是已经编译好的代码,因此被调用或者引用时,执行效率非常高。
创建存储过程
示例如下:
create or replace procedure pro_name (parameter1,parameter2) is
begin
plsql_sentences;
[exception]
[dowith_sentences;]
end [pro_name];
注意一下,is和as的区别:
在Oracle的存储过程和函数中,其实IS和AS是同义词,没有什么区别。还有在自定义类型(TPYE)和包(PACKAGE)时,使用IS和AS也并没有什么区别。
但是在创建视图(VIEW)时,只能使用AS而不能使用IS。在声明游标(CURSOR)时,只能使用IS而不能使用AS。
pro_name:存储过程名字,parameter1存储过程的参数;plsql_sentences:PL/SQL语句,它是存储过程实现的主体。dowith_sentences:异常处理语句。中括号[]是可有可无的
创建一个插入的存储过程示例:
SQL> create or replace procedure pro_insertDept is
begin
insert into dept values(77,'市场拓展部','JJ');
commit;
dbms_output.put_line('插入的新记录成功!');
end pro_insertDept;
注意:在PL/SQL的命令窗口里面必须用“/”强制退出
调用存储过程的示例如下:使用execute命令(或者使用exec)
SQL> execute pro_insertDetp; --执行的存储过程
或者使用call命令调用
call pro_insertDept();
或者如下:
SQL> set serverout on; --这个只能在SQL PLUS里面使用,意思是在窗口里显示服务器输出信息
SQL> begin
pro_insertDept;
/ --强制退出命令
注意:set serverout on; --这个只能在SQL PLUS里面使用,意思是在窗口里显示服务器输出信息
存储过程的参数
IN模式参数:这是一种输入类型的参数,参数值有调用方传入,并且只能被存储过程读取。这种模式是最常用的,关键字in位于参数名称之后。
SQL> create or replace procedure insert_dept(
num_deptno in number,
var_ename in varchar2,
var_loc in varchar2
) is
begin
isnert into dept values (num_deptno,var_ename,var_loc);
commit;
end insert_dept;
注意一下:参数类型的不能指定长度。
- 指定名称传递:指在向存储过程传递参数的时需要指定参数名称(与顺序无关,但名字要一致),即参数名称在左侧,中间是赋值符号“=>”,右侧是参数值
=> 是 Oracle 中调用 存储过程的时候, 指定参数名进行调用
SQL>begin
insert_dept(var_ename=>'采购部',var_loc=>'成都',num_deptno=>15);
- 按位置传递:提供的参数数值顺序必须与存储过程中定义的参数顺序相同
SQL>begin
insert_dept(28,'工程部','洛阳');
end ;
- 混合方式传递: 混合方式及时将两种结合到一起,兼顾两者的有点
混合方法需要注意:上面两种调用方式可混合使用,但是注意,一旦某个参数有使用命名符,则后面所有的参数都得使用命名符, 否则会导致异常:“PLS-00312:一个定位相关参数没有说明其相关性”
in 参数的默认值:是在声明时初始化默认值,用default关键字
SQL>create or replace procedure insert_dept(
num_deptno in numnber,
var_dname in varchar2 default '综合部',
var_loc in varchar2 default '北京'
begin
insert into dept values(num_deptno,var_dname,var_loc);
out模式参数:输出类型参数,关键字out位于参数名称之后
创建示例:
SQL> create or replace procedure select_dept(
num_deptno in number,
var_dname out dept.dname%type,
var_loc out dept.loc%type
) is begin
select dname,loc into var_dname,var_loc from dept
where deptno = num_deptno;
end select_dept;
注意一下:SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中
(1)在PL/SQL块中调用out模式的存储过程,需要在PL/SQL块declare部分定义与存储过程中out参数类型兼容的若干变量
SQL>set serverout on
SQL> declare
var_dname dept.dname%type;
var_loc dept.loc%type;
begin
select _dept(99,var_dname,var_loc);
dbms_output.putline(var_dname||'位于:'||var_loc);
注意:select_dept(num_deptno=>99,var_dname,var_loc),这样写会报错:一个定位相关参数没有说明其相关性,必须这样写:select_dept(num_deptno=>99,var_dname=>var_dname,var_loc=>var_loc);=>左边的是参数名,要和存储过程内部一致,右侧是参数值。
=> 是 Oracle 中调用 存储过程的时候, 指定参数名进行调用
(2)用exec命令执行out模式的存储过程,在SQL*Plus环境中使用variable关键字声明两个变量,用以存储out参数的返回值
SQL>variable var_dname varchar2(50);
SQL>variable var_loc varchar2(50);
SQL>exec select_dept(15,:var_dname,:var_loc);
但是用户看不到var_dname和var_loc的值,可以通过print或者select查看
SQL>print var_dname var_loc;
select :var_dname,:var_loc from dual;
- 使用print命令查看
- 使用select语句检索绑定的变量值
IN OUT 模式参数:在执行存储过程中,in参数不能被修改,只能根据被传入的指定值为存储过程提供数据,而out类型只能等待被赋值,IN out 参数可以兼顾两者的优点,在调用的时候,从外界向该类型的参数传入值,执行完之后,将结果返回值传给外界
in out 参数示例:
SQL>create or replace procedure pro_square(
num in out number,
flag in boolen
) is i int :=2;
begin
if flag then
num :=power(num,i);
num :=sqrt(num);
end if;
调用如下:
SQL>declare var_number number;
var_temp number;
boo_flag boolean;
begin
var_temp :=3;
var_number :=var_temp;
boo_flag :=false;
pro_square(var_number,boo_flag);
if boo_flag then
dbms_output.put_line(var_temp||'的平方是:'var_number);
dbms_output.put_line(var_temp||'的平方根是:'var_number);
end if;
什么是存储过程存储过程是一种命名的PL/SQL程序块,既可以没有参数也可以有若干个输入,输出参数,但是它通常没有返回值。存储过程被保存在数据库中,可以被SQL语句直接调用,只能通过EXECUT命令或者在PL/SQL程序块内部被调用。由于存储过程是已经编译好的代码,因此被调用或者引用时,执行效率非常高。创建存储过程示例如下:create or replace procedure p...
在 ORACLE SERVER 上建立存储过程 可以被多个应用程序调用 可以向存储过程传递参数 也可以向存储过程传回参数
(1) 语法:
CREATE [ OR REPLACE ] PROCEDURE Procedure_name
[ (argment [ {IN | IN OU T }] Type,
argment [ { IN | OUT | IN OUT } ] Type
[ AUTHID DEFINER | CURRENT_USER
plsql 以及存储过程plsql 编程概念和目的什么是PL/SQLPL/SQL的好处程序结构变量的声明及使用流程控制条件分支循环集合类型的变量 游标带参数的游标存储过程概念与介绍存储过程的作用语法Java 程序调用存储过程
plsql 编程
概念和目的
什么是PL/SQL
PL/SQL:procedure language/SQL
PL/SQL 是 Oracle 对 sql 语言的过程化扩展
指在 sql 命令语言中增加了过程处理语句(如分支、循环等),使得 sql 语句具有过程处理能力。
PL/SQ
一、PL/SQL是什么?
1. PL/SQL概念
PL/SQL(Procedural Language/SQL)是一种过程化语言,它允许SQL的数据操纵语言和查询语句包含在块结构(block_structured)和代码过程语言中,使其成为一个功能强大的事务处理语言。
在甲骨文数据库管理方面,PL/SQL是对结构化查询语言(SQL)的过程语言扩展。PL/SQL的目的是联合数据库语言和过程语...
当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。
存储过程可以重复使用,可减少数
CREATE OR REPLACE PROCEDURE SP_YEAR
(I_YEAR IN NUMBER, ---I_YEAR,O_YEAR OUT形参
O_YEAR OUT VARCHAR2 ----在测试时写入的值为实参
BEGIN
IF MOD(I_YEAR,4)=0 AND MOD(I_YEAR,
type mytype is table of varchar2(100);
--声明嵌套表变量 嵌套表必须初始化
var1 mytype:=new mytype('a','b','c')
begin
var1.extend(2);--在数组后加了两个空间
var1(1):='a';
var1(6):='a';--超出空间
可变数组的代码
declare
--定义可变数组
--else if 的缩写 elsif
--varray variable array两个单词的缩写
--数字定义可变数组的最大长度
type mytype is varray(100) of varchar2(100);
--定义可变数组变量
--可变数组也必须初始化
var1 mytype:=new mytype('a','b','c');
begin
var1.extend(2);
var1(4):='d';
集合的属性和方法
1.count属性计数 ,可以得到集合的元素数量
2.delete方法
3.exists 判断这个元素是否存在,exists(x)
4.extend方法 不带参数加一个元素
extend(x)加x个元素
extend(x,y)
5.first属性,返回第一个元素的下标
6.last 属性,赶回最后一个元素的下标
7.limit属性 ,返回集合中最大元素的个数
8.next属性,next(x)返回位置x处的后面的那个元素 的索引
9.prior属性 prior(x)返回 x处前面的那个元素的下标
10.trim 方法 删除元素,删除集合中最后一个元素
trim(x)删除集合中末尾x个元素
voa special english 英文电台
第三章 存储过程和函数
什么是过程?所有的pl/sql都叫过程
创建存储过程:
create or replace procedure p1
(v1 int ,v2 int)--存储过程的参数列表
--声明局部变量
begin
null;
1.declare调用
2.命令调用
删除存储过程:drop procedure p1;
学习状态:学一个东西,有欲望,写东西出来
三段式:被动,自发,自动
java-web 自己写一个,从四月开始到中旬任务
如果您是在 PL/SQL Developer 工具中,执行存储过程的步骤如下:
1. 打开 PL/SQL Developer 工具,并连接到您想要执行存储过程的数据库。
2. 打开一个 SQL 编辑器窗口,输入调用存储过程的语句,例如:
EXEC my_stored_proc(param1, param2);
其中 my_stored_proc 是您要执行的存储过程的名称,param1 和 param2 是传递给存储过程的参数。
3. 点击“执行”按钮,或者使用快捷键“F5”执行语句。
4. 如果存储过程执行成功,则会在输出窗口中看到相应的消息。如果存储过程执行失败,则会显示错误消息。
请注意,您必须具有足够的权限才能执行存储过程。如果您没有适当的权限,则可能无法执行存储过程。