李晓亮的博客

导航

Proc *常用SQL句式小结

1.凡是先把SQL语句存储在宿主字符串变量中然后再执行的SQL语句,都必须先分析后执行(是为了分析识别出SQL语句中的宿主变量)
2.SQL语句存储在宿主字符串变量中与SQL语句自身含有虚拟宿主变量是两个不同的概念

@@@@@@@@@@@@@@@@@@@@@@@@[SELECT语句]@@@@@@@@@@@@@@@@@@@@@@@
EXEC SQL
    SELECT 字段列表
      INTO 宿主变量列表
    FROM 表名
    WHERE 字段1 = :宿主变量1 AND ...;
---------------------------------------------------
SELECT 字段列表  FROM tlxwtsywh where product like nvl(trim(''),'%') ...

SELECT 字段列表  FROM tlxwtsywh where product like nvl(trim(' '),'%') ...
的效果完全相同
---------------------------------------------------
SELECT 字段列表
   FROM 表名
   WHERE 字段1 like nvl(trim(:宿主变量1),'%') and 字段2like nvl(trim(:宿主变量1),'%') and ...
---------------------------------------------------
SELECT 字段列表
   FROM 表名
   WHERE 字段1 like '%'||nvl(trim(:宿主变量1),'%') and ...
注:||表示连接两个字符串
---------------------------------------------------
SELECT 字段列表
   FROM 表名
   WHERE 字段1 like ('%'||nvl(trim(' '),'%')) and ...
---------------------------------------------------
SELECT 字段列表
   FROM 表名
   WHERE 字段1 like ('%'||trim(' ')||'%') and ...
---------------------------------------------------
SELECT 字段列表
   FROM 表名
   WHERE 字段1 like ('%'||nvl(trim(:宿主变量1),'%')) and 字段2 like '%'||nvl(trim(:宿主变量1),'%') and ...
---------------------------------------------------
sprintf(保存SQL字串的宿主变量,"SELECT 字段列表 "
                              "FROM 表名 "
                              "WHERE 字段名1 LIKE '%'||nvl(trim(%%s%%),'%') AND 字段名2=%d AND ..."
                              ,字符变量1,整型变量2,...);
---------------------------------------------------
EXEC SQL
   DECLARE 游标变量_cur CURSOR FOR
   SELECT 字段列表
   FROM 表名
   WHERE 字段1=:宿主变量1 and 字段2=:宿主变量2,...
EXEC SQL OPEN 游标变量_cur;
where(1)
{
   EXEC SQL WHENEVER NOT FOUND DO BREAK;
   EXEC SQL FETCH 游标变量_cur INTO 宿主变量列表;
}
EXEC SQL CLOSE 游标变量_cur;
注:where循环的判断条件的写法有多种:
比如,1==1,1等
---------------------------------------------------
sprintf(保存SQL字串的宿主变量,"SELECT 字段列表 "
                              "FROM 表名 "
                              "WHERE 字段名1 LIKE '%%%s%%' AND 字段名2=%d AND ..."
                              ,变量1,变量2,...);
EXEC SQL PREPARE 动态解析名 FROM :保存SQL字串的宿主变量;
EXEC SQL DECLARE 游标变量_cur CURSOR FOR 动态解析名;
EXEC SQL OPEN 游标变量_cur;
where(1)
{
   EXEC SQL WHENEVER NOT FOUND DO BREAK;
   EXEC SQL FETCH 游标变量_cur INTO 宿主变量列表;
}
EXEC SQL CLOSE 游标变量_cur;         
---------------------------------------------------
/* 动态方法4 */

@@@@@@@@@@@@@@@@@@@@@@@@[UPDATE语句]@@@@@@@@@@@@@@@@@@@@@@@
sprintf(SQL字串宿主变量, "update 表名 set 字段1 = :宿主变量1 where 字段2 = :宿主变量2");
EXEC SQL PREPARE 动态解析名 FROM :SQL字串宿主变量;
EXEC SQL EXECUTE 动态解析名 USING :宿主变量1, :宿主变量2;
---------------------------------------------------

posted on 2010-08-06 16:11  LeeXiaoLiang  阅读(398)  评论(0)    收藏  举报