想通过hibernate save时,如果某属性是null,oracle自动把这个null返回成'N',也就是用到了存储过程procedure。
通过oracle文档我写了一个简单的procedure
CREATE OR REPLACE PROCEDURE "SCOTT"."AUTHOR_ENABLE_DEFAULT" (enable_in in char,
enable_return out char) AS
begin
select nvl2(enable_in,'Y','N') into enable_return from dual;
end;
enable_in是输入的变量,enable_return是返回的变量,注意调用该存储过程2个参数都要写,nvl2函数来判断enable_in如果不为空返回'Y',空返回'N';
如果你创建procedure出错,用
SHOW ERRORS PROCEDURE procedure_name;
查看错误
在用hibernate调用前,最好先用exec 执行下面,来测试
declare
n char;
m varchar(20);
begin
execute immediate 'begin author_enable_default(:a,:b); end;' using 's',out m;
dbms_output.put_line(m);
end;
这里面涉及到 占位符(:a,:b),using execute immediate 等知识,具体参考文档