欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Oracle基础教程知识点总结

程序员文章站 2024-04-05 20:17:18
...

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;