oracle 存储过程 调用动态sql
发布时间:2020-12-12 13:26:01 所属栏目:百科 来源:网络整理
导读:? oracle 存储过程 调用动态sql CreationTime--2018年8月16日11点25分 Author:Marydon 1.错误实现方式 --开始时间拼接‘ 00:00:00‘ V_SQL := ‘select decode(length(‘ || V_END || ‘),10,‘ || ‘concat(‘ || V_END || ‘,00:00:00),‘ || V_END || ‘)
?
oracle 存储过程 调用动态sqlCreationTime--2018年8月16日11点25分Author:Marydon1.错误实现方式--开始时间拼接‘ 00:00:00‘ V_SQL := ‘select decode(length(‘ || V_END || ‘),10,‘ || ‘concat(‘ || V_END || ‘,00:00:00),‘ || V_END || ‘) from dual‘; EXECUTE IMMEDIATE V_SQL; 编译成功,但是存储过程调用失败。 2.原因分析在oracl数据库中,ddl表示数据库定义语言,即我们平常使用的sql语句,声明的sql语句可以直接使用拼接字符串进行拼接; dml表示数据操纵语言,声明的sql语句不能再用管道符||来动态拼接变量。? 3.正确实现方式execute immediate属于dml,dml使用sql的规则如下: 声明sql语句 字符串拼接变量时,变量要使用占位符来代替,格式为 ":" + "名字",名字随意 调用sql语句 使用"using"来传递变量,代替占位符,格式为 "using var1,var2,..." V_SQL := ‘select decode(length(:v1),:v2,:v3) from dual‘; EXECUTE IMMEDIATE V_SQL INTO V_START USING V_START,V_START || ‘ 00:00:00‘,V_START; 结果展示: 4.测试入参 出参 5.最简单的方式--结束时间拼接‘ 00:00:00‘ SELECT DECODE(LENGTH(V_END),V_END || ‘ 00:00:00‘,V_END) INTO V_END FROM DUAL; ? ?相关推荐:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |