PROC中的4种动态SQL简介

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-02 06:32 点击:

[url]http://oracle.chinaitlab.com/exploiture/38243.html
[/url]  

  (1)动态SQL1: 不能是查询(SELECT)语句,并且没有宿主变量.
  
  用法:拼一串动态SQL语句,并用EXECUTE IMMEDIATE执行,如:
C代码 
EXEC SQL EXECUTE IMMEDIATE "CREATE TABLE dyn1 (col1 VARCHAR2(4))"; 

  (2)动态SQL2: 不能是查询(SELECT)语句,并且输入的宿主变量数目是知道的,
  
  用法:拼一串动态SQL语句,用PREPARE,EXECUTE语句执行.
C代码 
strcpy(c_sql, "DELETE FROM EMP WHERE EMPNO = "); 
EXEC SQL PREPARE sql_stmt FROM :c_sql; 
EXEC SQL EXECUTE sql_stmt USING :emp_number; 

  (3)动态SQL3: 用于创建动态查询, 并且要查询的字段及输入的宿主变量数目是知道的
  
  用法: 拼一串动态SQL语句,用PREPARE分析该语句,并要定义一个CURSOR进行取值
  
  如:如要查询的数据按一年12月放到12张表中。表名为user_fee_1mon, user_fee_2mon,....可采用动态SQL3来进行查询
C代码 
strcpy(c_sql,"select c_user_id,c_user_name,to_char(t_date,'yyyy/mm/dd hh:mi:ss'),n_fee\n"); 
strcat(c_sql,"from USER_FEE_"); 
strcat(c_sql,ac_mon); 
strcat(c_sql," \n where c_user_id = :v1"); 
 
EXEC SQL PREPARE s FROM :c_sql; 
 
EXEC SQL DECLARE cur_user_fee CURSOR FOR s; 
 
EXEC SQL OPEN cur_user_fee USING :ac_user_id; 
 
while(1) 

 
EXEC SQL FETCH cur_user_fee into :c_user_id,:c_user_name,:c_date,:n_fee); 
 
if (sqlca.sqlcode < 0) 

/*FETCH CURSOR失败*/ 
printf("fetch cursor cur_user_fee fail,sqlcode=%ld,sqlserr=%s",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc); 

if( sqlca.sqlcode == SQLNOTFOUND) 

break; 


EXEC SQL CLOSE cur_user_fee; 

  (4)动态SQL4:要处理的字段及输入的宿主变量数目和主变量的类型事先是不知道的,如:
  INSERT INTO EMP (<unknown> VALUES (<unknown>
  
  是最复杂的动态SQL,很少用,在此不做介绍。

作者“雪狐BLOG”
 

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • sql常见面试题
      • SQL SERVER 2005性能之跟踪
      • SQL编程(一)
      • LINUX上RMAN自动备份脚本
      • sql server面试题
      • 如何将多个SQL查询统计结果一次显示出来
      • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
      • SQL小技巧系列 --- 行转列合并
      • sql server 列转行
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1