oracel新手求助

zq281660880 2012-06-15 12:39:40
创建了这样一张表

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;
...全文
76 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2012-06-15
  • 打赏
  • 举报
回复
这样写还可以一步到位:
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;
qldsrx 2012-06-15
  • 打赏
  • 举报
回复
不过你这里真心不该这么麻烦的,完全可以一步到位的事情你却要分两步走,哎,参考这样的写法:

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;
熙风 2012-06-15
  • 打赏
  • 举报
回复
不知楼主在哪里学的那样写法
qldsrx 2012-06-15
  • 打赏
  • 举报
回复
这样不就可以了?何必在列名前面添加前缀?
INSERT INTO TESTTBL (Id,i_Pihao,s_Cid) VALUES(V_ID,I_PIHAO,S_CID);

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧