Hinzufügen/Aktualisieren der gespeicherten Prozedur in Oracle einfügen einer null oder leeren Feld

Ich bin neu in Oracle verwenden, und ich bin versucht, erstellen Sie eine add/insert gespeicherte Prozedur für eine Tabelle. Die PROD_CD und PLAN_CD Felder in meiner Tabelle kann kein Wert (leer oder null)
Können Sie bitte überprüfen mein code und lassen Sie mich wissen, was ich falsch mache?

Tabelle definition:

CREATE TABLE DCWEB.USER_PLAN_PREFERENCE
(
  USERID        VARCHAR2(40) NOT NULL,
  PROD_CD       VARCHAR2(9)  NULL,
  PLAN_CD       VARCHAR2(9)  NULL,
  STATE_LST     VARCHAR2(2)  NOT NULL,
  STATE_NM      VARCHAR2(40) NOT NULL,
  LST_UPDATE_TS TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP NOT NULL
);

ALTER TABLE DCWEB.USER_PLAN_PREFERENCE
  ADD CONSTRAINT USER_PLAN_PREFERENCE_XPK PRIMARY KEY (USERID, PROD_CD, PLAN_CD);

-- Grant/Revoke object privileges 
grant select, insert, update, delete on DCWEB.USER_PLAN_PREFERENCE to HIGGIB1;

Gespeicherte Prozedur Definition:

  procedure setUserPlanPref (
    userid in varchar2,
    prod_cd in varchar2,
    plan_cd in varchar2,
    state_lst in varchar2,
    state_nm in varchar2
  )
  is
    currentTimestamp timestamp := current_timestamp;
  begin
       insert into user_plan_preference (userid, prod_cd, plan_cd, state_lst, state_nm, lst_update_ts)
       values (upper(userid), upper(prod_cd), upper(plan_cd), upper(state_lst), upper(state_nm), currentTimestamp);
       commit;
       exception
       when dup_val_on_index then
         begin
          update user_plan_preference up set
            up.userid = upper(userid),
            up.prod_cd = upper(prod_cd),
            up.plan_cd = upper(plan_cd),
            up.state_lst = upper(state_lst),
            up.state_nm = upper(state_nm),
            up.lst_update_ts = currentTimestamp
          where up.userid = upper(userid)
                and up.prod_cd = upper(prod_cd)
                and up.plan_cd = upper(plan_cd);
          commit;
          exception 
          when others then
            rollback;
        end;
      when others then
        rollback;
    end;
  end;

EINGABEDATEN

Ich bin nicht in der Lage einen Datensatz einfügen, aufrufen der gespeicherten Prozedur mit den Werten:
DCWEB4578, , 2P, CA, CALIFORNIA
aber wenn ich auf den string "NULL", wird der insert erfolgreich war.
Wenn ich versuche, rufen Sie die gespeicherte Prozedur zum aktualisieren der eingefügten Datensatz mit
Werte:
DCWEB4578, "NULL", 2P, CO, COLORODO
das update wird nicht passieren, da ich immer noch den ursprünglichen Datensatz in der Tabelle.

InformationsquelleAutor user1433167 | 2012-06-03
Schreibe einen Kommentar