最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Oracle动态SQL的拼装要领

来源:动视网 责编:小采 时间:2020-11-09 11:08:02
文档

Oracle动态SQL的拼装要领

Oracle动态SQL的拼装要领:Oracle的动态SQL语句用起来很方便,但其拼装过程太烦人。尤其在拼装语句中涉及到date类型字段时,拼装时要加to_char先转换成字符 Oracle的动态SQL语句用起来很方便,但其拼装过程太烦人。尤其在拼装语句中涉及到date类型字段时,拼装时要加to_char先
推荐度:
导读Oracle动态SQL的拼装要领:Oracle的动态SQL语句用起来很方便,但其拼装过程太烦人。尤其在拼装语句中涉及到date类型字段时,拼装时要加to_char先转换成字符 Oracle的动态SQL语句用起来很方便,但其拼装过程太烦人。尤其在拼装语句中涉及到date类型字段时,拼装时要加to_char先


Oracle的动态SQL语句用起来很方便,但其拼装过程太烦人。尤其在拼装语句中涉及到date类型字段时,拼装时要加to_char先转换成字符

Oracle的动态SQL语句用起来很方便,但其拼装过程太烦人。尤其在拼装语句中涉及到date类型字段时,拼装时要加to_char先转换成字符,,到了sql中又要使用to_date转成date类型和原字段再比较。

例如这样一个SQL:

select '========= and (t.created>=to_date('''||to_char(sysdate,'yyyy-mm-dd')||''',''yyyy-mm-dd'') AND t.created< to_date('''||to_char(sysdate+1,'yyyy-mm-dd')||''',''yyyy-mm-dd''))' from dual;

它就是将sysdate转成字符串,再在生成的SQL中将字符串转换成date。

拼装出来的结果如下:

========= and (t.created>=to_date('2012-11-08','yyyy-mm-dd') AND t.created< to_date('2012-11-09','yyyy-mm-dd'))

字符串2012-11-08是我们使用to_char(sysdate,'yyyy-mm-dd')生成的,语句中涉及到的每一个单引号,都要写成两个单引号来转义。

虽然拼装过程很烦人,但只要掌握好三点,就应能拼装出能用的SQL语句。

一,先确定目标。应保证拼装出来的SQL应该是什么样子,然后再去配置那个动态SQL

二,拼装SQL的时候,所有使用连接符||连接的对象都应是varchar2类型,这种类型的对象以单引号开头,以单引号结尾。数字会自动转,但date需要我们手工使用to_char函数转。

三,遇到有引号的,就写成两个单引号。

如 ' I am a SQL developer '' '||v_name||' '' in China. telephone is '||v_number||' .'

v_name是字符型的,所以拼装它是需要前后加单引号。

这种转换很烦人,但从10g开始有一个新功能,可以让人不用这么烦。它就是q'[xxxxx]'

示例如下:

select q'[ I'm a SQL developer ' ]'||to_char(sysdate,'yyyy')||q'[' in China. telephone is ]'||1990||'.' from dual;

结果如下:

Result代码

I'm a SQL developer '2012' in China. telephone is 1990.

I'm使用一个单引号在q'[]'中就可以。
to_char(sysdate,'yyyy')转成的是2012,前后是要加单引号的。所以在q'[xxx ']'的结尾加了一个单引号。
这样就使得我们不用想以前那样使用 ''''表示一个单引号了。

简而言之,掌握这三点,就应该能拼装出能用的SQL。至于如果使用绑定变量输入输出,则需要使用into using关键字。

set serveroutput on;

declare
incoming date:=sysdate-10;
outgoing int;
begin
execute immediate 'select COUNT(*) FROM user_objects where created > :incoming' into outgoing using incoming ;
dbms_output.put_line(' count is: ' || outgoing);
end;
/

文档

Oracle动态SQL的拼装要领

Oracle动态SQL的拼装要领:Oracle的动态SQL语句用起来很方便,但其拼装过程太烦人。尤其在拼装语句中涉及到date类型字段时,拼装时要加to_char先转换成字符 Oracle的动态SQL语句用起来很方便,但其拼装过程太烦人。尤其在拼装语句中涉及到date类型字段时,拼装时要加to_char先
推荐度:
标签: 动态 sql oracle
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top