成都网站建设设计

将想法与焦点和您一起共享

oracle包如何写 oracle 包 调用

oracle如何在已定义的包中添加一个过程?

创建包时,包分为两个部分,包头和body部分,在包头部分声明包内容,可以包括过程,函数啊等,body部分是包内容的详细部分,你的过程就写在body部分,找找包定义看看就知道了。

创新互联-云计算及IDC服务提供商,涵盖公有云、IDC机房租用、重庆服务器托管、等保安全、私有云建设等企业级互联网基础服务,沟通电话:18980820575

--------------------------------

这个简单啊,再创建跟原来一样的包名称 用replace关键字啊!

create or replace package.....

数据库在编译时,会自动查找替换,就可以将procedure加进去了!

请问我用oracle写了一个包,里面有函数和存储过程,我要怎么样能够知道我写的这个包是正确的呢?

验证下不就知道了。

如果你的过程和函数都没有语法错误就是对的。

包:包含表头和BODY信息。

将你的函数和过程头部信息放到包中定义。调用就可以直接调用包里面的定义。

比如:

包:你的包名a.spc

CREATE OR REPLACE PACKAGE a

IS

PROCEDURE CREATE_AE_OUT_FILE (p_gr_hdr_id IN varchar) ;

END;

body:

CREATE OR REPLACE PACKAGE BODY a

IS

PROCEDURE CREATE_AE_OUT_FILE(p_gr_hdr_id IN varchar)

IS

v_gr_hdr_id cosgx.cos_gr_hdr.gr_hdr_id%type;

vfile varchar2(200);

BEGIN

--你的实现逻辑

END;

END;

函数也是一样的。都需要在包里面定义

用SQLPLUS就可以自动生成的

oracle创建包?和存储过程

--创建包头

CREATE OR REPLACE PACKAGE ELS.pkg_proxy

AS

TYPE cursortype IS REF CURSOR;

-- 得到交接确认代理人数据

PROCEDURE get_proxy_info (

v_emp_no IN VARCHAR2, --当前登录用户

v_to_emp_no IN VARCHAR2, --代理人工号

v_to_emp_name IN VARCHAR2, --代理人姓名

v_proxy_date1 IN VARCHAR2, --代理开始时间: yyyy/mm/dd

v_proxy_date2 IN VARCHAR2, --代理结束时间: yyyy/mm/dd

v_from_emp_no IN VARCHAR2, --被代理人工号

v_from_emp_name IN VARCHAR2, --被代理人姓名

p_cursor OUT cursortype

);

END pkg_proxy;

--创建包头

CREATE OR REPLACE PACKAGE BODY ELS.pkg_proxy

AS

-- 得到交接确认代理人数据

PROCEDURE get_proxy_info (

v_emp_no IN VARCHAR2, --当前登录用户

v_to_emp_no IN VARCHAR2, --代理人工号

v_to_emp_name IN VARCHAR2, --代理人姓名

v_proxy_date1 IN VARCHAR2, --代理开始时间: yyyy/mm/dd

v_proxy_date2 IN VARCHAR2, --代理结束时间: yyyy/mm/dd

v_from_emp_no IN VARCHAR2, --被代理人工号

v_from_emp_name IN VARCHAR2, --被代理人姓名

p_cursor OUT cursortype

)

AS

BEGIN

OPEN p_cursor FOR

WITH v AS

(

--查找当前登录人是否为管理员

SELECT *

FROM employee

WHERE dept_id IN (

SELECT ID

FROM department

START WITH ID =

(SELECT dept_id

FROM employee

WHERE emp_no = v_emp_no

AND is_admin IN (

SELECT r_value

FROM role_conditions

WHERE r_key =

'ProxySearch')

UNION

SELECT dept_id

FROM employee_add

WHERE emp_no = v_emp_no

AND is_admin IN (

SELECT r_value

FROM role_conditions

WHERE r_key =

'ProxySearch'))

CONNECT BY PRIOR ID = parent_id)

UNION

SELECT *

FROM employee

WHERE emp_no = v_emp_no)

SELECT DISTINCT *

FROM (SELECT a.currentuser, a.toagrentuser,

DECODE (a.agent_type,

'A', '当前交接确认代理',

'B', '将来离职签核代理',

'C', '当前离职签核代理',

'D', '将来交接确认代理',

''

) agent_type,

a.from_date, a.TO_DATE,

DECODE

(a.to_date1,

'', '无',

TO_CHAR (a.TO_DATE,

'yyyy/mm/dd am hh:mi:ss'

)

) to_date1,

a.flowinfo, b.emp_cname AS currentusername,

b1.emp_cname AS toagrentusername, workitem

FROM (

--当前交接确认代理

SELECT SUBSTR

(x.currentuser,

1,

INSTR (x.currentuser, '(') - 1

) AS currentuser,

SUBSTR

(x.toagrentuser,

1,

INSTR (x.toagrentuser, '(') - 1

) AS toagrentuser,

'A' AS agent_type,

x.create_date AS from_date,

x.create_date AS TO_DATE,

NULL AS to_date1, x.workid,

NULL AS formid, y.NAME workitem,

(SELECT e.emp_no

|| '('

|| e.emp_cname

|| ')'

FROM employee e

WHERE e.emp_no = y.emp_no)

AS flowinfo

FROM currentworkagrent x,

worktransferitem_m y

WHERE x.workid = y.ID

UNION ALL

--将来交接确认代理

SELECT SUBSTR

(currentuser,

1,

INSTR (currentuser, '(') - 1

) AS currentuser,

SUBSTR

(toagrent,

1,

INSTR (toagrent, '(') - 1

) AS toagrent,

'D' AS agent_type, starttime,

endtime, endtime AS to_date1, NULL,

NULL, NULL, NULL

FROM futureagrent) a,

employee b,

employee b1

WHERE a.currentuser = b.emp_no(+)

AND a.toagrentuser = b1.emp_no(+)) a

WHERE currentuser IN (SELECT emp_no

FROM v)

AND (currentuser = v_from_emp_no OR v_from_emp_no IS NULL

)

AND ( currentusername = v_from_emp_name

OR v_from_emp_name IS NULL

)

AND (toagrentuser = v_to_emp_no OR v_to_emp_no IS NULL)

AND ( toagrentusername = v_to_emp_name

OR v_to_emp_name IS NULL

)

AND from_date =

TO_DATE (NVL (v_proxy_date2, '2099/12/31'),

'yyyy/mm/dd'

)

AND TO_DATE =

TO_DATE (NVL (v_proxy_date1, '1000/12/31'),

'yyyy/mm/dd'

)

ORDER BY a.agent_type, a.from_date DESC;

END;

END pkg_proxy;

oracle 如何在包里创建一个简单的函数和存储过程

25、包

(1)定义包头

语法:

CREATE [OR REPLACE] PACKAGE [schame_name.]包名

IS | AS

包描述

包描述:可以是变量、常量及数据类型定义和游标定义,也可以是存储过程、函数定义和参数列表返回值类型。

例:

CREATE OR REPLACE PACKAGE employeePackage

AS

--类型定义

Type empRecType is record(

Empno number(4),

Salary number

)

--变量定义

p1 varchar2(20);

type t_departmentNo table is table of dept.deptno%type

index by binary_integer;

--游标定义

Cursor order_sal retrurn EmpRecType;

--聘用员工过程

Procedure HireEmployee(p_EmpNo emp.empno%type);

End employeePackage;

例:

CREATE OR REPLACE PACKAGE scott.pkg_displayproduct

IS

procedure prc_getproductinfo

(

pid scott.product.prodid%type,

pname out scott.product.prodname%type,

ctname out scott.product.CATEGORYID%type,

dscp out scott.product.description%type

);

function fun_getstock

(

pid scott.product.prodid%type

)

return number;

END pkg_displayproduct;

(2)定义包体

语法:

CREATE OR REPLACE PACKAGE BODY [schame_name.]包名

IS | AS

包体描述;

END 包名;

包名:将要创建的包名称,该名称可以和包头所在的包名相同,也可以不同。

包体描述:游标、存储过程或者函数的定义

包体是可选的,如果在包头中没有声明任何存储过程或者函数,则包体就不存在,即使在包头有变量、游标或者类型的声明

(3)引用包中对象

BEGIN

[schame_name.][包名.]对象名;

END;


网站栏目:oracle包如何写 oracle 包 调用
网页地址:http://chengdu.cdxwcx.cn/article/hgocdh.html