pl/sql学习笔记(一)

来源:互联网 发布:ubuntu安装monaco 编辑:程序博客网 时间:2024/06/01 08:17

《第一课》
一、定义:
PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。
在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,
通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。
二、优缺点
优点:
1.提高应用程序的运行性能。
2.模块化的设计思想。
3.减少网络传输量。
4.提高安全性。
缺点:
移植性不好。
三、实例
编写一个存储过程,该过程可以向某个表中添加记录。
1.创建一个简单的表
create table mytest(
    name varchar2(30),
    passwd varchar2(30)
);
2.创建过程。
create procedure yzh_test is
begin
--执行部分
insert into mytest values('yzh','123');
end;
/
-------
如果存储过程名存在则替换即可。
create or replace procedure yzh_test is
begin
--执行部分
insert into mytest values('yzh','123');
end;
/
----
如何查看错误信息:show erro;
如何调用该过程://每次调用存储过程,它都会插入数据。
方式一、
exec 过程名(参数值1,参数值2,...);//如果没有参数,可以省去。
方式二、
call 过程名(参数值1,参数值2,...);
查看表内容:select * from mytest;
-----
四、编写规范
(1)
  单行注释 --
  多行注释 /*...*/
(2)标识符号的命名规范
定义变量,建议由v_作为前缀 v_cal
定义常量,建议由c_作为前缀
定义游标,建议由_cursor作为后缀
定义例外时,建议由e_作为前缀
五、
块是pl/sql的基本程序单元,编写pl/sql程序实际上就是编写pl/sql块。
由三部分构成:定义部分、执行部分、例外处理部分
例子:
declear
/*定义部分---定义常量、变量、游标、例外、复杂数据类型等[可选部分]*/
begin
/*执行部分---要执行的pl/sql语句2(22和sql语句[必须的]*/
exception
/*例外处理部分---处理运行的各种错误[可选部分]*/
end;
《第二课》
块的实例1:
set serveroutput on--打开输出选项,如果关闭就无输出信息了
begin
  dbms_output.put_line('hello');//
end;
/
说明:dbms_output是Oracle所提供的包,put_line就是此包的一个过程。
set serveroutput off--关闭输出选项
begin
  dbms_output.put_line('黑子');
end;
/
块的实例2:
declare
  v_ename varchar2(5);
begin
  select ename into v_ename from emp where empno=&no;
  dbms_output.put_line('名字:'||v_ename);
end;
/
说明:&表示要接收从控制台输入的变量
into v_ename,可以理解为把ename赋值给v_ename变量
no是可变的
例子
sql->set serveroutput on
sql->
declare
v_passwd varchar2(20);
begin
select passwd into v_passwd from mytest where name=&aa;
dbms_output.put_line('用户密码'||v_passwd);
end;
/
sql->set serveroutput on
sql->
declare
v_ename varchar2(30);
v_sal number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&aa;
dbms_output.put_line('用户名'|| v_ename ||'工资'|| v_sal);
end;
/
块的实例3:
有异常该怎么处理?
sql->set serveroutput on
sql->
declare
v_passwd varchar2(20);
begin
select passwd into v_passwd from mytest where name=&aa;
dbms_output.put_line('用户密码'||v_passwd);
--异常处理
exception
when no_data_found then
dbms_output.put_line('名称输入有误!');
end;
/
六:过程
过程用于执行特定的操作。当建立过程时,既可以指定输入参数,也可以指定输出参数。
实例1:
编写一个过程,输入用户名,新密码 可修改用户的密码
create procedure yzh_test3(yzh_name varchar2,new_passwd varchar2) is
begin
--执行
update mytest set passwd=new_passwd where name=yzh_name;
end;
/
exec yzh_test3('yzh','yzh');
select * from mytest;
调用过程的两种方法:exec或call
如何在Java程序中调用一个存储过程?
//演示java程序调用oracle的存储过程
注意:加入连接oracle的jar包
package yzh;
import java.sql.*;
public class TestOracleEX{
  public static void main(String args[]){
  Connection con=null;
    try{
     Class.forName("oracle.jdbc.driver.OracleDriver");
  con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","system","yzh");
  //创建CallableStatement
  CallableSatement cs=con.prepareCall("{call yzh_mytest3(?,?)}");
  //给?赋值、
  cs.setString(1,"yzh");
  cs.setString(2,"123456");
  //执行
  cs.execute();
  //关闭资源
  cs.close();
  con.close();
 }catch(Exception e)
 {
    e.printStackTrace();
 }
  }
}

 

原创粉丝点击