在SP下创建时,我收到错误
错误(30,11):PLS-00103:遇到符号" UPDATE"当期待以下之一时:( - + case mod new not null select with continue avg count current exists max min before sql stddev sum variance execute forall merge time timestamp interval date pipe
这是我的SP
Procedure Update_Link_Details (
P_UDLINKID NVARCHAR2,
P_FOLDERSTRUCTURE NVARCHAR2,
TBL_UPD OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN TBL_UPD FOR
Update Tb_Link_Print
set status='Start'
where LINKPRINTID= P_UDLINKID
and upper(FOLDERSTRUCTURE) LIKE '%' || upper(P_FOLDERSTRUCTURE) || %';
NULL;
END Update_Link_Details;
答案 0 :(得分:1)
"我只想更新具有该状态的表格...同时我想要返回更新的记录"
这是两件事,所以它是两个陈述:
Procedure Update_Link_Details (
P_UDLINKID NVARCHAR2,
P_FOLDERSTRUCTURE NVARCHAR2,
TBL_UPD OUT SYS_REFCURSOR
)
AS
BEGIN
Update Tb_Link_Print
set status='Start'
where LINKPRINTID= P_UDLINKID
and upper(FOLDERSTRUCTURE) LIKE '%' || upper(P_FOLDERSTRUCTURE) || '%';
OPEN TBL_UPD FOR
select * from Tb_Link_Print
where LINKPRINTID= P_UDLINKID
and upper(FOLDERSTRUCTURE) LIKE '%' || upper(P_FOLDERSTRUCTURE) || '%';
END Update_Link_Details;
这有点笨重。这是一个设计复制的版本:
Procedure Update_Link_Details (
P_UDLINKID NVARCHAR2,
P_FOLDERSTRUCTURE NVARCHAR2,
TBL_UPD OUT SYS_REFCURSOR
)
AS
upd_rowids sys.dbms_debug.vc2coll;
BEGIN
Update Tb_Link_Print
set status='Start'
where LINKPRINTID= P_UDLINKID
and upper(FOLDERSTRUCTURE) LIKE '%' || upper(P_FOLDERSTRUCTURE) || '%'
returning rowidtochar(rowid) bulk collect into upd_rowids;
OPEN TBL_UPD FOR
select p.*
from Tb_Link_Print p
join table(upd_rowids) u
on p.rowid = chartorowid(u.column_value)
;
END Update_Link_Details;
它使用RETURNING子句捕获受影响行的ROWID,然后使用这些ROWID打开Ref Cursor来限制结果集。