创建了这样一张表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
NOCYCLECREATE 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;

解决方案 »

  1.   

    这样不就可以了?何必在列名前面添加前缀?
    INSERT INTO TESTTBL (Id,i_Pihao,s_Cid) VALUES(V_ID,I_PIHAO,S_CID);
      

  2.   

    不过你这里真心不该这么麻烦的,完全可以一步到位的事情你却要分两步走,哎,参考这样的写法: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) 
      SELECT testTbl_SEQUENCE.Nextval,I_PIHAO,S_CID FROM DUAL;  SELECT testTbl_SEQUENCE.CURRVAL INTO V_ID FROM DUAL;
    END P_TBLTEST;
      

  3.   

    这样写还可以一步到位:
    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;