我有一个包含列id,名称和密码的表。
我也做了一个SQL PACKAGE看起来像(我省略了Package header,因为我更强调我的观点):
create or replace PACKAGE BODY MEMBER
is
FUNCTION createWith(v_id, v_name, v_password)
return Number
is
BEGIN
Insert into tbl_member(id, name, password)
Values(v_id, v_name, v_password);
return SQL%ROWCOUNT ;
END createWith;
但是,由于name列不是必需的列(没有' not null'选项),我有时只传递两个参数(id和密码)。据我所知,如果我发送的参数数量和函数中声明的参数数量不匹配,那么它应该是错误的类型或数字异常',但它运作良好。
我想知道它是如何自动处理空参数的。 是否有人知道有用的链接或其逻辑,解释这一点。
// ============================================= ================
这是第一次添加
首先,我想我的问题不够明确。
所以我要再试一次。
步骤0,创建一个没有约束和选项的表。(也没有默认值)
第1步,这是函数头。
function creatWith(v_id in varchar2, v_name in varchar2, v_password in varchar2) return number;
第2步,我在java中调用此包(它是基于Springframework的Web应用程序。但是,我的公司将其称为“解决方案”,因此我无法打开源代码)。 但是,使用此Function映射的方法只有两个参数。像
public void insert(String id, String pw);
第3步,这是问题所在。它发生错误与否?在我的情况下,它的工作原理。但我不知道我的公司解决方案句柄或Oracle DB会自动执行此操作。
如果Oracle确实有,我可以获得一些此政策的文件吗?
答案 0 :(得分:0)
似乎Oracle尝试使用" NULL"空参数的值。将字段更改为NOT NULL,它将开始返回错误。
尝试声明DEFAULT属性,例如:
FUNCTION createWith(
v_id IN NUMBER,
v_name IN VARCHAR2 DEFAULT 'empty',
v_password IN VARCHAR2)
有了这个,它就会写出空的'当参数为空时,为Name字段。
答案 1 :(得分:0)
对于Oracle数据库,在函数定义中声明DEFAULT
值。
FUNCTION createWith(v_id IN NUMBER,
v_name IN VARCHAR2 DEFAULT 'N.A.',
v_password IN VARCHAR2);