zoukankan      html  css  js  c++  java
  • [K/3Cloud]ksql翻译札记

    2011-11-16
    又学一招,集合转化临时表的方法:
    var sql = string.Format(@"select b.FENTRYID,a.{2} from {0} a
    inner join {1} b on a.FID = b.FID
    inner join table(strSplit(@FENTRYID, ',')) on b.FENTRYID = FENTRYID",
    ksql遇到Table(strSplit("xxxx",','))会把它转换成临时表,灰常好用的一个东东,赞一个,老崔,老魏辛苦了,ksql因你们而精彩。

    2011-10-26
    oracle里关联表更新时,外表(被更新的表)的字段是不能与子查询From后的表进行字段关联的,也就是外表的字段不能出现在On的后面,与子查询条件关联时,只能放在where条件里。
    Example:
    update table1 t1 set (f1,f2)=(
    select u.f1,u.f2
    from table2 u1
    inner join table3 t3 on u1.fid=t3.fid and t1.fentryid=t3.fsrcentryid
    where t1.fbomid=u1.fbomid

    上面的红色部分写法错误,应该移动到where后,否则oracle报语法错误

    2011-10-12
    1、ksql不支持多表关联后进行删除

    当oracle数据库建立的区域信息如图:
    以下sql执行会报错:
    sbSql.AppendLine(" SELECT T1.FISWORKTIME FROM T_ENG_WORKCALDATA T1 ");
    sbSql.AppendLine(" INNER JOIN T_ENG_WORKCALMAP T2 ON T1.FID=T2.FCALID ");
    sbSql.AppendLine(" AND T1.FDAY>=@PreDate AND T1.FDAY<@NxtDate ");
    sbSql.AppendLine(Filter);

    parames.Add(new SqlParam("@PreDate", DbType.Date,date.ToShortDateString()));
    parames.Add(new SqlParam("@NxtDate", DbType.Date, NextDate.ToShortDateString()));

    return AppServiceContext.DBService.ExecuteDynamicObject(ctx, sbSql.ToString(), null, null, CommandType.Text, parames.ToArray());
    所以对于日期作为条件参数进行查询时,不要转换成字符串,就把日期类型赋值进去就可以:
    因此,只需要去掉上面代码里的ToShortDateString()即可。
    其实原因就是:应用层服务器的时间格式与DB服务器的时间格式不一致导致的
    这里oracle显示日期格式:DD-MM-YY
    而我们服务器通常是:YYYY/MM/DD,这样4位数的年份成了oracle的天了,当然非法了。
    所以遇到日期作为过滤参数,我们不用自作聪明给个字符串,给个日期类型就可以了,剩下的就是数据驱动层的事了

    2011-09-27
    oracle下参数化查询时,变量列表顺序必须与使用到变量顺序保持一致
    如:select * from t1 where t1.f1=:f1 and t1.f2=:f2;
    则定义变更序列时,必须定义f1,再定义f2,否则有可能返回不是期望的结果。

    2011-09-26:
    /*dialect*/
    SELECT result.fid FROM
    (
    select fid,fmaterialid,ROW_NUMBER() over (partition by fid order by fid) as FIDGROUP from
    (
    select fid,fmaterialid,ROW_NUMBER() over (partition by fid,fmaterialid order by fid,fmaterialid) as MasterGroup
    from t_eng_bomchild
    where fmaterialid in (10069) and nvl(freplaceid,0)=0 and FMATERIALTYPE <> 2
    ) a where a.MasterGroup=1
    ) result where result.FIDGROUP=1;
    如下sql在pl/sql里执行无问题,但是在代码里进行提交执行时报:ORA-00911,字符无效的错误
    经过尝试,发现单条oracle语句执行,不需要加”;",去掉最后的“;”即可。

    2011-09-25:
    1、row_number() over (partition by field0 order by field1) 这样的分页函数,sql server(2005及以上版本)及oracle(9i及以上版本)都支持,但是ksql不支持,所以用到这个的地方,就需要进行方言执行,好在他们俩语法一样,写法不用区分
    2、oracle里,不能在子查询外使用as aliasName这样的格式来定义子查询返回的子表别名,不能加as, sql server都支持,所以只要在方言执行里不加"as 表别名"这样的格式来定义别名就可以。

    2011-09-01:

    1、ksql只认识形如:{ts'yyyy-MM-dd HH:mm:ss'} 这样的日期字符串
  • 相关阅读:
    MySQL数据库的优化
    PHP中获取文件扩展名
    PHP实现几种经典算法详解
    Linux服务器上crontab定时执行脚本文件
    LeetCode每日一题(五):加一
    巧妙利用枚举找出数组元素所在区间
    PHP实现几种经典算法详解
    _initialize() 区别 __construct()
    LeetCode每日一题(四):搜索插入位置
    LeetCode每日一题(三):移除元素
  • 原文地址:https://www.cnblogs.com/fyq891014/p/3308536.html
Copyright © 2011-2022 走看看