小弟请教各位,下面是我写的一个存储过程。
目的:通过输入参数var1和var2 ,向Test表中动态update或者insert一条记录。(如果Test表中的a字段存在值等于var1的记录,则update操作,否则insert操作)
具体代码如下:
create or replace procedure mergeTest(var1 in number,var2 in varchar)
AS
v_a number(10);
v_b varchar2(20);
begin
v_a := var1;
v_b := var2;
merge into Test t1
using (select v_a as a,v_b as b from dual) t2
on (t1.a = t2.a)
when matched then
update set t1.b = t1.b
when not matched then
insert (t1.a,t1.b) values(t2.a,t2.b);
commit;
end mergeTest;在单步调试过程中,执行到 merge into Test t1 时,pl/sql 处于executing 状态,无法继续调试。pl/sql 处于假死状态,不能直接关闭调试窗口。只能直接结束pl/sql的进程。
不知那里出了问题。请高手赐教,小弟不甚感激。
目的:通过输入参数var1和var2 ,向Test表中动态update或者insert一条记录。(如果Test表中的a字段存在值等于var1的记录,则update操作,否则insert操作)
具体代码如下:
create or replace procedure mergeTest(var1 in number,var2 in varchar)
AS
v_a number(10);
v_b varchar2(20);
begin
v_a := var1;
v_b := var2;
merge into Test t1
using (select v_a as a,v_b as b from dual) t2
on (t1.a = t2.a)
when matched then
update set t1.b = t1.b
when not matched then
insert (t1.a,t1.b) values(t2.a,t2.b);
commit;
end mergeTest;在单步调试过程中,执行到 merge into Test t1 时,pl/sql 处于executing 状态,无法继续调试。pl/sql 处于假死状态,不能直接关闭调试窗口。只能直接结束pl/sql的进程。
不知那里出了问题。请高手赐教,小弟不甚感激。
解决方案 »
- 请教一个sql语句,求解答----------------------------------------------
- oracle 透明网关 软件的下载地址
- 急救:sql2000的存储过程怎么转化到Oracle?
- 不知哪里出了问题,一个IF语句的true和false分支都被执行到? 望解惑,不胜感激!
- 求sql,再线waiting
- 新手求助--安装oracle客户端问题
- 请问Pro* C在哪里编译,Oracle、c还是C++?谢谢
- 如何解决ORA-01480: STR 赋值变量缺少空后缀错误?
- 求救,帮帮忙了,哥哥姐姐们。。。
- 关于表空间
- linux安装Oracle9设置环境变量在哪设置?
- 关于在开发总Oracle的数据安全问题?
以下代码测试通过:
CREATE OR REPLACE PROCEDURE MERGETEST(VAR1 IN NUMBER, VAR2 IN VARCHAR2) AS
V_A NUMBER(10);
V_B VARCHAR2(20);
BEGIN
V_A := VAR1;
V_B := VAR2;
MERGE INTO TEST T1
USING (SELECT V_A AS A, V_B AS B FROM DUAL) T2
ON (T1.A = T2.A)
WHEN MATCHED THEN
UPDATE SET T1.B = T2.B
WHEN NOT MATCHED THEN
INSERT (T1.A, T1.B) VALUES (T2.A, T2.B);
COMMIT;
END MERGETEST;
/
我已经发现自己的错误,真是粗心。
update set t1.b = t1.b 应该改成 update set t1.b = t2.b但调试时执行到 merge into Test t1 时,依然出现原来的情况:pl/sql 处于executing 状态,无法继续调试。请教高手,是何原因啊??
我已经重新安装了pl/sql 7.0 Version 。
出现了很奇怪的问题:
在第一次调试该过程时,可以成功。但是在多运行几次,就还是老问题:
merge into 这行一直处于executing状态,无法继续调试。不知道是不是Test表建的有问题:
create table Test
(
a number(10),
b varchar2(20)
)
或者是:
merge into 对用户有权限方面的要求。另外,我安装的是oracle10g 服务器端。
我在调试运行该过程中,没有其它session进行DML操作的。
当前只有一个normal 用户的session 。并且,没用对该Test表进行任何别的DML操作。