十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
你放在sql文件中,oracle会认为所有的脚本都是一个脚本块,除非碰到执行符号 /
创新互联专业为企业提供大城网站建设、大城做网站、大城网站设计、大城网站制作等企业网站建设、网页设计与制作、大城企业网站模板建站服务,十余年大城做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
所以,修改为以下脚本后将可以执行。
create or replace package pkg_sfdc_registration as
emp_id number(10);
procedure hire_employee(e_id out number);
end pkg_sfdc_registration;
/ --- 这里加个符号 /
create or replace package body pkg_sfdc_registration as
procedure hire_employee(e_id out number) is
begin
select 1 into e_id from dual;
end hire_employee;
end pkg_sfdc_registration;
/ --- 这里加个符号 /
包头
create or replace package package_name is
prcedure p1;
prcedure p2(v1 in char, v2 in date);
end package_name;
包体
create or replace package body package_name is
prcedure p1 is
begin
--代码省略
end p1;
prcedure p2(v1 in char, v2 in date) is
begin
--代码省略
end p2;
end package_name;
这是第一问
create or replace procedure proc_SALARY(v_EMPCODE varchar2) Is
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;
v_salary = v_salary * 0.95;
dbms_output.put_line(v_salary);
exception
when no_data_found then
dbms_output.put_line('未找到相应员工');
end;
begin
proc_SALARY('1');
end;
先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;
你这题问的是什么意思,是想把存储过程定义到package中吗,创建package是需要创建包头和包体的,包头类似于JAVA中的接口,只有函数(JAVA中叫方法)的定义而没有具体的实现,创建格式如下:
create or replace package user.pkg_aaa is
/*包里面可以定义多个存储过程(procedure),自定义函数(function),自定义类型(type);*/
--传入俩个字符类型的参数,返回一个字符类型的值的函数
function fun_bbb(param1 in varchar2,param2 in varchar2) return varchar2;
--定义返回游标类型
type mycursor is ref cursor;
--传入一个字符类型参数,返回一个number类型的存储过程
procedure proc_ccc(param1 in varchar2,param2 out number);
end user.pkg_aaa;
以上是包头的定义,下面为包体(因包体涉及自己的实现方式,故这里简写),如下:
create or replace package body user.pkg_aaa is
--这里function就不写了
procedure proc_ccc(param1 in varchar2,param2 out number) is
--定义变量
begin
--实现步骤
end proc_ccc;
end user.pkg_aaa;
希望楼主采纳,如有不解,详问
调用方式如下:
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())
{
// 业务代码
}
}