Oracle Pracedures Packages创建

自己没事整理的,建个Packages:

 

-----------------Packages Start--------------------------------------------------------------------------------*********************--------------
create or replace package LK_Package is
  DB_OK CONSTANT number := 0;
  DB_ERROR CONSTANT number :=1;
 procedure LK_Test(
           in_test in char,
           in_yen in number,
           out_code out number,
           out_msg out varchar2
 );
end LK_Package;

-------&&&&&&&&&&&&&&&&&&&----------------
--is/as 只是定义,begin才是真正的开始
create or replace package body LK_Package is

  LK_Code   NUMBER(1);  --レコードカウント1
 LK_Msg varchar2(60); --合計金額1

--带返回值方法(此处的变量名不能重新赋值)
  function UptTest(
     in_kyuko_yen in number := 0,--默认参数
     in_shain_cd in char)
     return boolean
  is
     in_kyuko number;
  begin
     if in_kyuko_yen = 0 then
        in_kyuko := 100;  --!!!
     end if;
     update test set KYUYO_YEN= in_kyuko where SHAIN_CD=in_shain_cd;
     return true;
     exception
       when others then
            rollback;
            return false;
  end;
  --不带返回值方法(此处的变量名必须与之前的一一对应)
  procedure LK_Test(
            in_test in char,
            in_yen in number,
            out_code out number,
            out_msg out varchar2
  )
  is
  begin
    if UptTest(in_test,in_yen) =true then
       out_code :=DB_OK;
       out_msg :='';
    else
       out_code :=DB_ERROR;
       out_msg :=sqlerrm;
    end if;
    exception
      WHEN OTHERS THEN
           out_code :=DB_ERROR;
           out_msg := 'exception : ' || sqlerrm;
           rollback;
  end LK_Test;
begin
 --LK_Test('00088838',600,LK_Code,LK_Msg);
end LK_Package;

-----------------Packages End---------------------------------------------------------------------------------******************---

### Oracle 数据库中的包(Packages) #### 定义与作用 在Oracle数据库中,包是一种逻辑结构,用于封装和组织相关的PL/SQL程序单元。通过使用包,可以更好地管理复杂的应用程序并提高性能。包由两个部分组成:包规范(Package Specification)和包体(Package Body)。包规范定义公共接口,而包体则实现这些接口。 #### 创建包的语法 创建一个简单的包涉及两步操作: 1. **创建包规范** ```sql CREATE OR REPLACE PACKAGE emp_mgmt AS PROCEDURE hire_employee ( employee_id NUMBER, first_name VARCHAR2, last_name VARCHAR2, email VARCHAR2, phone_number VARCHAR2, job_id VARCHAR2, salary NUMBER); FUNCTION get_employee_salary(emp_id IN NUMBER) RETURN NUMBER; END emp_mgmt; / ``` 这段代码声明了一个名为`emp_mgmt`的包,其中包含了过程`hire_employee`以及函数`get_employee_salary`的原型[^1]。 2. **创建包体** ```sql CREATE OR REPLACE PACKAGE BODY emp_mgmt AS PROCEDURE hire_employee ( employee_id NUMBER, first_name VARCHAR2, last_name VARCHAR2, email VARCHAR2, phone_number VARCHAR2, job_id VARCHAR2, salary NUMBER) IS BEGIN INSERT INTO employees VALUES (employee_id, first_name, last_name, email, phone_number, SYSDATE, job_id, NULL, salary, NULL, 'KING'); COMMIT; END; FUNCTION get_employee_salary(emp_id IN NUMBER) RETURN NUMBER IS v_sal employees.salary%TYPE; BEGIN SELECT salary INTO v_sal FROM employees WHERE employee_id = emp_id; RETURN v_sal; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN 0; END; END emp_mgmt; / ``` 这里实现了之前在包规范中声明的过程和函数的具体功能。 #### 使用包的优点 - 提高模块化程度,便于维护。 - 支持私有子程序的概念,在包体内定义但不在包规格中公开的方法仅限于该包内部调用。 - 可以存储状态信息,即全局变量可以在整个会话期间保持其值不变。 - 增强安全性,允许更细粒度的安全控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值