网站首页 > 文章中心 > 其它

oracle中怎么创建包

作者:小编 更新时间:2023-09-29 19:33:19 浏览量:288人看过

oracle创建包?和存储过程

--创建包头

CREATE OR REPLACE PACKAGE ELS.pkg_proxy

AS

TYPE cursortype IS REF CURSOR;

oracle中怎么创建包-图1

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

PROCEDURE get_proxy_info (

p_cursor OUT cursortype

);

END pkg_proxy;

CREATE OR REPLACE PACKAGE BODY ELS.pkg_proxy

)

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

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

'ProxySearch'))

CONNECT BY PRIOR ID = parent_id)

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,

①.,

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

) AS currentuser,

SUBSTR

(x.toagrentuser,

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

--将来交接确认代理

(currentuser,

INSTR (currentuser, '(') - 1

(toagrent,

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 =

'yyyy/mm/dd'

AND TO_DATE =

ORDER BY a.agent_type, a.from_date DESC;

END;

如何创建自己的InstantClient包

IC介绍

许多人正在使用Oracle Instant Client,它提供一个部署基于OCI、OCCI、JDBC OCI应用容易和快速的方法.

通过添加更多的工具,Instant Client可以变成一个更加强大的工具,如下:

① tnsping

这样做的主要优点是:

① 安装是一件轻而易举的事情,只要解压即可完成.

比较一个完整的Oracle安装需要大量的磁盘空间,而且还涉及到SA.

IC需求

IC安装

$mkdir /home/hadoop/oracle

上传所有压缩包或至少basic和sqlplus两个包到你账号的根目录下oracle中.

解压到当前目录下完成安装.

$ cd /home/hadoop/oracle

IC配置

配置下面的环境变量到你的Shell配置文件中.

$ vi ~/.bashrc

跳到文件的末尾,添加下面这些环境变量:

exportORACLE_HOME=$ORACLE_IC_HOME

exportTNS_ADMIN=$ORACLE_IC_HOME

exportPATH=$PATH:$ORACLE_IC_HOME

exportLD_LIBRARY_PATH=$ORACLE_IC_HOME

$ source ~/. bashrc

或 $ . ~/.bashrc

注:如果需要让所有用户都能使用,需要把上面的配置添加/etc/profile中.

在$ORACLE_IC_HOME目录下创建一个tnsnames.ora文件:

SQL*Plus

Connected to:

With the Partitioning, OLAP, Data Miningand Real Application Testing options

SQL

ERROR:

对于这种问题,排除添加的配置格式错误后.可能原因是读取的tnsnames.ora路径根本就不是$ORACLE_HOME/network/admin下.

注:tnsnames.ora文件的查找路径顺序为:

$HOME = $TNS_ADMIN = /etc =$ORACLE_HOME/network/admin/.

Tnsping

从安装Oracle的服务器上拷贝tnsping过来,执行命令:

现在让在IC安装服务器上尝试运行下它:

$ tnsping ora

$ mkdir -p network/mesg

$ cd network/mesg/

现在从安装Oracle服务上拷贝tnsus.msb文件到该目录中:

让我们再尝试一次tnsping,结果如下:

Used parameter files:

Used TNSNAMES adapter to resolve the alias

OK (0 msec)

Sqlldr

本节将添加另外一个工具sqlldr.

尝试运行它:

$ sqlldr

$ mkdir -p rdbms/mesg

$ cd rdbms/mesg

把ORACLE安装目录下rdmsb/mesg/ulus.msb拷贝到当前目录.

现在,让我们再次尝试运行它.

Usage: SQLLDR keyword=value[,keyword=value,...]

Valid Keywords:

Exp/imp

从安装Oracle服务器上拷贝二进制文件过来.

尝试运行imp和exp,结果如下:

$ imp

Invalid format of Import utility name

Verify that ORACLE_HOME is properly set

Import terminated unsuccessfully

IMP-00000: Message 0 not found; No messagefile for product=RDBMS, facility=IMP

$ exp

Invalid format of Export utility name

Export terminated unsuccessfully

EXP-00000: Message 0 not found; No messagefile for product=RDBMS, facility=EXP

再从安装Oracle服务器上拷贝rdbms/mesg下的expus.msb和ipus.msb过来.

$ cd rdbms/mesg/

再次运行imp/exp工具错误提示消失,可以正常运行.

Tkprof

现在我们继续添加我最喜欢的工具tkprof.

$ mkdir -p oracore/mesg/

$ cd oracore/mesg/

使用示例:

$ tkprof test.trc test.out

Instant Client Bundle

正如你所看到的,打包成的instant client带有tnsping,sqlldr, exp/imp,tkprof工具,这让IC更加的功能强大.

安装自定义的IC包步骤如下:

① 上传到服务器上解压缩

export ORACLE_HOME=$ORACLE_IC_HOME

export TNS_ADMIN=$ORACLE_IC_HOME

export PATH=$PATH:$ORACLE_IC_HOME

export LD_LIBRARY_PATH=$ORACLE_IC_HOME

$ vi $ORACLE_IC_HOME/tnsnames.ora

安装完成,现在就可以使用Instant Client中的工具啦!

oracle创建包编译报错

先要创建package description 才能创建package body

SQL create or replace package my_package is

Package created.

SQL show error

No errors.

请问Oracle中如何在通过创建一个package,然后在package中创建procedure的语法是怎么样的啊

先create package,在里面声明procedure

然后再create package body,在package body里面编写procedure的代码即可(相当于create procedure).

包里没有create procedure

示例如下:

CREATE OR REPLACE PACKAGE pkg_test IS

...

END test;

/

CREATE OR REPLACE PACKAGE BODY pkg_test IS

END pkg_test;

oracle 创建一个程序包规范,名称为package_salary_details,包含一个过程和一个函数.

这是第一问

v_workoingdays salary_details.workingdays%type;

v_salary salary_details.salary%type;

begin

select salary into v_salary from salary_details where EMPCODE = v_EMPCODE;

dbms_output.put_line(v_salary);

exception

when no_data_found then

dbms_output.put_line('未找到相应员工');

end;

proc_SALARY('1');

以上就是土嘎嘎小编为大家整理的oracle中怎么创建包相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章