pl/sql developer中sql语句执行的问题

wang_zheng_wz 2004-04-19 11:35:54
insert into jc_dwml (dwbh, dwdm, tydm, dwmc, dwsxbh, qhlxbh, dgbz, zzflbh)
values ((select max(dwbh)+1 dwbh from jc_dwml),
'30439573095',
'44000001000011', '广东省公安厅办公室', 1, 2, '0', 1)
单独执行没问题
但放到begin ... end;中就出现一大堆语法错误
把values中的(select max(dwbh)+1 dwbh from jc_dwml) 换为具体值如1111就可以
是不是begin ... end;中insert语句不能含select?还是别的什么原因
...全文
461 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
beckhambobo 2004-04-20
  • 打赏
  • 举报
回复
begin insert into jc_dwml (dwbh, dwdm, tydm, dwmc, dwsxbh, qhlxbh, dgbz, zzflbh) select max(dwbh)+1 , '30439573095', '44000001000011', '广东省公安厅办公室', 1, 2, '0', 1 from jc_dwml;end;

以上写法没问题
atao245993 2004-04-19
  • 打赏
  • 举报
回复
PL/SQL语句块的最大优点就是可以使用临时变量,一个语句中不能完成的你就分多个语句来完成。

写多几句,更条理。

另外在INSERT INTO 语句中不能重复用VALUES和SELECT。
SELECT语句本身是一条记录集,用INSERT INTO .... SELECT ....就可以了。
如果用VALUES就不能用SELECT。

insert into jc_dwml (dwbh, dwdm, tydm, dwmc, dwsxbh, qhlxbh, dgbz, zzflbh)
select max(dwbh)+1,'30439573095', '44000001000011', '广东省公安厅办公室', 1, 2, '0', 1
from jc_dwml ;
drabit 2004-04-19
  • 打赏
  • 举报
回复
sql没有问题,放在begin ... end也没有问题

把错误信息贴出来
洪十二 2004-04-19
  • 打赏
  • 举报
回复
declare
v_dwbh number;
begin
select max(dwbh)+1 into v_dwbh from jc_dwml;
insert into jc_dwml (dwbh, dwdm, tydm, dwmc, dwsxbh, qhlxbh, dgbz, zzflbh)
values (v_dwbh,'30439573095','44000001000011', '广东省公安厅办公室', 1, 2, '0', 1)

end;
/
wang_zheng_wz 2004-04-19
  • 打赏
  • 举报
回复
原来如此,多谢!
drabit 2004-04-19
  • 打赏
  • 举报
回复
查阅了oracle的文档,发现oracle9.0.1才在pl/sql中完全支持sql语法,原文如下:

Release 1 (9.0.1)
Integration of SQL and PL/SQL parsers

PL/SQL now supports the complete range of syntax for SQL statements, such as INSERT, UPDATE, DELETE, SELECT, and so on. If you received errors for valid SQL syntax in PL/SQL programs before, those statements should now work
wang_zheng_wz 2004-04-19
  • 打赏
  • 举报
回复
Oracle8i Enterprise Edition Release 8.1.7.0.0
PL/SQL Developer Version 5.0.1.480
drabit 2004-04-19
  • 打赏
  • 举报
回复
oracle 版本是多少?
我在9i里面完全按照你的sql做,一点问题没有
pl/sql developer 版本:5.1.4.729
wang_zheng_wz 2004-04-19
  • 打赏
  • 举报
回复
我在sql window中做的
drabit 2004-04-19
  • 打赏
  • 举报
回复
你在command windows中做还是在sql windows中做?
wang_zheng_wz 2004-04-19
  • 打赏
  • 举报
回复
好像是begin ... end;中的insert语句中不能有select,请大家不用我的语句帮我试试
wang_zheng_wz 2004-04-19
  • 打赏
  • 举报
回复
规整格式如下也不行
begin
insert into jc_dwml (dwbh, dwdm, tydm, dwmc, dwsxbh, qhlxbh, dgbz, zzflbh)
values ((select max(dwbh)+1 dwbh from jc_dwml),
'30439573095', '44000001000011', '广东省公安厅办公室', 1, 2, '0', 1);
end;
wang_zheng_wz 2004-04-19
  • 打赏
  • 举报
回复
可是为什么
insert into jc_dwml (dwbh, dwdm, tydm, dwmc, dwsxbh, qhlxbh, dgbz, zzflbh) values ((select max(dwbh)+1 dwbh from jc_dwml), '30439573095', '44000001000011', '广东省公安厅办公室', 1, 2, '0', 1)



begin insert into jc_dwml (dwbh, dwdm, tydm, dwmc, dwsxbh, qhlxbh, dgbz, zzflbh) values ((select max(dwbh)+1 dwbh from jc_dwml), '30439573095', '44000001000011', '广东省公安厅办公室', 1, 2, '0', 1);end;

就不行呢

错误代码如下

ORA-06550: 第 1 行, 第 91 列:
PLS-00103: 出现符号 "SELECT"在需要下列之一时:
(-+modnotnullothers
<an identifier><a double-quoted delimited-identifier>
<a bind variable>avgcountcurrentexistsmaxminpriorsqlstddev
sumvarianceexecuteforalltimetimestampintervaldate
<a string literal with character set specification>
<a number><a single-quoted SQL string>
ORA-06550: 第 1 行, 第 128 列:
PLS-00103: 出现符号 ","在需要下列之一时:
;returnreturningandor
ORA-06550: 第 1 行, 第 199 列:
PLS-00103: 出现符号 "END"在需要下列之一时:
beginfunctionpackagepragma
proceduresubtypetypeuse<an identifier>
<a double-quoted delimited-identifier>cursorformcurrent

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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