Oracle存储过程where语句使用变量

存储过程中,传入一个参数V_DQDM。要求V_DQDM长度是6位时,语句为update table1 ..... where dqdm=V_DQDM 。当V_DQDM长度小于6位时,语句为update table1 ..... where dqdm like V_DQDM||'%'。
因为语句较多,可不可以像java程序里一样,使用一个变量,用拼字符串的方式,实现一个where 语句。
如java 中,String wheSql=""; if(v_dqdm.length()>=6){wheSql=" where dqdm =' "+v_dqdm+" ' "}else{wheSql=" where dqdm like ' "+v_dqdm+ " %' "}
"update table ...... "+wheSql ;
求一个存储过程完整的写法。谢谢

create PROCEDURE p_update
(V_DQDM in varchar2(6))
as
begin
if length(V_DQDM)=6
then
update table1 ..... where dqdm=V_DQDM;
commit;
else
update table1 ..... where dqdm like V_DQDM||'%';
commit;
end if;
end p_update;

类似这么写

追问

不是这个意思。有很多很多的update语句。希望把where语句作为一个变量来用。
这样update语句只要写一个就行了。你这样要写两个。
就像上面写的java的例子一样。

追答

create PROCEDURE p_update
(V_DQDM in varchar2)
as
v_str varchar2(200);
begin
select case when length(V_DQDM<6) then 'dqdm like V_DQDM||'%'' else 'dqdm=V_DQDM' into v_str from dual;
execute immediate 'update table1 ..... where '||v_str|| '';
end p_update;

没试过这种写法,可能%号那还需要转义,有点麻烦,只能给你提供点思路了

温馨提示:内容为网友见解,仅供参考
无其他回答

Oracle存储过程where语句使用变量
create PROCEDURE p_update(V_DQDM in varchar2(6))asbeginif length(V_DQDM)=6thenupdate table1 ... where dqdm=V_DQDM;commit;elseupdate table1 ... where dqdm like V_DQDM||'%';commit;end if;end p_update;类似这么写

oracle在写存储过程时怎样将变量和字符串进行连接?
变量直接写,要连接字符串的话,用 || 这个符号,后面的字符串用单引号引。变量 V_str 字符串' select emp from table where '连接后为:' select emp from table where ' || V_str

oracle 的存储过程中 动态的创建一张表 然后插入一个变量到这个表中,表...
1、execute immediate ' insert into addtopinfo values('||sysdate||','||v_name||')'; v_name 既然是变量 怎么可能会用' '括号起来;就算是 直接执行 的话 也是 execute immediate ' insert into addtopinfo values(sysdate,v_name);2、如果有v_name的话 ,我建议你一般用拼sql的方式来...

谁知道Oracle数据库存储过程的语法?
DATE;BEGIN END 存储过程名字 2.SELECT INTO STATEMENT 将select查询的结果存入到变量中,可以同时将多个 列存储 多个变量中,必须有一条 记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)例子:BEGIN SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;EXCEPTION WHEN NO_DATA_FOUND ...

oracle存储过程的基本语法及注意事项
) IS 变量 INTEGER := ;变量 DATE;BEGIN END 存储过程名字 SELECT INTO STATEMENT 将select查询的结果存入到变量中 可以同时将多个列存储多个变量中 必须有一条 记录 否则抛出异常(如果没有记录抛出NO_DATA_FOUND)例子 BEGIN SELECT col col into 变量 变量 FROM typestruct where xxx;EXCEPTION WHEN ...

oracle 存储过程 sql中in变量问题
select count(*) into v_count from t where type in(a);应该是有问题的.可以这样尝试一下:a varchar2(N);execute immediate 'select count(1) from t where type in('||a||')' into v_count ;还要注意传入的变量,引号别弄丢了...应该是可以的,我没有测试,很久没有动过这些了....

oracle数据库sql语句where能不能加if?
`IF`语句在SQL中主要用于条件判断,通常出现在存储过程或函数中,而非直接嵌入`WHERE`子句中。在特定的SQL上下文中,`IF`用于逻辑判断,而`WHERE`子句用于过滤查询结果。对于动态拼接语句,即根据变量或表达式构建SQL查询,可以使用`IF`语句与字符串拼接方法。例如,使用`VARIABLE`存储要查询的产品ID,通过...

oracle创建存储过程 有小红叉, 存储过程新手,请高手不吝赐教,, 语句...
在存储过程中,一个select语句中,查找的字段必须要放到变量中 也就是 select 字段1 into 变量1 from 表名 where 条件;这样才不会报错 而你这个,没什么实际的意义 你要是非想让它不红叉,可以这样 CREATE OR REPLACE PROCEDURE P_TF_F_HOT_CHECK ( title in varchar2)IS v_hot_id int;v_...

ORACLE存储过程varchar2变量赋值问题。
看到错误提示的地方,你应该是想执行一个动态SQL(在open语句中str是一个变量, 但是想把str用成SQL语句的in字句的部分),这明显是不对的(如果要用动态SQL,则是另外的写法)。可以open的查询语句,直接在查询语句中根据ORGCODE的值用case when构造查询的条件。例如:where (case when ORGCODE = 'SH' ...

oracle 中字段作为变量的语句怎么写
1. Oracle 8i 及以上版本的过程中处理动态 SQL 语句的办法 declare v_col_name varchar2(30) := ’name’; --字段名 name 用变量来表示 v_user_name varchar2(30); --用户名称 v_user_age integer; --用户年龄 v_sql_str varchar2(500); --动态 SQL 语句 begin v_sql_str := ’...

相似回答