oracle如何声明包体 oracle怎么声明标识符

如何建立oracle包,如何调用包的过程或是函数包用于在逻辑上组合过程和函数 , 它由包规范和包体两部分组成
1.创建包
--创建一个包sp_package
create package sp_package is
--声明该包有一个过程和函数 , (没有实现)
procedure update_sal(name varchar2,newsal number);
function annual_nicome(name varchar2) return number;
end;
--创建包体(用于实现已经声明的函数和过程)
create package body sp_package is
procedure update_sal(name varchar2,newsal number)
is
BEGIN
UPDATE emp
SETsal = newsal
WHEREename = name;
END;
function annual_income(name varchar2)
return number is
annual_salary number;
BEGIN
SELECT sal * 12Nvl(comm,0)
INTOannual_salary
FROMemp
WHEREename = name;
RETURN annual_salary;
END;
end;
--调用包中的内容
exec sp_package.update_sal('name',number);
请问如何在oracle 的package 包里面声明和使用带游标记录类型的函数?oracle如何声明包体你oracle如何声明包体的这个想法(在包体oracle如何声明包体的函数/过程里面使用包体定义的游标记录类型作为参数)是不能实现的.
可以把函数F_do_sth_with_C中需要的参数在包头进行定义. 如果这个参数的类型是由包体的函数/过程动态决定的, 那么你要另想一些变通的办法.
oracle 如何在包里创建一个简单的函数和存储过程25、包
(1)定义包头
语法:
CREATE [OR REPLACE] PACKAGE [schame_name.]包名
IS | AS
【oracle如何声明包体 oracle怎么声明标识符】包描述
包描述:可以是变量、常量及数据类型定义和游标定义oracle如何声明包体 , 也可以是存储过程、函数定义和参数列表返回值类型 。
例:
CREATEORREPLACEPACKAGEemployeePackage
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;
例:
CREATEORREPLACEPACKAGEscott.pkg_displayproduct
IS
procedure prc_getproductinfo
(
pidscott.product.prodid%type,
pnameout scott.product.prodname%type,
ctnameout scott.product.CATEGORYID%type,
dscpoutscott.product.description%type
);
function fun_getstock
(
pidscott.product.prodid%type
)
returnnumber;
ENDpkg_displayproduct;
(2)定义包体
语法:
CREATEORREPLACEPACKAGEBODY [schame_name.]包名
IS | AS
包体描述oracle如何声明包体;
END包名;
包名:将要创建oracle如何声明包体的包名称 , 该名称可以和包头所在的包名相同 , 也可以不同 。
包体描述:游标、存储过程或者函数的定义
包体是可选的 , 如果在包头中没有声明任何存储过程或者函数,则包体就不存在,即使在包头有变量、游标或者类型的声明
(3)引用包中对象
BEGIN
[schame_name.][包名.]对象名;
END;
c#怎么执行sql脚本在oracle中创建包和包体调用方式如下:
using (var conn = new OracleConnection(oradb))
using (var cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "PKG_NAME.INSERT_FUNC";
cmd.BindByName = true;
cmd.Parameters.Add("Return_Value", OracleDbType.Int16,
ParameterDirection.ReturnValue);
cmd.Parameters.Add("i_description", OracleDbType.Varchar2, 1000,
promotionEventSetupDetails.PromotionDescription,
ParameterDirection.Input);
cmd.Parameters.Add("i_theme", OracleDbType.Varchar2, 80,
promotionEventSetupDetails.PromotionTheme,
ParameterDirection.Input);
cmd.Parameters.Add("o_id", OracleDbType.Varchar2,
ParameterDirection.Output);
cmd.Parameters.Add("o_error_msg", OracleDbType.Varchar2,
ParameterDirection.Output);
conn.Open();
using (var dr = cmd.ExecuteReader())
{
// 业务代码
}
}
请问Oracle中如何在通过创建一个package,然后在package中创建procedure的语法是怎么样的啊先create package,在里面声明procedure
然后再create package body,在package body里面编写procedure的代码即可(相当于create procedure) 。
包里没有create procedure
示例如下:
CREATE OR REPLACE PACKAGE pkg_test IS
PROCEDURE pro_test(V_OLD IN VARCHAR2,V_NEW IN VARCHAR2);
...
END test;
/
CREATE OR REPLACE PACKAGE BODY pkg_test IS
...
PROCEDURE pro_test(V_OLD IN VARCHAR2,V_NEW IN VARCHAR2) IS
BEGIN
...
END;
...
END pkg_test;
求看看这个ORACLE包体编译的时候提示必须声明标识符emp,我该怎么声明它呀emp表是oracle安装包里的example,它属于scott , 确认一下这个表是否存在:
select owner,object_type from dba_objects where object_name='EMP';
如果这个表存在,出现这个错误,有以下几个原因:
1.这个包的所有者没有对emp表的select权限
2.虽然有权限,但在引用它的时候必需明确这个表的schema , 也就是上面那个查询的owner,你应该用scott.emp
关于oracle如何声明包体和oracle怎么声明标识符的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读