如何处理SQL PACKAGE中的参数?

时间:2014-08-22 00:20:36

标签: sql oracle plsql

我有一个包含列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确实有,我可以获得一些此政策的文件吗?

2 个答案:

答案 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);