oracle-创建存储过程、函数、包、游标、视图

set serveroutput on;
declare
v_name varchar2(20);
v_sal number(7,2);
begin
select ename,sal into v_name,v_sal from emp where empno=&aa;
dbms_output.put_line('雇员名为:'||v_name||'雇员编号为:'||v_sal);


exception
  when no_data_found then
    dbms_output.put_line('你输入的编号有误,请重新输入。');
end;




--案例
create or replace procedure yj_pro3(yjname varchar2,newSal number) is
begin
  update emp set sal=newSal where ename=yjname;  
end;


--函数案例
create function yj_fun1(yjName varchar2) return number is yearSal number(7,2);
begin
  select sal*12+nvl(comm,0) into yearSal from emp where ename=yjName;
  return yearSal;
end;


--创建包
create package yj_package is
procedure  update_sal(nam varchar2,newsal number);
function annual_income(name varchar2) return number;
end;


--给 yj_package 包实现包体
create package body yj_package is 
procedure  update_sal(nam varchar2,newsal number) is
begin
update emp set sal=newsal where ename=nam;
end;
function annual_income(name varchar2) return number is annual_salary number;
begin
select sal*12+nvl(comm,0) into annual_salary from emp where ename=name;
return annual_salary;
end;
end;


--下面以输入员工号,显示雇员姓名、工资、个人所得税
--(税率为0.03)为例。说明变量的使用,看看如何编写
declare
c_tax_rate number(3,2):=0.03;
--用户名
v_ename emp.ename%type;
v_sal emp.sal%type;
v_tax_sal number(7,2);
begin
  --执行
  select ename,sal into v_ename,v_sal from emp where empno=&no;
  --计算
  v_tax_sal:=v_sal*c_tax_rate;
  --输出
  dbms_output.put_line('姓名是:'||v_ename||'工资是:'||v_sal||'个人所得税是:'||v_tax_sal);
end;


--pl/sql记录实例
declare
--定义一个pl/sql记录类型emp_record_type,类型包含3个数据
type emp_record_type is record(
name emp.ename%type,
salart emp.sal%type,
title emp.job%type);
--定义了一个变量,变量的类型是emp_record_type
sp_record emp_record_type;
begin
  select ename,sal,job into sp_record from emp where empno=7788;
  dbms_output.put_line('员工名'||sp_record.name);
end;


--pl/sql表实例
declare
--定义一个pl/sql表类型sp_table,该类型是用于存放emp.ename%type
--index by binary_integer 表示下标是整数
type sp_table_type is table of emp.ename%type index by binary_integer;
--定义了一个sp_table变量,类型为sp_table_type
sp_table sp_table_type;
begin
  select ename into sp_table(0) from emp where empno=7788;
  dbms_output.put_line('员工名'||sp_table(0));
end;


--使用pl/sql编写一个块,可以输入部门号,并显示该部门所有的姓名和工资
declare 
--定义一个游标
type sp_emp_cursor is ref cursor;
--定义变量
v_name emp.ename%type;
v_sal emp.sal%type;
--定义一个游标变量
test_cursor sp_emp_cursor;
begin
  --把test_cursor和一个select结合
  open 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;
--创建视图,把emp表的sal<1000的雇员映射到该视图(view)
create view myview as select * from emp where sal<1000;


--为简化操作,用一个视图解决显示雇员编号,姓名和部门名称
create or replace view myview as select emp.empno,emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno;
java:
package com.sp;

import java.sql.*;

public class test {
	//java程序去调用Oracle的存储功过程
	
	public static void main(String[] args) throws Exception {

		Class.forName("oracle.jdbc.driver.OracleDriver");
		Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","1234");
		
		//创建CallableStatement
		CallableStatement cs=ct.prepareCall("{call yj_pro3(?,?)}");
		//给?赋值
		cs.setString(1, "Aro");
		cs.setString(2, "50");
		//执行
		cs.execute();
		
		cs.close();
		ct.close();
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值