--创建包头
CREATE OR REPLACE PACKAGE ELS.pkg_proxy
AS
TYPE cursortype IS REF CURSOR;
-- 得到交接确认代理人数据
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;
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中的工具啦!
先要创建package description 才能创建package body
SQL create or replace package my_package is
Package created.
SQL show error
No errors.
先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;
这是第一问
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中怎么创建包相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!