【发布时间】:2013-05-20 16:59:10
【问题描述】:
我正在尝试基于循环创建插入语句,但我得到 PLS-00103 在预期以下情况之一时遇到符号“文件结尾”:;
脚本的重点是根据连接表中另一个字段的值从另一个表中选择所有 ID,然后将这些 ID 插入到第二个表中,当然一次插入一行。
这是我目前所拥有的,我不确定为什么会出现错误。行号指向最后一个 CURRENT_DATE 条目。
BEGIN
For v_apv_cmp_id IN (
select distinct
paa.APV_CMP_ID
from APV_APVR paa
join APV_CMP pac on pac.apv_cmp_id = paa.apv_cmp_id
join SEC_DISPLAY ssd on ssd.app_level_id = pac.app_level_id
where ssd.field_table_name = 'application_name'
)
LOOP
INSERT INTO APV_APVR
(APV_APVR_ID, APV_CMP_ID, APVR_USR_ID, ORG_USR_ACV_TS, ORG_USR_NU, LTS_UPD_USR_NU, LTS_UPD_USR_TS)
values (
(
select MAX(APV_APVR_ID)+1 from APV_APVR
)
, v_apv_cmp_id
, 'tssao18'
, 'tssetac'
, CURRENT_DATE
, 'tssetac'
, CURRENT_DATE
);
END LOOP;
END;
【问题讨论】:
-
你能不能去掉这个值(从 PRE_APV_APVR 中选择 MAX(PRE_APV_APVR_ID)+1 )并用一些虚拟常量替换它,看看它是否有效
-
@可以直接用select代替cursor吗?
-
好吧,我需要增加那个表的 PK。它仅在插入一行时起作用。我希望能够将它用于多行。
-
将其转换为单个 SQL 语句并使用 rownum+coalesce((select max(APV_APVR_ID) from APV_APVR),0) 生成 id。只要这是在任何时候插入到表中的唯一会话,它就可以工作
-
v_apv_cmp_id用作 ID 有点可疑。尝试将其替换为v_apv_cmp_id.apv_cmp_id。