在select语句中执行存储过程错误

时间:2014-03-07 08:46:01

标签: oracle11g

我有这样的程序,

create or replace
PROCEDURE SP_PROOF
( proof_id IN NUMBER
, Type1 IN VARCHAR2
, StatementType IN NUMBER
, Resultset OUT NUMBER
) AS
BEGIN
  IF StatementType = 1 Then

INSERT INTO ID_Proof (proofid,Id_type) 
VALUES (proof_id, Type1); 
ELSIF StatementType=2 THEN
SELECT  proofid,Id_type Into Resultset FROM ID_Proof;
ELSIF StatementType=3 THEN
UPDATE ID_Proof SET Id_type =  Type1 WHERE proofid = proof_id;

ELSIF StatementType=4 THEN
 DELETE FROM ID_Proof WHERE proofid = proof_id;

 end if;
 end;

我得到这样的错误, 错误(14,1):PL / SQL:忽略SQL语句 错误(14,64):PL / SQL:ORA-00947:值不够

请帮我纠正错误。

1 个答案:

答案 0 :(得分:0)

第14行是:

SELECT  proofid,Id_type Into Resultset FROM ID_Proof;

您正在选择两个值proofidId_type到单个标量变量Resultset中。但是你也没有过滤器,所以即使你改变它来选择单个值,如果表中有多行,你会得到太多行错误(如果表中没有数据,则会发现是空的。

目前尚不清楚你想要发生什么;也许你想要select id_type into resultset from id_proof,但是参数id_type是一个字符串 - 所以选择一个数字变量也可能会失败。或者您可能希望指定类型的所有ID,在这种情况下,result set的类型需要是表类型或引用游标。

单独的程序和功能也可能更清晰。