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 || ') 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),10,: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), 10, V_END || ' 00:00:00', V_END) INTO V_END FROM DUAL;
 

oracle 存储过程 调用动态sql的更多相关文章

  1. 【PL/SQL系列】Oracle存储过程使用动态SQL

    Oracle存储过程相信大家都比较了解,下面就为您介绍Oracle存储过程使用动态SQL的方法,希望对您能够有所帮助. CREATE OR REPLACE PROCEDURE P_STAT_SCORE ...

  2. oracle 存储过程使用动态sql

    Oracle存储过程使用动态SQL 有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者. DDL和DML (注意DDL中可以用拼接字符串的方法用来create ta ...

  3. Oracle 存储过程,临时表,动态SQL测试

    --创建事务级别的结果临时表 create global temporary table tmp_yshy( c1 ), c2 ) )on commit delete rows; --创建事务级别的存 ...

  4. 在Oracle中执行动态SQL的几种方法

    转载:在Oracle中执行动态SQL的几种方法 以下为内容留存: 在Oracle中执行动态SQL的几种方法 在一般的sql操作中,sql语句基本上都是固定的,如:SELECT t.empno,t.en ...

  5. ORACLE存储过程调用Web Service

    1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...

  6. oracle 存储过程调用 执行

    oracle 存储过程调用 博客分类: 数据库相关   oracle存储过程 2011年02月11日 星期五 14:47 SQL中调用存储过程语句: call procedure_name(); 调用 ...

  7. .NET易忘备留 ORACLE存储过程调用

    1.Oracle存储过程调用[返回信息,单体或者列表] public IResult FundBuild(string partnerId,string userId, DateTime beginD ...

  8. Oracle数据库之动态SQL

    Oracle数据库之动态SQL 1. 静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:一种为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大 ...

  9. Oracle 存储过程调用语句

    #oracle 存储过程调用语句declare v_custName varchar2(10); --客户姓名 v_num number; --订单分布天数 v_time number; --每日订单 ...

随机推荐

  1. zoj 3621 Factorial Problem in Base K 数论 s!后的0个数

    Factorial Problem in Base K Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onli ...

  2. tortoise git常用功能

    1.打tag TortoiseGit -> show log -> 选中版本 -> create tag at this version... TortoiseGit -> p ...

  3. SqlServer项目经验:介质集有2个介质簇,但只提供了1个。必须提供所有成员

    在对数据库备份与还原的过程中,我遇到一个问题“介质集有2个介质簇,但只提供了1个.必须提供所有成员”,下面详细的介绍一下遇到问题的经过与问题解决的方法! 一.备份与还原遇到的问题描述与解决方法: 前两 ...

  4. 为什么Scrum不行?

    这篇文章的原文在这里(原文链接)(下文不是全译,也不是部分译,我只是把其总结,有我自己的发挥,但是原意大致不变),这篇文章完全是在调侃Scrum的,作者第一段就是一个免费声明,其说他是Scrum和其它 ...

  5. linux上SVN解决冲突的办法

    转载:http://www.aixchina.net/club/thread-25902-1-1.html 这里,先说说冲突解决. 怎么会发生冲突呢? 两个人修改了不同文件?不会有冲突,他们不相关. ...

  6. scp遇到路径中有空格

    sudo scp root@1.1.1.1:/test/soft/123/Microsoft SQL Server 2000.iso .      错误! sudo scp root@1.1.1.1: ...

  7. ConnectivityManager详解

    常用方法: 1.监听网络连接(Wi-Fi, GPRS, UMTS, etc),当网络发生改变时发送广播(broadcase)进行通知 2.通过该类查询网络连接状态 常用方法: getActiveNet ...

  8. linux基础命令行

    1.ls ls //显示所有文件(不显示隐藏文件) ls -a //显示所有文件(显示隐藏文件) ls -l //显示所有文件详细信息 ls -S //以大小排序 ls -t //以时间排序 2.cd ...

  9. 简单的后台管理系统vue-cli3.0+element-ui

    前段时间在研究一个分发系统,发现vue-cli+element-ui好像是挺不错的,然后自己根据那个分发系统尝试搭建了一下 1.首先安装vue和vue-cli // 全局安装vue npm insta ...

  10. 用 Nokitjs 解决前端开发中的跨域问题

    问题 在开发一些「单页应用」时,通常会使用 Ajax 和服务器通讯,比如 RESTful API,通常「前端」和「服务端 API」可能是有不同人员在负责,也不在同一个工程下,那么开发过程中就可能会遇到 ...