在存储过程或函数里调用oracle包的话,首先要有执行这个包的权限;如果包属于其他的用户(不是系统包),调用时:用户名.包名.存储过程(参数)名或者
变量:=用户名.包名.函数(参数);因为函数有返回值,变量类型要跟函数返回值的类型一致.
在command
下调用的话:exec
用户名.包名.存储过程名(参数);select
用户名.包名.函数名(参数)
from
dual;就可以了.包属于当期用户可以不写用户名.
先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
BEGIN
END;
END pkg_test;
如果你使用界面的话,就直接双击图标,如果使用脚本的话,就从开始程序里打开Oracle plus
,这两者都要保证你的服务是否启动,一般启动最后两个就可以
①cmd进入命令行 lsnrctl start 启动监听服务,看出现什么错误
如果没有错误,察看数据库是否可以正常进行连接
pl/sql里,select
语句必须接into
,不接into那就得返回一个游标出去,比如
create
or
replace
package
test_package
is
procedure
query_test(num
number,po_cursor
out
sys_refcursor);
end
test_package;
body
sys_refcursor)
begin
select
unitname,tradetype,workernumber
test
where
income=num;
query_test;
一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀.
①下面的语句用来查询哪些对象被锁:
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
【注】以上两步,可以通过Oracle的管理控制台来执行.
select spid, osuser, s.program
from v$session s,v$process p
①.)在unix上,用root身份执行命令:
orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名
包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成
①创建包
--创建一个包sp_package
create?package?sp_package?is
--声明该包有一个过程和函数,(没有实现)
end;
--创建包体(用于实现已经声明的函数和过程)
create?package?body?sp_package?is
UPDATE?emp
SET?sal?=?newsal
WHERE?ename?=?name;
return?number?is
annual_salary?number;
INTO?annual_salary
FROM?emp
RETURN?annual_salary;
--调用包中的内容
exec?sp_package.update_sal('name',number);