当前位置: 移动技术网 > IT编程>数据库>Oracle > Oracle如何直接运行OS命令(下)第1/2页

Oracle如何直接运行OS命令(下)第1/2页

2017年12月12日  | 移动技术网IT编程  | 我要评论

唐山烟花爆竹厂爆炸,笔夫博客,游览车遭黑熊围堵

正在看的oracle教程是:oracle如何直接运行os命令(下)。  exec sql whenever sqlerror continue;
  sqlglm(msg_buffer, &buffer_size, &msg_length);
  printf("daemon error while connecting:\n");
  printf("%.*s\n", msg_length, msg_buffer);
  printf("daemon quitting.\n");
  exit(1);
  } 

  void 
  sql_error() 
  { 
  char msg_buffer[512];
  int msg_length;
  int buffer_size = 512;

  exec sql whenever sqlerror continue;
  sqlglm(msg_buffer, &buffer_size, &msg_length);
  printf("daemon error while executing:\n");
  printf("%.*s\n", msg_length, msg_buffer);
  printf("daemon continuing.\n");
  } 
  main() 
  { 
  exec sql whenever sqlerror do connect_error();
  exec sql connect :uid;
  printf("daemon connected.\n");

  exec sql whenever sqlerror do sql_error();
  printf("daemon waiting...\n");
  while (1) { 
  exec sql execute 
  begin 
  /*接收deamon发来的字符*/ 
  :status := dbms_pipe.receive_message('daemon');
  if :status = 0 then 
  /*取出字符*/ 
  dbms_pipe.unpack_message(:command);
  end if;
  end;
  end-exec;
  if (status == 0) 
  { 
  command.arr[command.len] = '\0';
  /*如果是stop,该进程就退出*/ 
  if (!strcmp((char *) command.arr, "stop")) 
  { 
  printf("daemon exiting.\n");
  break;
  } 

  else if (!strcmp((char *) command.arr, "system")) 
  { 
  exec sql execute 
  begin 
  dbms_pipe.unpack_message(:return_name);
  dbms_pipe.unpack_message(:value);
  end;
  end-exec;
  value.arr[value.len] = '\0';
  printf("will execute system command '%s'\n", value.arr);
  /*运行os命令*/ 
  status = system(value.arr);
  exec sql execute 
  begin 
  dbms_pipe.pack_message('done');
  dbms_pipe.pack_message(:status);
  :status := dbms_pipe.send_message(:return_name);
  end;
  end-exec;

1

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网