oracle存储过程
创建过程实例
创建名为stu_proc的过程,create是创建过程的标识 符,replace表示若同名过程存在将覆盖原过程. 该过程定义了一个变量,其类型和student数据表中的 sname字段类型相同,都是字符型,将数据表中的sno字 段为1的sname字段内容送入变量中,然后输出结果.
Oracle存储过程
什么是存储过程?为啥要用存储过程?
存储过程:存储过程可以说是一个记录集。它 是由一些T-SQL(Transact-SQL = SQL 程式设计语言的增强版,TSQL包含了SQL,如select * from TABLE 这既是一个 T-SQL又是SQL语句,例
如BEGIN: DBMS_OUTPUT(‘1111’); END 这属于T-SQL语句 不是SQL语句
JAVA调用实例
既有输入参数又有输出参数的过程 DbOper oper = DbOper.getdbOper(); String sql="{call stu_proc3(?,?)}"; Object[] params = {1,222}; String str = oper.executeprocedure_inAndOut(sql,params); return str;
JAVA调用实例
无参数过程:
DbOper oper = DbOper.getdbOper(); String sql="{call stu_proc()}"; oper.executeprocedure(sql);
JAVA调用实例
仅有返回值的过程 public void no_paramsCall(){ DbOper oper = DbOper.getdbOper(); String sql="{call stu_proc()}"; oper.executeprocedure(sql); }
游标的声明
FOR循环游标 --(1)定义游标 --(2)定义游标变量 --(3)使用for循环来使用这个游标 declare --类型定义 cursor c_student is select * from student --定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型 c_row c_student %rowtype; begin for c_row in c_student loop dbms_output.put_line(c_row.pno||'-'||c_row.pname); end loop; end;
参数过程实例
仅有输出参数的存储过程
create or replace procedure stu_proc2(pname out student.sname%type) as begin select sname into pname from student where sno=1; dbms_output.put_line(pname); end;
函数调用存储过程实例
对有输入\输出参数过程的调用:
create or replace function get_pname3(pno in number,pname out varchar2) return varchar2 is begin stu_proc3(pno in student.sno%type,pname out student.sname%type); return pname; end;
参数过程实例
无参数存储过程(包含两种方式的变量声明):
பைடு நூலகம்
create or replace procedure stu_proc as(is) --变量的声明区 pname varchar2(25); begin select sname into pname from student where sno=1; dbms_output.put_line(pname); end; 或 create or replace procedure stu_proc as pname student.sname%type; begin select sname into p_name from student where sno=1; dbms_output.put_line(pname); end;
--调用
declare pname student.sname%type; begin dbms_output.put_line('在PL/SQL中打印的结果:'||get_pname3(2,pname)); end;
JAVA调用数据库存储过程
前面我们已经讲述了有关oracle数据库的存储过程的 几种形式,以及oracle函数对存储过程的调用,下面 我将根据上面存储过程的实例来举出JAVA对oracle存 储过程的调用
参数过程的调用执行
PLSQL中调用存储过程的语句 命令窗口模式中的调用执行: exec 存储过程名称(参数1,2….) 注:调用的过程中,不论有没有参数,其()可有可无。 存储过程中调用另一个存储过程 存储过程名称(); 注:调用的过程中,不论有没有参数,其()是必不可少 的。 后台方法的调用存储过程 无参存储过程调用:{call procedure_name() }; 有输入参数的调用:{call procedure_name(?,?..) };
此种存储过程不能直接用call来调用,这种情况的调用将 在下面oracle函数调用中说明
参数过程实例
有输入\输出参数的存储过程:
create or replace procedure stu_proc3 (pno in student.sno%type,pname out student.sname%type) as begin select sname into pname from student where sno=pno; dbms_output.put_line(pname); end;
此种存储过程不能直接用call来调用,这种情况的调用将 在下面oracle函数调用中说明
Oracle函数调用存储过程
我们已经学习了oracle函数,下面就针对参数 的4种情况分别举出实例说明函数对存储过程 的调用
函数调用存储过程实例
对无参数过程的调用: --函数声明 create or replace function get_pname return varchar2 is pname varchar2(20); begin stu_proc; select sname into pname from student where sno=1; return pname; end; 测试窗口中的调用, declare begin dbms_output.put_line('在PL/SQL中打印的结果:'||get_pname); end;
函数调用存储过程实例
对有输入参数过程的调用: create or replace function get_pname1(pno in number) return varchar2 is pname varchar2(20); begin stu_proc1(pno in student.sno%type) select sname into pname from student where sno=pno; return pname; end; --调用 declare begin dbms_output.put_line('在PL/SQL中打印的结果:'||get_pname1(2)); end;
存储过程优点
3)安全性高,可设定只有某此用户才具有对指定存储过 程的使用权; 4)使用存储过程,可以实现存储过程设计和编码工作分 开进行,只要将存储过程名、参数、及返回信息告诉 编码人员即可;
存储过程的语法结构
结构如下: create or replace procedure存储过程名称(参数1 in (out) 类型….) as(is)
)
语句组成的代码块,这些T-SQL语句代码像一 个方法一样实现一些功能(如对单表或多表的增删改查), 然后再给这个代码块取一个名字,在用到这个 功能的时候调用对应名称即可。
存储过程优点
1)速度上:由于数据库执行动作时,是先编译在执行, 然而存储过程属于已编译过的代码块,所以执行效率 比SQL执行效率快; 2)当对数据库进行复杂操作时(如对多个表进行 UPDATE,INSERT,QUERY,DELETE 时),可将这些复杂操作改用 存储过程封装起来之后节后数据库提供的事务处理结 合一起使用。这些操作,如果用程序来完成,就变成 了一条条的 SQL 语句,可能要多次连接数据库。而 换成存储,只需要连接一次数据库就可以了; 3)存储过程可以重复使用,可减少数据库开发人员的 工作量,如果内容修改后,可直接重新编译即可使用, 相对于同功能的后台实现,可以减少服务器重启等。
存储过程
仅有输入参数的过程
create or replace procedure stu_proc1(pno in student.sno%type,pno1 in varchar2) as pname varchar2(25); begin select sname into pname from student where sno=pno; dbms_output.put_line(pname||pno1); end;