我写了一个存储过程,其中我只给出输入参数以将记录插入到四个表中,但我无法找到为什么抛出错误,尽管我传递的是正确的数.ANY建议将输入参数传递给存储过程在oracle中时出错
也,购表人是从员工表和购买表引用EID的外键引用从产品表PID的外键 ANS采购表是从客户表中引用CID的外键, 后我将参数传递给存储过程,而插入我想通过键盘输入...
s tored过程如下:
PROCEDURE add_purchase(e_id IN char,p_id IN char,
c_id IN char,pur_qty IN NUMBER) AS
Total_Price NUMBER(7,2);
ENAME VARCHAR2(15 BYTE);
TELEPHONE# CHAR(12 BYTE);
CNAME VARCHAR2(15 BYTE);
VISITS_MADE NUMBER(4,0);
PNAME VARCHAR2(15 BYTE);
QOH NUMBER(5,0);
QOH_THRESHOLD NUMBER(4,0);
ORIGINAL_PRICE NUMBER(6,2);
DISCNT_RATE NUMBER(3,2);
BEGIN
INSERT INTO employees (EID,ENAME,TELEPHONE#)
values (e_id,'&ENAME','&TELEPHONE');
INSERT INTO CUSTOMERS (CID,CNAME,TELEPHONE#,VISITS_MADE,LAST_VISIT_DATE)
VALUES (c_id,'&CNAME','&TELEPHONE','&VISITS_MADE',SYSDATE);
INSERT INTO PRODUCTS(PID,PNAME,QOH,QOH_THRESHOLD,ORIGINAL_PRICE,DISCNT_RATE)
VALUES (p_id,'&PNAME','&QOH','&QOH_THRESHOLD','&ORIGINAL_PRICE','&DISCNT_RATE');
select (pro.ORIGINAL_PRICE * (1 - pro.DISCNT_RATE)) into Total_Price
from purchases pur,products pro where pro.pid=pur.pid;
INSERT INTO purchases(EID,PID,CID,QTY,PTIME,Total_Price)VALUES
(e_id,p_id,c_id,pur_qty,sysdate,Total_Price);
EXCEPTION
WHEN OTHERS THEN
raise;
END add_purchase;
执行:
EXEC add_purchase ('e11','p011','c011',100);
错误:
ORA-01722: invalid number
ORA-06512: at line 1
01722. 00000 - "invalid number"
*Cause: The specified number was invalid.
*Action: Specify a valid number.
是否可能是第一个插入的值子句中的e_id预期为数字?我不记得任何从char到int的自动升级或sql中的数字。自从我使用它以来一直很年轻,但是oracle在文档中对每个ora - ####数字的含义都非常清楚。 – joshp
@joshp:e_id,p_id,c_id都是字符类型 – John
您认为'&ORIGINAL_PRICE'将在存储过程中起作用吗?我将它看作SQLPlus替换变量,它在存储过程中不起作用,但仅在具有接受语句的批处理中起作用。我没有甲骨文试用它(教程点?),但是'&ORIGINAL_PRICE'真的是一个有效的NUMBER(6,2)?不看这种方式给我。我会尝试的第一件事就是从sp中取出这些替换,并将它们放入您运行的脚本中调用sp。但也许我错过了这一点。这对我来说大约20岁。 – joshp