WEB开发网
开发学院数据库DB2 从 SQL 进行操作系统调用 阅读

从 SQL 进行操作系统调用

 2009-11-20 00:00:00 来源:WEB开发网   
核心提示: 注:仅有 DB2 UDB V8 支持 GRANT EXECUTE 语句,同样,从 SQL 进行操作系统调用(4),对于 DB2 UDB V7,必须将 PARAMETERSTYLE SQL 语句替换成 PARAMETER STYLE DB2SQL,实现该函数的相应 C 代码也很简单,如 清单 4所

注:仅有 DB2 UDB V8 支持 GRANT EXECUTE 语句。同样,对于 DB2 UDB V7,必须将 PARAMETERSTYLE SQL 语句替换成 PARAMETER STYLE DB2SQL。

实现该函数的相应 C 代码也很简单,如 清单 4所示。该代码打开指定文件、验证文件的大小以确保所有数据都能复制到 CLOB,然后在关闭该文件之前将数据实际复制到 CLOB。

清单 4. 将文件读入 CLOB 中的 C 代码

#include <stdio.h> 
#include <sqludf.h> 
void SQL_API_FN readFileToClob( 
    SQLUDF_VARCHAR *fileName, 
    SQLUDF_CLOB  *fileData,  /* output */ 
    /* null indicators */ 
    SQLUDF_NULLIND *fileName_ind, 
    SQLUDF_NULLIND *fileData_ind, 
    SQLUDF_TRAIL_ARGS) 
{ 
  int rc = 0; 
  long fileSize = 0; 
  size_t readCnt = 0; 
  FILE *f = NULL; 
   
  f = fopen(fileName, "r"); 
  if (!f) { 
    strcpy(SQLUDF_MSGTX, "Could not open file "); 
    strncat(SQLUDF_MSGTX, fileName, 
        SQLUDF_MSGTEXT_LEN - strlen(SQLUDF_MSGTX)-1); 
    strncpy(SQLUDF_STATE, "38100", SQLUDF_SQLSTATE_LEN); 
    return; 
  } 
   
  rc = fseek(f, 0, SEEK_END); 
  if (rc) { 
    sprintf(SQLUDF_MSGTX, "fseek() failed with rc = %d", rc); 
    strncpy(SQLUDF_STATE, "38101", SQLUDF_SQLSTATE_LEN); 
    return; 
  } 
   
  /* verify the file size */ 
  fileSize = ftell(f); 
  if (fileSize > fileData->length) { 
    strcpy(SQLUDF_MSGTX, "File too large"); 
    strncpy(SQLUDF_STATE, "38102", SQLUDF_SQLSTATE_LEN); 
    return; 
  } 
  /* go to the beginning and read the entire file */ 
  rc = fseek(f, 0, 0); 
  if (rc) { 
    sprintf(SQLUDF_MSGTX, "fseek() failed with rc = %d", rc); 
    strncpy(SQLUDF_STATE, "38103", SQLUDF_SQLSTATE_LEN); 
    return; 
  } 
   
  readCnt = fread(fileData->data, 1, fileSize, f); 
  if (readCnt != fileSize) { 
    /* raise a warning that something weird is going on */ 
    sprintf(SQLUDF_MSGTX, "Could not read entire file " 
        "(%d vs %d)", readCnt, fileSize); 
    strncpy(SQLUDF_STATE, "01H10", SQLUDF_SQLSTATE_LEN); 
    *fileData_ind = -1; 
  } 
  else { 
    fileData->length = readCnt; 
    *fileData_ind = 0; 
  } 
} 

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:SQL 进行 操作系统

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接