Oracle数据库学习笔记四

来源:互联网 发布:java遍历map哪个速度快 编辑:程序博客网 时间:2024/05/22 01:44

Oracle数据库学习


系统权限不是级联回收。
对象权限的访问

对象权限是级联回收的。
角色
角色分为预定义角色自定义角色。
预定义角色:



自定义角色:

角色授权:


删除角色:


PL/SQL的简介

pl/sql(procedural language/sql)是oracle在标准的sql语言上的扩展,pl/sql不允许嵌入sql语言,还可以定义常量和变量,允许使用条件语句和循环语句,允许使用例外处理各种错误,这样使得它的功能变得更加强大。

1.过程、函数和触发器是pl/sql编写的
2.过程、函数和触发器是在Oracle中的
3.pl/sql是非常强大的数据库过程语言
4.过程、函数可以在java中调用
过程的使用:
1.创建一个简单地表
create table mytestname varchar230),password varchar230));

2.创建过程
create or replace procedure sq_prol is
begin
insert into mytest(’liheng‘,’123‘);
end

如何查看错误信息
show error;
如何使用过程:
  • exec 过程名(参数值1,参数值2)
  • call 过程名(参数值1,参数值2)
函数的使用

函数的案例
输入雇员的姓名,返回该雇员的年薪
create function sp_fun2(spName varchar2) return
number is yearSal number(7,2);
begin
select sal*12+nvl(comm,0)*12 into yearSal from emp where ename=spName;
return yearSal;
end;
函数的调用:


包的使用:




触发器的使用:


参照变量:



1.请使用pl/sql编写一个块,可以输入部门号,并显示该部门所有员工的姓名和他的工资
declare
--定义游标
type sp_emp_cursor is ref cursor;

--定义一个游标变量
test_cursor sp_emp_cursor;

--定义变量
v_name emp.ename%type;
v_sal emp.sal%type;

begin
--执行
--把test_cursor 和一个select 结合
ope test_cursor for select ename, sal from emp where deptno = &no;

--循环取出
loop
    fetch test_cursor into v_name,v_sal;
    --判断是否test_cursor 为空
    exit when test_cursor%notfound;
    dbms_output.put_line('名字:' || v_name ||‘薪水:’||v_sal);
end loop;
end;

pl/sql进阶 编写分页过程
案例:
--book表
create table book bookid numberbookname varchar250),publishHouse varchar250));

--编写过程 in 表示这是一个输入参数 out 表示这是一个输出参数
create or replace procedure sp_pro7(spBookId in numberspBookname in varchar2 sppublishHouse in varchar2) is
begin
insert into book valusspBookId spBooknamesppublishHouse  );
end

在java中调用
package com.zm;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
public class Test1 {
    public static void main(String[] args) {
        try {
            //1.加载驱动
            class.forName("oracle.jdbc.driver.OracleDriver");
            Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:MYORA1","scott","m123");
            //2.创建CallableStatement
            CallableStatement cs = ct.prepareCall("{call sp_pro7(?,?,?)}");
            //给?赋值
            cs.setInt(1, 10);
            cs.setString(2, "天龙八部");
            cs.setString(3, "人名出版社");
            //执行
            cs.execute();
            
        } catch (Exception e) {
            // TODO: handle exception
        }finally{
            cs.close();
            ct.close();
        }
    }
}


0 0