当前位置:Gxlcms > mysql > Oracle基础教程知识点总结

Oracle基础教程知识点总结

时间:2021-07-01 10:21:17 帮助过:20人阅读

1. dba,sysdba,sysoper 区别 dba 是一种角色;角色可以包含系统权限,对象权限和角色;dba不包含sysdba,sysoper权限; sysdba ,

1. dba,sysdba,sysoper 区别

dba 是一种角色;角色可以包含系统权限,对象权限和角色;dba不包含sysdba,sysoper权限;

sysdba ,sysoper 是两种系统权限;这两种权限比较大最好以sys,system登陆管理,不要赋给普通用户;

2. Oracle的public

public 可以理解为所有用户的集合;

grant dba to public ; 相当于所有用户都是dba;


---plsql编程:

plsql可以编写:过程,函数,触发器;

过程,函数,触发器在oracle中;

plsql是非常强大的数据库过程语言;

过程,函数可以在java中调用;

plsql优点:

提高性能;(传统的jdbc连库,执行sql,编译成数据库语言,返回值,关闭连接,多次调用多次编译,写成过程只编译一次,对调随用;)

模块化设计思想;(分页过程,订单的过程,转账的过程)

减少网络传输量;(本来需要传个大sql,现在传个过程名字就行了)

安全性高;(oracle数据库的保护,字段什么的都在库里面)

plsql缺点:

移植性不好;(oracle语言写的过程,这些过程在DB2上是没法使用的)


1.创建一个存储过程

create or replace procedure p1 is

begin

insert into mytable values('gao','123456');

end;

/

2.存储过程编程报错,查看错误:

show errors;

3.如何执行存储过程

exec p1;

------编写规范

1.单行注释: --

多行注释:/*...*/ (java中一样)

2.标示符号的命名规范:

变量:v_ (v_val)

常量:c- (c_val)

游标:-cursor (emp_cursor)

例外:e_ (e_error)

3.块结构示意图

pl/sql 块有三部分组成:定义部分,执行部分,例外部分

declear /* 定义部分-定义常量,变量,例外,复杂数据类型*/

begin /* 执行部分-要执行的pl/sql语句和sql语句*/ 必须有

exception /*例外处理部分-处理运行的各种错误*/可选

public static void main(Sting args){

int a; //定义部分

try{

a++; //执行部分

}catch(Exception e){ //异常处理部分

}

}

--只包含执行快部分的块

set serveroutput on --打开输出服务;

begin

dbms_output.put_line('hello,World!');

end;

/

--包含声明和执行部分的pl/sql块;

declare

v_passwd varchar2(10);

v_name varchar2(20);

begin

select passwd ,name into v_passwd ,v_name from mytable where name=&name; --地址符表示从控制台接受变量;

dbms_output.put_line(v_name||'的密码为:'||v_passwd);

end;

/

--包含声明,执行和 异常部分的pl/sql块

declare

v_passwd varchar2(10);

v_name varchar2(20);

begin

select passwd ,name into v_passwd ,v_name from mytable where name=&name; --地址符表示从控制台接受变量;

dbms_output.put_line(v_name||'的密码为:'||v_passwd);

exception

when no_data_found then

dbms_output.put_line('输入的用户名不存在!');

end;

----过程

过程用于执行特定的操作;可以有输入参数和输出参数,

--eg4:

create procedure changepasswd(name1 varchar2,passwd1 varchar2) is

begin

--根据用户名修改密码

update mytable set passwd=passwd1 where name=name1;

end;

-- plsql中执行

call changepasswd('wucaiming','123');

--在java中调用存储工程

//加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

//得到连接

Connection c=DriverManager.getConnection("jdbc:oracle:thin:@192.168.100.145:1521:SDZC","omgap","omgap");

//创建CallableStatement

CallableStatement cs=c.prepareCall("{call changepasswd(?,?)}");

//给?赋值

cs.setString(1,"wucaiming");

cs.setString(2,"123");

//执行

cs.execute();

/* 如何使用过程返回值?*/

函数用于返回特定的数据。

--eg5:

create or replace function f_returnpasswd(name1 varchar2) return varchar2 is

pwd varchar2(30);

begin

select passwd into pwd from mytable where name=name1;

return pwd;

end;

--plsql中的调用

var a varchar2(30);

call f_returnPasswd('wucaiming') into:a;

包用于在逻辑上组合过程和函数,它有包规范和包体两部分组成。

--创建包

create package p_package is

procedure changepasswd(name1 varchar2,passwd1 varchar2);

function f_returnpasswd(name1 varchar2) return varchar2;

end;

--实现包体

create or replace package body p_package is

procedure changepasswd(name1 varchar2,passwd1 varchar2) is

begin

--根据用户名修改密码

update mytable set passwd=passwd1 where name=name1;

end;

人气教程排行