读书人

存储过程中merge into添条件

发布时间: 2012-09-17 12:06:51 作者: rapoo

存储过程中merge into加条件
create or replace procedure test_jay_01
as
sql_txt varchar2(1000);
sql_txt_columns varchar2(1000);
sql_txt_columns_update varchar2(1000);
sql_txt_columns_insert varchar2(1000);

begin
sql_txt_columns :='STUDENT_NEW_JAY.name,STUDENT_NEW_JAY.age,STUDENT_NEW_JAY.class';

sql_txt_columns_update := 'STUDENT_NEW_JAY.age=STUDENT_JAY.age,STUDENT_NEW_JAY.class=STUDENT_JAY.class';

sql_txt_columns_insert := 'STUDENT_JAY.name,STUDENT_JAY.age,STUDENT_JAY.class';

sql_txt := 'merge into STUDENT_NEW_JAY using STUDENT_JAY on(STUDENT_NEW_JAY.name=STUDENT_JAY.name)
when matched then update set ' || sql_txt_columns_update|| ' when not matched then insert
(' || sql_txt_columns ||') values(' || sql_txt_columns_insert || ') where STUDENT_JAY.name=张三';
execute immediate sql_txt;
commit;
exception
when others then
rollback;
end;


我使用merge into插入数据时想加入限制条件,这里比方说name为张三的记录,这个条件应该怎么加呢,我上面的写法是不对的。






[解决办法]
一 ') where STUDENT_JAY.name=''张三''';



v_name varchar2(40);
begin
v_name := '张三';
') where STUDENT_JAY.name=:p';
execute immediate sql_txt using v_name;
[解决办法]
where STUDENT_JAY.name=张三';

字符串要用单引号括起来,但是因为本来就在单引号里面,所以单引号前面再加个单引号转义。

SQL code
where STUDENT_JAY.name=''张三''';
[解决办法]
探讨
多谢2楼3楼的兄弟,但是我如果加入时间限制该怎样写呢?
比如说:
where 当前时间-3天<=STUDENT_JAY.createtime<=当前时间+3天,
好像不能直接写sysdate-3

[解决办法]
探讨
多谢2楼3楼的兄弟,但是我如果加入时间限制该怎样写呢?
比如说:
where 当前时间-3天<=STUDENT_JAY.createtime<=当前时间+3天,
好像不能直接写sysdate-3

读书人网 >oracle

热点推荐