错误(30,11):PLS-00103:遇到符号更新错误
Posted
技术标签:
【中文标题】错误(30,11):PLS-00103:遇到符号更新错误【英文标题】:Error(30,11): PLS-00103: Encountered the symbol UPDATE error 【发布时间】:2017-04-12 13:45:32 【问题描述】:在 SP 下创建时,我收到错误
错误(30,11):PLS-00103:在预期以下情况之一时遇到符号“UPDATE”:(-+ case mod new not null select with continue avg count current exists max min prior sql stddev sum variance execute forall 合并时间时间戳间隔日期管道
这是我的 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;
【问题讨论】:
您是要查询数据还是更改数据?您的光标应该是 SELECT,而不是更新。或者,它不应该是一个光标。 是哪一个;甲骨文还是 mysql? @thatjeffsmith:我只想用那个状态更新表格,我不想选择或类似的东西 您在最后一个 % 周围缺少一个单引号,您应该查看 RETURNING INTO 子句,看看它是否涵盖了您想要返回的内容。 @BriteSponge - 不要告诉 Jeff 你使用 TOAD :) 【参考方案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 以限制结果集。
【讨论】:
以上是关于错误(30,11):PLS-00103:遇到符号更新错误的主要内容,如果未能解决你的问题,请参考以下文章
错误:PLS-00103:在预期以下情况之一时遇到符号“)”
PL/SQL 函数错误 - PLS-00103:遇到符号“IS”