日期:2014-05-18  浏览次数:20732 次

oracel新手求助
创建了这样一张表

create table testTbl(
ID INTEGER PRIMARY KEY NOT NULL,
I_PIHAO VARCHAR2(50) UNIQUE,
S_CID VARCHAR2(50)
)

和函数  

CREATE SEQUENCE testTbl_SEQUENCE
INCREMENT BY 1
NOCACHE  
NOMAXVALUE
NOCYCLE

CREATE OR REPLACE FUNCTION FUNC_testTBL return INTEGER is  
begin
  V_ID INTEGER;
  SELECT testTbl_SEQUENCE.Nextval INTO V_ID FROM DUAL;
  RETURN (V_ID);
end testTBL;



然后在执行一下存储过程 一直报错  

列在此处不允许
和无效SQL语句两个错误
不知是什么原因,求高手相助


CREATE OR REPLACE PROCEDURAL P_TBLTEST
(
  V_ID OUT integer,
  I_PIHAO VARCHAR2,
  S_CID VARCHAR2
)
IS  
BEGIN
  V_ID:=FUNC_testTBL();
  INSERT INTO TESTTBL (testTbl.Id,testTbl.i_Pihao,testTbl.s_Cid) VALUES(V_ID,I_PIHAO,S_CID);
END P_TBLTEST;

------解决方案--------------------
这样写还可以一步到位:
SQL code
CREATE OR REPLACE PROCEDURAL P_TBLTEST
(
  V_ID OUT integer,
  I_PIHAO VARCHAR2,
  S_CID VARCHAR2
)
IS   
BEGIN
  INSERT INTO TESTTBL (Id,i_Pihao,s_Cid) 
  VALUES(testTbl_SEQUENCE.Nextval,I_PIHAO,S_CID) RETURNING ID INTO V_ID;
END P_TBLTEST;