CREATE or REPLACE PROCEDURE proc_rb_test
(pmjyrq varchar2,pmshbh varchar2)
AS
rq varchar2(8);
sh varchar2(3);
BEGIN
rq := pmjyrq;
sh := pmshbh;
delete from table1;
insert into tbale1 (a,b,c)
select a,b,c
from table2 where a = sh
commit;
END;
以上代码怎么不行呢。
CREATE or REPLACE PROCEDURE proc_rb_test
(pmjyrq varchar2,pmshbh varchar2)
AS
rq varchar2(8);
sh varchar2(3);
sqlstr varchar2(3000);
BEGIN
rq := pmjyrq;
sh := pmshbh;
delete from table1;
sqlstr := 'insert into tbale1 (a,b,c)
select a,b,c
from table2 where a = '''||sh||'''';
execute immediate sqlstr;
commit;
END;
这样到是可以,难道只能用这样执行动态语句????????????
(pmjyrq varchar2,pmshbh varchar2)
AS
rq varchar2(8);
sh varchar2(3);
BEGIN
rq := pmjyrq;
sh := pmshbh;
delete from table1;
insert into tbale1 (a,b,c)
select a,b,c
from table2 where a = sh
commit;
END;
以上代码怎么不行呢。
CREATE or REPLACE PROCEDURE proc_rb_test
(pmjyrq varchar2,pmshbh varchar2)
AS
rq varchar2(8);
sh varchar2(3);
sqlstr varchar2(3000);
BEGIN
rq := pmjyrq;
sh := pmshbh;
delete from table1;
sqlstr := 'insert into tbale1 (a,b,c)
select a,b,c
from table2 where a = '''||sh||'''';
execute immediate sqlstr;
commit;
END;
这样到是可以,难道只能用这样执行动态语句????????????
解决方案 »
- 安装oracle后有5个相关的服务?哪三个是必须启动的
- 应该是比较简单的问题我不会
- 通过pl/sql操作Oracle表已经很久,但是今天突然发现在my object下出现了很多莫名其妙的表
- 求教:数据库结果集的合并问题
- 已登录当前数据库,oracle数据库,用什么命令可以获得当前数据库名和SID和用户名?
- ORA-12154:无法处理服务名!!
- 各位老大,什么地方可以下载oracle817啊,小弟急啊
- 请问Oracle9i的安装问题,小妹不及,有空的请过来看看
- 如何在两个数据库中进行备份?
- 小弟初学Oracle,有几道题不会做,希望各位高手帮帮忙。
- 求教关于JOB调用带有参数的存储过程?
- 能不能取表的任意一半数据和另一半数据,好希望能取
rq varchar2(10);
sh integer;
BEGIN
rq := 'f';
sh := 6;
insert into t (username,price) values(rq,sh);
commit;
END;
/
(pmjyrq varchar2,pmshbh varchar2)
AS
rq varchar2(8);
sh varchar2(3);
BEGIN
rq := pmjyrq;
sh := pmshbh;
delete from table1;
insert into tbale1 (a,b,c)
select a,b,c
from table2 where a = sh;//这里没分号
commit;
END;
如果不是这个,那么报什么错了
设置成常量insert into tbale1 (a,b,c)
select a,b,c
from table2 where a = '001' 可以直接执行,唯独才过程里执行的时候就不行。是不是这个语句是一次插入很多条记录所以不能这样用参数呢。
(pmjyrq varchar2,pmshbh varchar2)---- 改成:CREATE or REPLACE PROCEDURE proc_rb_test
(pmjyrq IN varchar2,pmshbh IN varchar2)另外,你所谓的不能执行,是报什么错误信息呢?还是根本就编译不能通过呢?把错误信息贴出来
而且程序本身能编译通过,而且执行也没有错误,我还在PL*sql里分步执行 参数传递都正常,但是就是没有结果。
难道真的是chliang315()所说在procedure中不能直接用dml语句,如果要用,你必须是使用exexute immediate来执行。如果这样的话写些复杂的存储过程那就麻烦了。