Oracle 存储过程-PL/SQL-插入错误

Oracle 存储过程-PL/SQL-插入错误,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我试图创建一个存储过程,将单行插入表中。参数 传递给此过程的数据将被插入到表中 CREATE OR REPLACE PROCEDURE proc_sal( ename IN VARCHAR2, basic IN NUMBER, hra IN NUMBER, doj IN VARCHAR2, gender IN VARCHAR2, deptcode IN VARCHAR2, err OUT NUMBER, emsg OUT VARCHAR2) IS eid VARC

我试图创建一个存储过程,将单行插入表中。参数 传递给此过程的数据将被插入到表中

CREATE OR REPLACE PROCEDURE proc_sal(
    ename IN VARCHAR2, basic IN NUMBER,
    hra IN NUMBER, doj IN VARCHAR2, gender IN VARCHAR2,
    deptcode IN VARCHAR2, err OUT NUMBER, emsg OUT VARCHAR2)
IS
    eid VARCHAR2(30);
    no NUMBER;
BEGIN
   SELECT salseq.NEXTVAL INTO no FROM dual;

   eid := CONCAT(deptcode,LPAD(no,5,'0'));

   INSERT INTO salary_det
   VALUES('eid', 'ename', basic, hra, 'doj', 'gender');

   err := 1;
EXCEPTION
  WHEN OTHERS THEN
    err := SQLCODE;
    emsg := SQLERRM;
    DBMS_OUTPUT.PUT_LINE(emsg);
END;
通过匿名块调用此过程:

DECLARE
   errcd NUMBER;
   errmsg VARCHAR2(200);
BEGIN
   proc_sal('&empname',&basic, &hra,'&date','&gender','&deptcode', errcd, errmsg);
   DBMS_OUTPUT.PUT_LINE(errcd||' '||errmsg);
END;
下面是我收到的输出:

   Enter value for empname: Mohan
   Enter value for basic: 56000
   Enter value for hra: 560
   Enter value for date: 12-JUL-12
   Enter value for gender: M
   Enter value for deptcode: EA
   old   5:  proc_sal('&empname',&basic, &hra, '&date','&gender','&deptcode', errcd,  errmsg);
   new   5:  proc_sal('Mohan',56000, 560, '12-JUL-12','M','EA', errcd, errmsg);

   ORA-01858: a non-numeric character was found where a numeric was expected       
   -1858 ORA-01858: a non-numeric character was found where a numeric was expected 

   PL/SQL procedure successfully completed.

当尝试单独运行时,其他所有操作都按程序运行。在sql中尝试插入时发生。没有列名称或值不匹配,仍然无法找出错误所在。

问题是您将变量名称括在撇号中,请尝试以下操作:

CREATE OR REPLACE PROCEDURE proc_sal(
    ename IN VARCHAR2, basic IN NUMBER,
    hra IN NUMBER, doj IN VARCHAR2, gender IN VARCHAR2,
    deptcode IN VARCHAR2, err OUT NUMBER, emsg OUT VARCHAR2)
IS
  eid VARCHAR2(30);
  no NUMBER;
BEGIN
  SELECT salseq.NEXTVAL INTO no FROM dual;

  eid := CONCAT(deptcode,LPAD(no,5,'0'));

  INSERT INTO salary_det
    VALUES(eid, ename, basic, hra, doj, gender);

  err := 1;
EXCEPTION
  WHEN OTHERS THEN
    err := SQLCODE;
    emsg := SQLERRM;
    DBMS_OUTPUT.PUT_LINE(emsg);
END;

问题是您将变量的名称用撇号括起来,请尝试以下操作:

CREATE OR REPLACE PROCEDURE proc_sal(
    ename IN VARCHAR2, basic IN NUMBER,
    hra IN NUMBER, doj IN VARCHAR2, gender IN VARCHAR2,
    deptcode IN VARCHAR2, err OUT NUMBER, emsg OUT VARCHAR2)
IS
  eid VARCHAR2(30);
  no NUMBER;
BEGIN
  SELECT salseq.NEXTVAL INTO no FROM dual;

  eid := CONCAT(deptcode,LPAD(no,5,'0'));

  INSERT INTO salary_det
    VALUES(eid, ename, basic, hra, doj, gender);

  err := 1;
EXCEPTION
  WHEN OTHERS THEN
    err := SQLCODE;
    emsg := SQLERRM;
    DBMS_OUTPUT.PUT_LINE(emsg);
END;

欢迎来到SO。表的定义是什么?insert命令试图在此处插入字符串值:
值('eid','ename',basic,hra,'doj','SENDER')-“eid”、“ename”、“doj”和“SEXT”是字符串文字,因为它们用撇号括起来。欢迎使用SO。表的定义是什么?insert命令试图在此处插入字符串值:
值('eid','ename',basic,hra,'doj','SENDER')-“eid”、“ename”、“doj”和“SEXT”是字符串文字,因为它们用撇号括起来。